@burdenoff/microfe-organization 2026.625.1 → 2026.625.3

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