@burdenoff/microfe-organization 2026.625.2 → 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/organization-management/modules/members/components/InviteStatusBadge.js +6 -2
- package/dist/organization-management/modules/members/components/InviteStatusBadge.js.map +1 -1
- package/dist/organization-management/modules/members/pages/InviteMemberPage.js +58 -53
- package/dist/organization-management/modules/members/pages/InviteMemberPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/InvitePeoplePage.js +56 -52
- package/dist/organization-management/modules/members/pages/InvitePeoplePage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js +72 -68
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MembersListPage.js +232 -225
- package/dist/organization-management/modules/members/pages/MembersListPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js +172 -182
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js.map +1 -1
- package/dist/organization-management/modules/members/pages/OrganizationInviteAcceptancePage.js +132 -128
- package/dist/organization-management/modules/members/pages/OrganizationInviteAcceptancePage.js.map +1 -1
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js +5 -1
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js +42 -37
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js +316 -266
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js +52 -47
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js.map +1 -1
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js +108 -96
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js +5 -1
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js +43 -38
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js +341 -286
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js +50 -45
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js.map +1 -1
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js +219 -209
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js.map +1 -1
- package/package.json +2 -2
- package/dist/organization-management/shared/components/feedback/EmptyState.js +0 -31
- package/dist/organization-management/shared/components/feedback/EmptyState.js.map +0 -1
|
@@ -5,229 +5,236 @@ import { SearchInput as r } from "../../../shared/components/input/SearchInput.j
|
|
|
5
5
|
import { SelectionCheckbox as i } from "../../../shared/components/input/SelectionCheckbox.js";
|
|
6
6
|
import { LoadingState as a } from "../../../shared/components/feedback/LoadingState.js";
|
|
7
7
|
import { ErrorState as o } from "../../../shared/components/feedback/ErrorState.js";
|
|
8
|
-
import {
|
|
9
|
-
import { useDebouncedValue as c } from "../../../shared/hooks/useDebouncedValue.js";
|
|
8
|
+
import { useDebouncedValue as s } from "../../../shared/hooks/useDebouncedValue.js";
|
|
10
9
|
import { useConfirmDialog as ee } from "../../../shared/components/dialog/ConfirmDialog.js";
|
|
11
|
-
import { PERMISSIONS as
|
|
12
|
-
import { MemberRoleBadge as
|
|
13
|
-
import { useMembers as
|
|
14
|
-
import { useEffect as
|
|
15
|
-
import { Eye as
|
|
16
|
-
import { GlassCard as
|
|
17
|
-
import { useFeatureFlagDetails as
|
|
18
|
-
import { usePermissions as
|
|
19
|
-
import { Fragment as
|
|
20
|
-
import { useParams as
|
|
21
|
-
import { ActorIdentity as
|
|
10
|
+
import { PERMISSIONS as c } from "../../../constants/permissions.js";
|
|
11
|
+
import { MemberRoleBadge as l } from "../components/MemberRoleBadge.js";
|
|
12
|
+
import { useMembers as u, useRemoveMember as d } from "../hooks/useMembers.js";
|
|
13
|
+
import { useEffect as f, useMemo as p, useState as m } from "react";
|
|
14
|
+
import { Eye as h, Mail as g, RefreshCw as _, Shield as v, Trash2 as y } from "lucide-react";
|
|
15
|
+
import { GlassCard as b, IllustratedEmptyState as te, PagePurpose as ne } from "@burdenoff/fe-libs/ui";
|
|
16
|
+
import { useFeatureFlagDetails as re } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
17
|
+
import { usePermissions as ie } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
18
|
+
import { Fragment as ae, jsx as x, jsxs as S } from "react/jsx-runtime";
|
|
19
|
+
import { useParams as C } from "react-router-dom";
|
|
20
|
+
import { ActorIdentity as w, buildActorFallback as oe, useActorProfiles as se } from "@burdenoff/fe-libs/shared";
|
|
22
21
|
//#region src/organization-management/modules/members/pages/MembersListPage.tsx
|
|
23
|
-
function
|
|
22
|
+
function ce() {
|
|
24
23
|
let e = n();
|
|
25
24
|
return (t) => t ? new Date(t).toLocaleDateString() : e("common.status.pending", "Pending");
|
|
26
25
|
}
|
|
27
|
-
function
|
|
28
|
-
let
|
|
26
|
+
function T() {
|
|
27
|
+
let T = n(), E = ce(), { navigate: D, basePath: O = "/organizations" } = e(), { hasPermission: k, isLoading: le } = ie(), A = re("organization.invite"), j = A ? !!A.value : !0, { organizationId: M } = C(), [N, P] = m(""), F = s(N, 250), [I, L] = m(/* @__PURE__ */ new Set()), { openConfirmDialog: R, ConfirmDialog: z } = ee(), { members: B, loading: V, error: H, refetch: U } = u(M ?? "", 50, 0), { removeMember: ue, loading: W } = d(), { apiGatewayUrl: de, authToken: fe } = e(), G = se(p(() => B.map((e) => ({
|
|
29
28
|
actorId: e.userId,
|
|
30
29
|
actorType: "user"
|
|
31
|
-
})), [
|
|
30
|
+
})), [B]), {
|
|
32
31
|
apiGatewayUrl: de,
|
|
33
|
-
authToken:
|
|
34
|
-
orgId:
|
|
35
|
-
}), K =
|
|
36
|
-
if (!
|
|
37
|
-
let e =
|
|
38
|
-
return
|
|
32
|
+
authToken: fe,
|
|
33
|
+
orgId: M
|
|
34
|
+
}), K = p(() => {
|
|
35
|
+
if (!F) return B;
|
|
36
|
+
let e = F.toLowerCase();
|
|
37
|
+
return B.filter((t) => {
|
|
39
38
|
let n = G[t.userId];
|
|
40
39
|
return n?.displayName.toLowerCase().includes(e) || n?.email?.toLowerCase().includes(e) ? !0 : t.userId.toLowerCase().includes(e) || t.role.toLowerCase().includes(e);
|
|
41
40
|
});
|
|
42
41
|
}, [
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
F,
|
|
43
|
+
B,
|
|
45
44
|
G
|
|
46
45
|
]);
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
f(() => {
|
|
47
|
+
L((e) => {
|
|
49
48
|
let t = new Set(K.map((e) => e.id)), n = new Set([...e].filter((e) => t.has(e)));
|
|
50
49
|
return n.size === e.size ? e : n;
|
|
51
50
|
});
|
|
52
51
|
}, [K]);
|
|
53
|
-
let q =
|
|
54
|
-
if (
|
|
52
|
+
let q = p(() => K.filter((e) => I.has(e.id)), [K, I]), J = K.length > 0 && K.every((e) => I.has(e.id)), Y = K.some((e) => I.has(e.id)) && !J, X = async (e) => {
|
|
53
|
+
if (M) try {
|
|
55
54
|
let n = (await Promise.allSettled(e.map(async (e) => {
|
|
56
|
-
let t = await
|
|
55
|
+
let t = await ue(M, e);
|
|
57
56
|
if (t.errors?.length) throw Error(t.errors[0]?.message ?? "Failed to remove member");
|
|
58
57
|
}))).find((e) => e.status === "rejected");
|
|
59
58
|
if (n?.status === "rejected") throw n.reason;
|
|
60
|
-
|
|
59
|
+
L(/* @__PURE__ */ new Set()), await U(), t.success(e.length === 1 ? T("members.remove.successSingle", "Member removed successfully") : `${e.length} ${T("members.remove.successMany", "members removed successfully")}`);
|
|
61
60
|
} catch (e) {
|
|
62
|
-
t.error(e instanceof Error ? e.message :
|
|
61
|
+
t.error(e instanceof Error ? e.message : T("members.remove.failed", "Failed to remove member"));
|
|
63
62
|
}
|
|
64
63
|
}, Z = (e) => {
|
|
65
|
-
|
|
66
|
-
title:
|
|
67
|
-
description: `${
|
|
68
|
-
confirmText:
|
|
64
|
+
R({
|
|
65
|
+
title: T("members.remove.title", "Remove member"),
|
|
66
|
+
description: `${T("members.remove.descriptionPrefix", "Remove")} ${e} ${T("members.remove.descriptionSuffix", "from this organization? Workspace access inherited from this membership will be impacted.")}`,
|
|
67
|
+
confirmText: T("members.remove.confirm", "Remove"),
|
|
69
68
|
variant: "danger",
|
|
70
69
|
onConfirm: () => {
|
|
71
70
|
X([e]);
|
|
72
71
|
}
|
|
73
72
|
});
|
|
74
|
-
},
|
|
75
|
-
q.length !== 0 &&
|
|
76
|
-
title:
|
|
77
|
-
description: `${
|
|
78
|
-
confirmText: `${
|
|
73
|
+
}, pe = () => {
|
|
74
|
+
q.length !== 0 && R({
|
|
75
|
+
title: T("members.remove.bulkTitle", "Remove selected members"),
|
|
76
|
+
description: `${T("members.remove.bulkPrefix", "Remove")} ${q.length} ${T(q.length === 1 ? "members.remove.bulkSuffixSingle" : "members.remove.bulkSuffixMany", q.length === 1 ? "selected member from this organization?" : "selected members from this organization?")}`,
|
|
77
|
+
confirmText: `${T("members.remove.confirm", "Remove")} ${q.length}`,
|
|
79
78
|
variant: "danger",
|
|
80
79
|
onConfirm: () => {
|
|
81
80
|
X(q.map((e) => e.userId));
|
|
82
81
|
}
|
|
83
82
|
});
|
|
84
83
|
}, Q = (e, t) => {
|
|
85
|
-
|
|
84
|
+
L((n) => {
|
|
86
85
|
let r = new Set(n);
|
|
87
86
|
return t ? r.add(e) : r.delete(e), r;
|
|
88
87
|
});
|
|
89
88
|
}, $ = (e) => {
|
|
90
|
-
|
|
89
|
+
L((t) => {
|
|
91
90
|
let n = new Set(t);
|
|
92
91
|
return K.forEach((t) => {
|
|
93
92
|
e ? n.add(t.id) : n.delete(t.id);
|
|
94
93
|
}), n;
|
|
95
94
|
});
|
|
96
95
|
};
|
|
97
|
-
return
|
|
96
|
+
return M ? le ? /* @__PURE__ */ x("div", {
|
|
98
97
|
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
99
|
-
children: /* @__PURE__ */
|
|
100
|
-
}) :
|
|
98
|
+
children: /* @__PURE__ */ x(a, { message: T("common.loadingPermissions", "Loading permissions...") })
|
|
99
|
+
}) : k(c.MEMBER_LIST) ? V ? /* @__PURE__ */ x("div", {
|
|
101
100
|
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
102
|
-
children: /* @__PURE__ */
|
|
103
|
-
}) :
|
|
101
|
+
children: /* @__PURE__ */ x(a, { message: T("members.list.loading", "Loading members...") })
|
|
102
|
+
}) : H ? /* @__PURE__ */ x("div", {
|
|
104
103
|
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
105
|
-
children: /* @__PURE__ */
|
|
106
|
-
message:
|
|
104
|
+
children: /* @__PURE__ */ x(o, {
|
|
105
|
+
message: H.message,
|
|
107
106
|
action: {
|
|
108
|
-
label:
|
|
107
|
+
label: T("common.retry", "Retry"),
|
|
109
108
|
onClick: () => {
|
|
110
|
-
|
|
109
|
+
U();
|
|
111
110
|
}
|
|
112
111
|
}
|
|
113
112
|
})
|
|
114
|
-
}) : /* @__PURE__ */
|
|
113
|
+
}) : /* @__PURE__ */ S("div", {
|
|
115
114
|
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-200",
|
|
116
|
-
children: [/* @__PURE__ */
|
|
115
|
+
children: [/* @__PURE__ */ S("div", {
|
|
117
116
|
className: "mx-auto flex w-full max-w-7xl flex-col gap-6",
|
|
118
117
|
children: [
|
|
119
|
-
/* @__PURE__ */
|
|
118
|
+
/* @__PURE__ */ S("div", {
|
|
120
119
|
className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between",
|
|
121
|
-
children: [/* @__PURE__ */
|
|
120
|
+
children: [/* @__PURE__ */ S("div", {
|
|
122
121
|
className: "space-y-2",
|
|
123
|
-
children: [
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
122
|
+
children: [
|
|
123
|
+
/* @__PURE__ */ x("h1", {
|
|
124
|
+
className: "text-3xl font-bold text-[var(--color-text-primary)]",
|
|
125
|
+
children: T("members.list.title", "Members")
|
|
126
|
+
}),
|
|
127
|
+
/* @__PURE__ */ x("p", {
|
|
128
|
+
className: "max-w-2xl text-[var(--color-text-secondary)]",
|
|
129
|
+
children: T("members.list.subtitle", "Manage organization members, inspect their roles, and invite more people into this organization.")
|
|
130
|
+
}),
|
|
131
|
+
/* @__PURE__ */ x(ne, {
|
|
132
|
+
className: "max-w-2xl",
|
|
133
|
+
children: T("members.list.purpose", "Members are the people who belong to this organization and inherit access to its workspaces. Use this page to see who has access, check their roles, invite new people, or remove anyone who should no longer be here.")
|
|
134
|
+
})
|
|
135
|
+
]
|
|
136
|
+
}), j && k(c.MEMBER_INVITE) && /* @__PURE__ */ S("button", {
|
|
131
137
|
type: "button",
|
|
132
|
-
onClick: () =>
|
|
138
|
+
onClick: () => D(`${O}/${M}/members/invite`),
|
|
133
139
|
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-4 py-2.5 text-[var(--color-action-primary-text)] transition-all duration-200 hover:opacity-90",
|
|
134
|
-
children: [/* @__PURE__ */
|
|
140
|
+
children: [/* @__PURE__ */ x(g, {
|
|
135
141
|
size: 18,
|
|
136
142
|
"aria-hidden": "true"
|
|
137
|
-
}), /* @__PURE__ */
|
|
143
|
+
}), /* @__PURE__ */ x("span", {
|
|
138
144
|
className: "font-medium",
|
|
139
|
-
children:
|
|
145
|
+
children: T("members.invite.button", "Invite Member")
|
|
140
146
|
})]
|
|
141
147
|
})]
|
|
142
148
|
}),
|
|
143
|
-
|
|
149
|
+
B.length > 0 ? /* @__PURE__ */ S("div", {
|
|
144
150
|
className: "grid grid-cols-2 gap-4",
|
|
145
|
-
children: [/* @__PURE__ */ b
|
|
146
|
-
treatment: "
|
|
151
|
+
children: [/* @__PURE__ */ S(b, {
|
|
152
|
+
treatment: "glass",
|
|
153
|
+
glow: !0,
|
|
147
154
|
className: "p-4",
|
|
148
|
-
children: [/* @__PURE__ */
|
|
155
|
+
children: [/* @__PURE__ */ x("p", {
|
|
149
156
|
className: "text-sm text-text-secondary",
|
|
150
|
-
children:
|
|
151
|
-
}), /* @__PURE__ */
|
|
157
|
+
children: T("members.list.title", "Members")
|
|
158
|
+
}), /* @__PURE__ */ x("p", {
|
|
152
159
|
className: "mt-1 text-2xl font-semibold tabular-nums text-text-primary",
|
|
153
|
-
children:
|
|
160
|
+
children: B.length
|
|
154
161
|
})]
|
|
155
|
-
}), /* @__PURE__ */ b
|
|
162
|
+
}), /* @__PURE__ */ S(b, {
|
|
156
163
|
treatment: "metric",
|
|
157
164
|
className: "p-4",
|
|
158
|
-
children: [/* @__PURE__ */
|
|
165
|
+
children: [/* @__PURE__ */ x("p", {
|
|
159
166
|
className: "text-sm text-text-secondary",
|
|
160
|
-
children:
|
|
161
|
-
}), /* @__PURE__ */
|
|
167
|
+
children: T("members.list.column.role", "Role")
|
|
168
|
+
}), /* @__PURE__ */ x("p", {
|
|
162
169
|
className: "mt-1 text-2xl font-semibold tabular-nums text-text-primary",
|
|
163
|
-
children: new Set(
|
|
170
|
+
children: new Set(B.map((e) => e.role)).size
|
|
164
171
|
})]
|
|
165
172
|
})]
|
|
166
173
|
}) : null,
|
|
167
|
-
/* @__PURE__ */ b
|
|
174
|
+
/* @__PURE__ */ S(b, {
|
|
168
175
|
treatment: "plain",
|
|
169
176
|
className: "border-border-seam p-4",
|
|
170
|
-
children: [/* @__PURE__ */
|
|
177
|
+
children: [/* @__PURE__ */ S("div", {
|
|
171
178
|
className: "flex flex-col gap-3 sm:flex-row sm:items-center",
|
|
172
|
-
children: [/* @__PURE__ */
|
|
173
|
-
value:
|
|
174
|
-
onChange:
|
|
175
|
-
placeholder:
|
|
176
|
-
label:
|
|
179
|
+
children: [/* @__PURE__ */ x(r, {
|
|
180
|
+
value: N,
|
|
181
|
+
onChange: P,
|
|
182
|
+
placeholder: T("members.list.searchPlaceholder", "Search by member ID or role..."),
|
|
183
|
+
label: T("members.list.searchLabel", "Search organization members"),
|
|
177
184
|
inputId: "organization-members-search",
|
|
178
185
|
className: "flex-1"
|
|
179
|
-
}), /* @__PURE__ */
|
|
186
|
+
}), /* @__PURE__ */ x("button", {
|
|
180
187
|
type: "button",
|
|
181
188
|
onClick: () => {
|
|
182
|
-
|
|
189
|
+
U();
|
|
183
190
|
},
|
|
184
191
|
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] px-4 py-2 text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]",
|
|
185
|
-
"aria-label":
|
|
186
|
-
title:
|
|
187
|
-
children: /* @__PURE__ */
|
|
192
|
+
"aria-label": T("members.list.refresh", "Refresh members"),
|
|
193
|
+
title: T("members.list.refresh", "Refresh members"),
|
|
194
|
+
children: /* @__PURE__ */ x(_, {
|
|
188
195
|
size: 18,
|
|
189
196
|
"aria-hidden": "true"
|
|
190
197
|
})
|
|
191
198
|
})]
|
|
192
|
-
}), K.length > 0 ? /* @__PURE__ */
|
|
199
|
+
}), K.length > 0 ? /* @__PURE__ */ S("div", {
|
|
193
200
|
className: "mt-4 flex flex-col gap-3 rounded-lg border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-4 sm:flex-row sm:items-center sm:justify-between",
|
|
194
|
-
children: [/* @__PURE__ */
|
|
201
|
+
children: [/* @__PURE__ */ S("div", {
|
|
195
202
|
className: "flex flex-wrap items-center gap-3",
|
|
196
|
-
children: [/* @__PURE__ */
|
|
203
|
+
children: [/* @__PURE__ */ S("label", {
|
|
197
204
|
className: "flex items-center gap-2 text-sm text-[var(--color-text-primary)]",
|
|
198
|
-
children: [/* @__PURE__ */
|
|
205
|
+
children: [/* @__PURE__ */ x(i, {
|
|
199
206
|
checked: J,
|
|
200
207
|
indeterminate: Y,
|
|
201
208
|
onChange: $,
|
|
202
|
-
ariaLabel:
|
|
203
|
-
}), /* @__PURE__ */
|
|
204
|
-
}),
|
|
209
|
+
ariaLabel: T("members.list.selectAll", "Select all members")
|
|
210
|
+
}), /* @__PURE__ */ x("span", { children: T("common.selectAllVisible", "Select all visible") })]
|
|
211
|
+
}), I.size > 0 ? /* @__PURE__ */ x("button", {
|
|
205
212
|
type: "button",
|
|
206
|
-
onClick: () =>
|
|
213
|
+
onClick: () => L(/* @__PURE__ */ new Set()),
|
|
207
214
|
className: "text-sm text-[var(--color-text-secondary)] transition-colors hover:text-[var(--color-text-primary)]",
|
|
208
|
-
children:
|
|
215
|
+
children: T("common.clearSelection", "Clear selection")
|
|
209
216
|
}) : null]
|
|
210
|
-
}), /* @__PURE__ */
|
|
217
|
+
}), /* @__PURE__ */ S("div", {
|
|
211
218
|
className: "flex flex-col gap-2 sm:flex-row sm:items-center",
|
|
212
|
-
children: [/* @__PURE__ */
|
|
219
|
+
children: [/* @__PURE__ */ S("span", {
|
|
213
220
|
className: "text-sm text-[var(--color-text-secondary)]",
|
|
214
221
|
children: [
|
|
215
|
-
|
|
222
|
+
I.size,
|
|
216
223
|
" ",
|
|
217
|
-
|
|
224
|
+
T("common.selected", "selected")
|
|
218
225
|
]
|
|
219
|
-
}),
|
|
226
|
+
}), k(c.MEMBER_REMOVE) && /* @__PURE__ */ S("button", {
|
|
220
227
|
type: "button",
|
|
221
|
-
onClick:
|
|
222
|
-
disabled: q.length === 0 ||
|
|
228
|
+
onClick: pe,
|
|
229
|
+
disabled: q.length === 0 || W,
|
|
223
230
|
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-status-error-border)] px-3 py-2 text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
|
|
224
231
|
children: [
|
|
225
|
-
/* @__PURE__ */ y
|
|
232
|
+
/* @__PURE__ */ x(y, {
|
|
226
233
|
size: 16,
|
|
227
234
|
"aria-hidden": "true"
|
|
228
235
|
}),
|
|
229
|
-
/* @__PURE__ */
|
|
230
|
-
q.length > 0 ? /* @__PURE__ */
|
|
236
|
+
/* @__PURE__ */ x("span", { children: T("common.removeSelected", "Remove Selected") }),
|
|
237
|
+
q.length > 0 ? /* @__PURE__ */ S("span", { children: [
|
|
231
238
|
"(",
|
|
232
239
|
q.length,
|
|
233
240
|
")"
|
|
@@ -237,194 +244,194 @@ function C() {
|
|
|
237
244
|
})]
|
|
238
245
|
}) : null]
|
|
239
246
|
}),
|
|
240
|
-
K.length === 0 ? /* @__PURE__ */
|
|
241
|
-
treatment: "
|
|
247
|
+
K.length === 0 ? /* @__PURE__ */ x(b, {
|
|
248
|
+
treatment: "glass",
|
|
249
|
+
glow: B.length === 0,
|
|
242
250
|
className: "border-border-seam p-6",
|
|
243
|
-
children: /* @__PURE__ */
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
} : void 0
|
|
251
|
+
children: /* @__PURE__ */ x(te, {
|
|
252
|
+
illustration: "empty-people",
|
|
253
|
+
title: T("members.list.emptyTitle", "No members found"),
|
|
254
|
+
description: T("members.list.emptyDescription", "Invite someone to this organization to grant them access and assign their role."),
|
|
255
|
+
action: j && k(c.MEMBER_INVITE) ? /* @__PURE__ */ x("button", {
|
|
256
|
+
type: "button",
|
|
257
|
+
onClick: () => D(`${O}/${M}/members/invite`),
|
|
258
|
+
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-4 py-2 font-medium text-[var(--color-action-primary-text)] transition-all duration-200 hover:bg-[var(--color-action-primary-bgHover)]",
|
|
259
|
+
children: T("members.invite.button", "Invite Member")
|
|
260
|
+
}) : void 0
|
|
254
261
|
})
|
|
255
|
-
}) : /* @__PURE__ */
|
|
262
|
+
}) : /* @__PURE__ */ S(ae, { children: [/* @__PURE__ */ x("div", {
|
|
256
263
|
className: "grid gap-4 md:hidden",
|
|
257
|
-
children: K.map((e) => /* @__PURE__ */ b
|
|
264
|
+
children: K.map((e) => /* @__PURE__ */ S(b, {
|
|
258
265
|
treatment: "insight",
|
|
259
266
|
className: "border-border-seam p-4",
|
|
260
|
-
children: [/* @__PURE__ */
|
|
267
|
+
children: [/* @__PURE__ */ S("div", {
|
|
261
268
|
className: "flex items-start gap-3",
|
|
262
|
-
children: [/* @__PURE__ */
|
|
263
|
-
checked:
|
|
269
|
+
children: [/* @__PURE__ */ x(i, {
|
|
270
|
+
checked: I.has(e.id),
|
|
264
271
|
onChange: (t) => Q(e.id, t),
|
|
265
|
-
ariaLabel: `${
|
|
266
|
-
}), /* @__PURE__ */
|
|
272
|
+
ariaLabel: `${T("members.list.selectMember", "Select member")} ${e.userId}`
|
|
273
|
+
}), /* @__PURE__ */ S("div", {
|
|
267
274
|
className: "flex min-w-0 flex-1 gap-3",
|
|
268
|
-
children: [/* @__PURE__ */
|
|
275
|
+
children: [/* @__PURE__ */ x("div", {
|
|
269
276
|
className: "flex size-10 items-center justify-center rounded-full bg-[var(--color-status-info-bgSubtle)] text-[var(--color-status-info-text)]",
|
|
270
|
-
children: /* @__PURE__ */
|
|
277
|
+
children: /* @__PURE__ */ x(v, {
|
|
271
278
|
size: 18,
|
|
272
279
|
"aria-hidden": "true"
|
|
273
280
|
})
|
|
274
|
-
}), /* @__PURE__ */
|
|
281
|
+
}), /* @__PURE__ */ S("div", {
|
|
275
282
|
className: "min-w-0 flex-1 space-y-3",
|
|
276
|
-
children: [/* @__PURE__ */
|
|
277
|
-
/* @__PURE__ */
|
|
283
|
+
children: [/* @__PURE__ */ S("div", { children: [
|
|
284
|
+
/* @__PURE__ */ S("div", {
|
|
278
285
|
className: "flex flex-wrap items-start gap-2",
|
|
279
|
-
children: [/* @__PURE__ */
|
|
286
|
+
children: [/* @__PURE__ */ x("h2", {
|
|
280
287
|
className: "break-all text-base font-semibold text-[var(--color-text-primary)]",
|
|
281
288
|
children: G[e.userId]?.displayName ?? `User ${e.userId.slice(0, 8)}…`
|
|
282
|
-
}), /* @__PURE__ */
|
|
289
|
+
}), /* @__PURE__ */ x(l, { role: e.role })]
|
|
283
290
|
}),
|
|
284
|
-
G[e.userId]?.email ? /* @__PURE__ */
|
|
291
|
+
G[e.userId]?.email ? /* @__PURE__ */ x("p", {
|
|
285
292
|
className: "mt-0.5 break-all text-xs text-[var(--color-text-secondary)]",
|
|
286
293
|
children: G[e.userId]?.email
|
|
287
294
|
}) : null,
|
|
288
|
-
/* @__PURE__ */
|
|
295
|
+
/* @__PURE__ */ S("details", {
|
|
289
296
|
className: "mt-1 text-xs text-[var(--color-text-muted)]",
|
|
290
297
|
children: [
|
|
291
|
-
/* @__PURE__ */
|
|
298
|
+
/* @__PURE__ */ x("summary", {
|
|
292
299
|
className: "cursor-pointer",
|
|
293
|
-
children:
|
|
300
|
+
children: T("members.list.showIds", "Show IDs")
|
|
294
301
|
}),
|
|
295
|
-
/* @__PURE__ */
|
|
302
|
+
/* @__PURE__ */ S("p", {
|
|
296
303
|
className: "mt-1 break-all font-mono",
|
|
297
304
|
children: [
|
|
298
|
-
|
|
305
|
+
T("members.detail.userId", "User ID"),
|
|
299
306
|
": ",
|
|
300
307
|
e.userId
|
|
301
308
|
]
|
|
302
309
|
}),
|
|
303
|
-
/* @__PURE__ */
|
|
310
|
+
/* @__PURE__ */ S("p", {
|
|
304
311
|
className: "mt-0.5 break-all font-mono",
|
|
305
312
|
children: [
|
|
306
|
-
|
|
313
|
+
T("members.list.memberId", "Member ID"),
|
|
307
314
|
": ",
|
|
308
315
|
e.id
|
|
309
316
|
]
|
|
310
317
|
})
|
|
311
318
|
]
|
|
312
319
|
})
|
|
313
|
-
] }), /* @__PURE__ */
|
|
320
|
+
] }), /* @__PURE__ */ S("dl", {
|
|
314
321
|
className: "grid grid-cols-1 gap-3 text-sm",
|
|
315
|
-
children: [/* @__PURE__ */
|
|
322
|
+
children: [/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
|
|
316
323
|
className: "text-[var(--color-text-secondary)]",
|
|
317
|
-
children:
|
|
318
|
-
}), /* @__PURE__ */
|
|
324
|
+
children: T("members.list.invitedBy", "Invited by")
|
|
325
|
+
}), /* @__PURE__ */ x("dd", {
|
|
319
326
|
className: "mt-1 break-all font-mono text-[var(--color-text-primary)]",
|
|
320
|
-
children: e.invitedBy ||
|
|
321
|
-
})] }), /* @__PURE__ */
|
|
327
|
+
children: e.invitedBy || T("common.notAvailable", "N/A")
|
|
328
|
+
})] }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("dt", {
|
|
322
329
|
className: "text-[var(--color-text-secondary)]",
|
|
323
|
-
children:
|
|
324
|
-
}), /* @__PURE__ */
|
|
330
|
+
children: T("members.list.joined", "Joined")
|
|
331
|
+
}), /* @__PURE__ */ x("dd", {
|
|
325
332
|
className: "mt-1 text-[var(--color-text-primary)]",
|
|
326
|
-
children:
|
|
333
|
+
children: E(e.joinedAt)
|
|
327
334
|
})] })]
|
|
328
335
|
})]
|
|
329
336
|
})]
|
|
330
337
|
})]
|
|
331
|
-
}), /* @__PURE__ */
|
|
338
|
+
}), /* @__PURE__ */ S("div", {
|
|
332
339
|
className: "mt-4 flex flex-wrap gap-2 border-t border-[var(--color-border-default)] pt-4",
|
|
333
|
-
children: [/* @__PURE__ */
|
|
340
|
+
children: [/* @__PURE__ */ S("button", {
|
|
334
341
|
type: "button",
|
|
335
|
-
onClick: () =>
|
|
342
|
+
onClick: () => D(`${O}/${M}/members/${e.userId}`),
|
|
336
343
|
className: "inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-border-default)] px-3 py-2 text-sm text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]",
|
|
337
|
-
children: [/* @__PURE__ */
|
|
344
|
+
children: [/* @__PURE__ */ x(h, {
|
|
338
345
|
size: 16,
|
|
339
346
|
"aria-hidden": "true"
|
|
340
|
-
}),
|
|
341
|
-
}),
|
|
347
|
+
}), T("common.view", "View")]
|
|
348
|
+
}), k(c.MEMBER_REMOVE) && /* @__PURE__ */ S("button", {
|
|
342
349
|
type: "button",
|
|
343
350
|
onClick: () => Z(e.userId),
|
|
344
|
-
disabled:
|
|
351
|
+
disabled: W,
|
|
345
352
|
className: "inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-status-error-border)] px-3 py-2 text-sm text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
|
|
346
|
-
children: [/* @__PURE__ */ y
|
|
353
|
+
children: [/* @__PURE__ */ x(y, {
|
|
347
354
|
size: 16,
|
|
348
355
|
"aria-hidden": "true"
|
|
349
|
-
}),
|
|
356
|
+
}), T("members.remove.confirm", "Remove")]
|
|
350
357
|
})]
|
|
351
358
|
})]
|
|
352
359
|
}, e.id))
|
|
353
|
-
}), /* @__PURE__ */
|
|
360
|
+
}), /* @__PURE__ */ x(b, {
|
|
354
361
|
treatment: "plain",
|
|
355
362
|
className: "hidden overflow-hidden border-border-seam p-0 md:block",
|
|
356
|
-
children: /* @__PURE__ */
|
|
363
|
+
children: /* @__PURE__ */ x("div", {
|
|
357
364
|
className: "overflow-x-auto",
|
|
358
|
-
children: /* @__PURE__ */
|
|
365
|
+
children: /* @__PURE__ */ S("table", {
|
|
359
366
|
className: "min-w-full",
|
|
360
|
-
children: [/* @__PURE__ */
|
|
367
|
+
children: [/* @__PURE__ */ x("thead", {
|
|
361
368
|
className: "bg-[var(--color-bg-subtle)]",
|
|
362
|
-
children: /* @__PURE__ */
|
|
363
|
-
/* @__PURE__ */
|
|
369
|
+
children: /* @__PURE__ */ S("tr", { children: [
|
|
370
|
+
/* @__PURE__ */ x("th", {
|
|
364
371
|
className: "w-12 px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
365
|
-
children: /* @__PURE__ */
|
|
372
|
+
children: /* @__PURE__ */ x(i, {
|
|
366
373
|
checked: J,
|
|
367
374
|
indeterminate: Y,
|
|
368
375
|
onChange: $,
|
|
369
|
-
ariaLabel:
|
|
376
|
+
ariaLabel: T("members.list.selectAll", "Select all members")
|
|
370
377
|
})
|
|
371
378
|
}),
|
|
372
|
-
/* @__PURE__ */
|
|
379
|
+
/* @__PURE__ */ x("th", {
|
|
373
380
|
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
374
|
-
children:
|
|
381
|
+
children: T("members.list.column.user", "User")
|
|
375
382
|
}),
|
|
376
|
-
/* @__PURE__ */
|
|
383
|
+
/* @__PURE__ */ x("th", {
|
|
377
384
|
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
378
|
-
children:
|
|
385
|
+
children: T("members.list.column.role", "Role")
|
|
379
386
|
}),
|
|
380
|
-
/* @__PURE__ */
|
|
387
|
+
/* @__PURE__ */ x("th", {
|
|
381
388
|
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
382
|
-
children:
|
|
389
|
+
children: T("members.list.invitedBy", "Invited by")
|
|
383
390
|
}),
|
|
384
|
-
/* @__PURE__ */
|
|
391
|
+
/* @__PURE__ */ x("th", {
|
|
385
392
|
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
386
|
-
children:
|
|
393
|
+
children: T("members.list.joined", "Joined")
|
|
387
394
|
}),
|
|
388
|
-
/* @__PURE__ */
|
|
395
|
+
/* @__PURE__ */ x("th", {
|
|
389
396
|
className: "px-6 py-3 text-right text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
390
|
-
children:
|
|
397
|
+
children: T("common.actions", "Actions")
|
|
391
398
|
})
|
|
392
399
|
] })
|
|
393
|
-
}), /* @__PURE__ */
|
|
400
|
+
}), /* @__PURE__ */ x("tbody", {
|
|
394
401
|
className: "divide-y divide-[var(--color-border-seam)]",
|
|
395
|
-
children: K.map((e) => /* @__PURE__ */
|
|
402
|
+
children: K.map((e) => /* @__PURE__ */ S("tr", {
|
|
396
403
|
className: "transition-colors hover:bg-[var(--color-bg-subtle)]",
|
|
397
404
|
children: [
|
|
398
|
-
/* @__PURE__ */
|
|
405
|
+
/* @__PURE__ */ x("td", {
|
|
399
406
|
className: "px-6 py-4 align-top",
|
|
400
|
-
children: /* @__PURE__ */
|
|
401
|
-
checked:
|
|
407
|
+
children: /* @__PURE__ */ x(i, {
|
|
408
|
+
checked: I.has(e.id),
|
|
402
409
|
onChange: (t) => Q(e.id, t),
|
|
403
|
-
ariaLabel: `${
|
|
410
|
+
ariaLabel: `${T("members.list.selectMember", "Select member")} ${e.userId}`
|
|
404
411
|
})
|
|
405
412
|
}),
|
|
406
|
-
/* @__PURE__ */
|
|
413
|
+
/* @__PURE__ */ x("td", {
|
|
407
414
|
className: "px-6 py-4",
|
|
408
|
-
children: /* @__PURE__ */
|
|
415
|
+
children: /* @__PURE__ */ S("div", {
|
|
409
416
|
className: "flex items-start gap-3",
|
|
410
|
-
children: [/* @__PURE__ */
|
|
417
|
+
children: [/* @__PURE__ */ x("div", {
|
|
411
418
|
className: "flex size-10 items-center justify-center rounded-full bg-[var(--color-status-info-bgSubtle)] text-[var(--color-status-info-text)]",
|
|
412
|
-
children: /* @__PURE__ */
|
|
419
|
+
children: /* @__PURE__ */ x(v, {
|
|
413
420
|
size: 18,
|
|
414
421
|
"aria-hidden": "true"
|
|
415
422
|
})
|
|
416
|
-
}), /* @__PURE__ */
|
|
423
|
+
}), /* @__PURE__ */ S("div", {
|
|
417
424
|
className: "min-w-0",
|
|
418
|
-
children: [/* @__PURE__ */
|
|
419
|
-
profile: G[e.userId] ??
|
|
425
|
+
children: [/* @__PURE__ */ x(w, {
|
|
426
|
+
profile: G[e.userId] ?? oe({
|
|
420
427
|
actorId: e.userId,
|
|
421
428
|
actorType: "user"
|
|
422
429
|
}),
|
|
423
430
|
variant: "cell"
|
|
424
|
-
}), /* @__PURE__ */
|
|
431
|
+
}), /* @__PURE__ */ S("p", {
|
|
425
432
|
className: "break-all font-mono text-xs text-[var(--color-text-muted)]",
|
|
426
433
|
children: [
|
|
427
|
-
|
|
434
|
+
T("common.idLabel", "ID"),
|
|
428
435
|
": ",
|
|
429
436
|
e.id
|
|
430
437
|
]
|
|
@@ -432,40 +439,40 @@ function C() {
|
|
|
432
439
|
})]
|
|
433
440
|
})
|
|
434
441
|
}),
|
|
435
|
-
/* @__PURE__ */
|
|
442
|
+
/* @__PURE__ */ x("td", {
|
|
436
443
|
className: "px-6 py-4 align-top",
|
|
437
|
-
children: /* @__PURE__ */
|
|
444
|
+
children: /* @__PURE__ */ x(l, { role: e.role })
|
|
438
445
|
}),
|
|
439
|
-
/* @__PURE__ */
|
|
446
|
+
/* @__PURE__ */ x("td", {
|
|
440
447
|
className: "px-6 py-4 align-top text-sm text-[var(--color-text-secondary)]",
|
|
441
|
-
children: e.invitedBy ||
|
|
448
|
+
children: e.invitedBy || T("common.notAvailable", "N/A")
|
|
442
449
|
}),
|
|
443
|
-
/* @__PURE__ */
|
|
450
|
+
/* @__PURE__ */ x("td", {
|
|
444
451
|
className: "px-6 py-4 align-top text-sm text-[var(--color-text-secondary)]",
|
|
445
|
-
children:
|
|
452
|
+
children: E(e.joinedAt)
|
|
446
453
|
}),
|
|
447
|
-
/* @__PURE__ */
|
|
454
|
+
/* @__PURE__ */ x("td", {
|
|
448
455
|
className: "px-6 py-4 align-top",
|
|
449
|
-
children: /* @__PURE__ */
|
|
456
|
+
children: /* @__PURE__ */ S("div", {
|
|
450
457
|
className: "flex items-center justify-end gap-2",
|
|
451
|
-
children: [/* @__PURE__ */
|
|
458
|
+
children: [/* @__PURE__ */ x("button", {
|
|
452
459
|
type: "button",
|
|
453
|
-
onClick: () =>
|
|
460
|
+
onClick: () => D(`${O}/${M}/members/${e.userId}`),
|
|
454
461
|
className: "rounded-lg p-2 text-[var(--color-text-secondary)] transition-all duration-200 hover:bg-[var(--color-bg-muted)] hover:text-[var(--color-text-primary)]",
|
|
455
|
-
"aria-label": `${
|
|
456
|
-
title: `${
|
|
457
|
-
children: /* @__PURE__ */
|
|
462
|
+
"aria-label": `${T("members.list.viewMember", "View member")} ${e.userId}`,
|
|
463
|
+
title: `${T("members.list.viewMember", "View member")} ${e.userId}`,
|
|
464
|
+
children: /* @__PURE__ */ x(h, {
|
|
458
465
|
size: 18,
|
|
459
466
|
"aria-hidden": "true"
|
|
460
467
|
})
|
|
461
|
-
}),
|
|
468
|
+
}), k(c.MEMBER_REMOVE) && /* @__PURE__ */ x("button", {
|
|
462
469
|
type: "button",
|
|
463
470
|
onClick: () => Z(e.userId),
|
|
464
|
-
disabled:
|
|
471
|
+
disabled: W,
|
|
465
472
|
className: "rounded-lg p-2 text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
|
|
466
|
-
"aria-label": `${
|
|
467
|
-
title: `${
|
|
468
|
-
children: /* @__PURE__ */ y
|
|
473
|
+
"aria-label": `${T("members.list.removeMember", "Remove member")} ${e.userId}`,
|
|
474
|
+
title: `${T("members.list.removeMember", "Remove member")} ${e.userId}`,
|
|
475
|
+
children: /* @__PURE__ */ x(y, {
|
|
469
476
|
size: 18,
|
|
470
477
|
"aria-hidden": "true"
|
|
471
478
|
})
|
|
@@ -479,25 +486,25 @@ function C() {
|
|
|
479
486
|
})
|
|
480
487
|
})] })
|
|
481
488
|
]
|
|
482
|
-
}),
|
|
483
|
-
}) : /* @__PURE__ */
|
|
489
|
+
}), z]
|
|
490
|
+
}) : /* @__PURE__ */ x("div", {
|
|
484
491
|
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
485
|
-
children: /* @__PURE__ */
|
|
492
|
+
children: /* @__PURE__ */ x("div", {
|
|
486
493
|
className: "p-8 text-center text-[var(--color-text-secondary)]",
|
|
487
|
-
children:
|
|
494
|
+
children: T("members.list.noPermission", "You don't have permission to view members.")
|
|
488
495
|
})
|
|
489
|
-
}) : /* @__PURE__ */
|
|
496
|
+
}) : /* @__PURE__ */ x("div", {
|
|
490
497
|
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
491
|
-
children: /* @__PURE__ */
|
|
492
|
-
message:
|
|
498
|
+
children: /* @__PURE__ */ x(o, {
|
|
499
|
+
message: T("members.list.missingOrg", "Organization ID is required to view members"),
|
|
493
500
|
action: {
|
|
494
|
-
label:
|
|
495
|
-
onClick: () =>
|
|
501
|
+
label: T("members.list.goToOrganizations", "Go to Organizations"),
|
|
502
|
+
onClick: () => D(O)
|
|
496
503
|
}
|
|
497
504
|
})
|
|
498
505
|
});
|
|
499
506
|
}
|
|
500
507
|
//#endregion
|
|
501
|
-
export {
|
|
508
|
+
export { T as MembersListPage };
|
|
502
509
|
|
|
503
510
|
//# sourceMappingURL=MembersListPage.js.map
|