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