@burdenoff/microfe-devportal 2026.705.4 → 2026.707.2

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.
@@ -6,310 +6,337 @@ import { ORG_ROLE_LABELS as o } from "../utils/constants.js";
6
6
  import { StatusBadge as s } from "../components/StatusBadge.js";
7
7
  import { SelectionCheckbox as c } from "../components/SelectionCheckbox.js";
8
8
  import { DataTable as le } from "../components/DataTable.js";
9
- import { InputField as ue, SelectField as de } from "../components/FormField.js";
9
+ import { InputField as ue, SelectField as de, TextareaField as fe } from "../components/FormField.js";
10
10
  import { ConfirmDialog as l } from "../components/ConfirmDialog.js";
11
- import { PermissionGuard as fe } from "../components/PermissionGuard.js";
11
+ import { PermissionGuard as pe } from "../components/PermissionGuard.js";
12
12
  import "../components/index.js";
13
13
  import { DEVPORTAL_PERMISSIONS as u } from "../constants/permissions.js";
14
14
  import { useDevportalPermission as d } from "../hooks/usePermission.js";
15
15
  import "../hooks/index.js";
16
- import f from "../../node_modules/date-fns/format.js";
17
- import { useEffect as pe, useMemo as p, useState as m } from "react";
18
- import { useI18n as me } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
19
- import { AlertCircle as h, Loader2 as he, Mail as ge, Plus as _e, RefreshCw as ve, Shield as ye, UserMinus as be } from "lucide-react";
20
- import { useParams as xe } from "react-router-dom";
21
- import { jsx as g, jsxs as _ } from "react/jsx-runtime";
16
+ import me from "../../node_modules/date-fns/format.js";
17
+ import { useEffect as he, useMemo as f, useState as p } from "react";
18
+ import { useI18n as ge } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
19
+ import { AlertCircle as m, Loader2 as _e, Mail as ve, Plus as ye, RefreshCw as be, Shield as xe, UserMinus as Se } from "lucide-react";
20
+ import { useParams as Ce } from "react-router-dom";
21
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
22
22
  //#region src/devportal/pages/OrganizationMembersPage.tsx
23
- var v = () => {
24
- let { orgId: v } = xe(), { currentUser: y } = e(), { allowed: Se } = d(u.ORG_INVITATION_CREATE), { allowed: b } = d(u.ORG_MEMBER_UPDATE), { allowed: x } = d(u.ORG_MEMBER_DELETE), { allowed: S } = d(u.ORG_MEMBER_ACTIVATE), { allowed: C } = d(u.ORG_MEMBER_DEACTIVATE), w = (e) => e.email ? e.email : y?.id === e.userId && y.email ? y.email : e.userId, { t: Ce } = me(), T = (e, t) => {
25
- let n = Ce(e);
23
+ var we = {
24
+ VIEWER: 0,
25
+ DEVELOPER: 1,
26
+ ADMIN: 2,
27
+ OWNER: 3
28
+ }, _ = () => {
29
+ let { orgId: _ } = Ce(), { currentUser: v } = e(), { allowed: Te } = d(u.ORG_INVITATION_CREATE), { allowed: Ee } = d(u.ORG_MEMBER_UPDATE), { allowed: De } = d(u.ORG_MEMBER_DELETE), { allowed: Oe } = d(u.ORG_MEMBER_ACTIVATE), { allowed: ke } = d(u.ORG_MEMBER_DEACTIVATE), y = (e) => e.email ? e.email : v?.id === e.userId && v.email ? v.email : e.userId, { t: Ae } = ge(), b = (e, t) => {
30
+ let n = Ae(e);
26
31
  return n === e ? t : n;
27
- }, [we, E] = m(!1), [D, Te] = m(""), [Ee, De] = m("DEVELOPER"), [Oe, ke] = m(""), [Ae, O] = m(null), [je, k] = m(null), [A, j] = m(/* @__PURE__ */ new Set()), [M, N] = m(/* @__PURE__ */ new Set()), [Me, P] = m(!1), [Ne, F] = m(!1), [I, L] = m(null), { data: Pe } = te({
28
- variables: { id: v ?? "" },
29
- skip: !v,
32
+ }, [x, S] = p(!1), [C, w] = p(""), [T, E] = p("DEVELOPER"), [je, Me] = p(""), [Ne, D] = p(null), [Pe, O] = p(null), [k, A] = p(/* @__PURE__ */ new Set()), [j, M] = p(/* @__PURE__ */ new Set()), [Fe, N] = p(!1), [Ie, P] = p(!1), [F, I] = p(null), { data: Le } = te({
33
+ variables: { id: _ ?? "" },
34
+ skip: !_,
30
35
  fetchPolicy: "cache-first"
31
36
  });
32
- pe(() => {
33
- let e = Pe?.developerOrganization?.name;
34
- if (!v || !e) return;
37
+ he(() => {
38
+ let e = Le?.developerOrganization?.name;
39
+ if (!_ || !e) return;
35
40
  let t = window.__breadcrumbRegistry;
36
- return t?.register(v, e), () => t?.unregister(v);
37
- }, [v, Pe?.developerOrganization?.name]);
38
- let { data: R, loading: Fe, error: z } = ee({
39
- variables: { organizationId: v },
40
- skip: !v,
41
+ return t?.register(_, e), () => t?.unregister(_);
42
+ }, [_, Le?.developerOrganization?.name]);
43
+ let { data: L, loading: Re, error: ze } = ee({
44
+ variables: { organizationId: _ },
45
+ skip: !_,
41
46
  fetchPolicy: "cache-and-network"
42
- }), { data: B, loading: Ie, error: V } = r({
47
+ }), [Be, { loading: Ve }] = ne({ refetchQueries: ["GetOrganizationInvitations"] }), [He] = ie({ refetchQueries: ["GetOrganizationMembers"] }), [Ue] = oe({ refetchQueries: ["GetOrganizationMembers"] }), [We] = re({ refetchQueries: ["GetOrganizationMembers"] }), [Ge] = ce({ refetchQueries: ["GetOrganizationMembers", "GetOrganization"] }), [Ke] = se({ refetchQueries: ["GetOrganizationMembers", "GetOrganization"] }), [qe] = n({ refetchQueries: ["GetOrganizationInvitations"] }), [Je] = ae(), R = f(() => L?.developerOrgMembers?.edges?.map((e) => e.node) ?? [], [L?.developerOrgMembers?.edges]), Ye = (v ? R.find((e) => e.userId === v.id) : void 0)?.role, z = Ye !== void 0 && we[Ye] >= we.ADMIN, B = z && Te, V = z && Ee, H = z && De, U = z && Oe, W = z && ke, { data: G, loading: Xe, error: Ze } = r({
43
48
  variables: {
44
- organizationId: v,
49
+ organizationId: _,
45
50
  status: "PENDING"
46
51
  },
47
- skip: !v,
52
+ skip: !_ || !z,
48
53
  fetchPolicy: "cache-and-network"
49
- }), [Le, { loading: Re }] = ne({ refetchQueries: ["GetOrganizationInvitations"] }), [H] = ie({ refetchQueries: ["GetOrganizationMembers"] }), [U] = oe({ refetchQueries: ["GetOrganizationMembers"] }), [W] = re({ refetchQueries: ["GetOrganizationMembers"] }), [ze] = ce({ refetchQueries: ["GetOrganizationMembers", "GetOrganization"] }), [Be] = se({ refetchQueries: ["GetOrganizationMembers", "GetOrganization"] }), [G] = n({ refetchQueries: ["GetOrganizationInvitations"] }), [Ve] = ae(), K = p(() => R?.developerOrgMembers?.edges?.map((e) => e.node) ?? [], [R?.developerOrgMembers?.edges]), q = p(() => B?.developerOrgInvitations?.edges?.map((e) => e.node) ?? [], [B?.developerOrgInvitations?.edges]), He = R?.developerOrgMembers?.totalCount ?? 0, Ue = B?.developerOrgInvitations?.totalCount ?? 0, J = p(() => K.filter((e) => A.has(e.id)), [K, A]), Y = p(() => q.filter((e) => M.has(e.id)), [q, M]), X = K.filter((e) => e.role !== "OWNER"), We = X.length > 0 && X.every((e) => A.has(e.id)), Ge = X.some((e) => A.has(e.id)) && !We, Ke = q.length > 0 && q.every((e) => M.has(e.id)), qe = q.some((e) => M.has(e.id)) && !Ke, Z = J.filter((e) => e.role !== "OWNER" && !e.isSuspended), Q = J.filter((e) => e.isSuspended), $ = J.filter((e) => e.role !== "OWNER"), Je = async () => {
50
- if (!(!v || !D.trim())) {
51
- O(null);
54
+ }), K = f(() => G?.developerOrgInvitations?.edges?.map((e) => e.node) ?? [], [G?.developerOrgInvitations?.edges]), Qe = L?.developerOrgMembers?.totalCount ?? 0, $e = G?.developerOrgInvitations?.totalCount ?? 0, q = f(() => R.filter((e) => k.has(e.id)), [R, k]), J = f(() => K.filter((e) => j.has(e.id)), [K, j]), Y = R.filter((e) => e.role !== "OWNER"), et = Y.length > 0 && Y.every((e) => k.has(e.id)), tt = Y.some((e) => k.has(e.id)) && !et, X = K.length > 0 && K.every((e) => j.has(e.id)), nt = K.some((e) => j.has(e.id)) && !X, Z = q.filter((e) => e.role !== "OWNER" && !e.isSuspended), Q = q.filter((e) => e.isSuspended), $ = q.filter((e) => e.role !== "OWNER"), rt = async () => {
55
+ if (!(!_ || !C.trim())) {
56
+ D(null);
52
57
  try {
53
- await Le({ variables: {
54
- organizationId: v,
58
+ await Be({ variables: {
59
+ organizationId: _,
55
60
  input: {
56
- email: D,
57
- role: Ee,
58
- message: Oe || void 0
61
+ email: C,
62
+ role: T,
63
+ message: je || void 0
59
64
  }
60
- } }), E(!1), Te(""), De("DEVELOPER"), ke("");
65
+ } }), S(!1), w(""), E("DEVELOPER"), Me(""), O(b("devportal.invitationSent", "Invitation created and email sent to the team member."));
61
66
  } catch (e) {
62
- O(e instanceof Error ? e.message : T("devportal.failedToSendInvitation", "Failed to send invitation"));
67
+ D(e instanceof Error ? e.message : b("devportal.failedToSendInvitation", "Failed to send invitation"));
63
68
  }
64
69
  }
65
- }, Ye = async (e) => {
66
- O(null);
70
+ }, it = async (e) => {
71
+ D(null);
67
72
  try {
68
- await H({ variables: { id: e } });
73
+ await He({ variables: { id: e } });
69
74
  } catch (e) {
70
- O(e instanceof Error ? e.message : T("devportal.failedToRemoveMember", "Failed to remove member"));
75
+ D(e instanceof Error ? e.message : b("devportal.failedToRemoveMember", "Failed to remove member"));
71
76
  }
72
- }, Xe = async (e, t) => {
73
- O(null);
77
+ }, at = async (e, t) => {
78
+ D(null);
74
79
  try {
75
- await U({ variables: {
80
+ await Ue({ variables: {
76
81
  id: e,
77
82
  reason: t || void 0
78
83
  } });
79
84
  } catch (e) {
80
- O(e instanceof Error ? e.message : T("devportal.failedToSuspendMember", "Failed to suspend member"));
85
+ D(e instanceof Error ? e.message : b("devportal.failedToSuspendMember", "Failed to suspend member"));
81
86
  }
82
- }, Ze = async (e) => {
83
- O(null);
87
+ }, ot = async (e) => {
88
+ D(null);
84
89
  try {
85
- await W({ variables: { id: e } });
90
+ await We({ variables: { id: e } });
86
91
  } catch (e) {
87
- O(e instanceof Error ? e.message : T("devportal.failedToReactivateMember", "Failed to reactivate member"));
92
+ D(e instanceof Error ? e.message : b("devportal.failedToReactivateMember", "Failed to reactivate member"));
88
93
  }
89
- }, Qe = async (e, t) => {
90
- O(null);
94
+ }, st = async (e, t) => {
95
+ D(null);
91
96
  try {
92
- await ze({ variables: {
97
+ await Ge({ variables: {
93
98
  id: e,
94
99
  role: t,
95
100
  permissions: void 0
96
- } }), k(T("devportal.memberRoleUpdated", "Member role updated successfully"));
101
+ } }), O(b("devportal.memberRoleUpdated", "Member role updated successfully"));
97
102
  } catch (e) {
98
- O(e instanceof Error ? e.message : T("devportal.failedToUpdateMemberRole", "Failed to update member role"));
103
+ D(e instanceof Error ? e.message : b("devportal.failedToUpdateMemberRole", "Failed to update member role"));
99
104
  }
100
- }, $e = async () => {
101
- let e = I;
102
- if (!(!v || !e)) {
103
- O(null);
105
+ }, ct = async () => {
106
+ let e = F;
107
+ if (!(!_ || !e)) {
108
+ D(null);
104
109
  try {
105
- await Be({ variables: {
106
- organizationId: v,
110
+ await Ke({ variables: {
111
+ organizationId: _,
107
112
  newOwnerId: e.userId
108
- } }), L(null), k(T("devportal.organizationOwnershipTransferred", "Organization ownership transferred successfully"));
113
+ } }), I(null), O(b("devportal.organizationOwnershipTransferred", "Organization ownership transferred successfully"));
109
114
  } catch (e) {
110
- O(e instanceof Error ? e.message : T("devportal.failedToTransferOwnership", "Failed to transfer organization ownership"));
115
+ D(e instanceof Error ? e.message : b("devportal.failedToTransferOwnership", "Failed to transfer organization ownership"));
111
116
  }
112
117
  }
113
- }, et = async (e) => {
114
- O(null);
118
+ }, lt = async (e) => {
119
+ D(null);
115
120
  try {
116
- await G({ variables: { id: e } });
121
+ await qe({ variables: { id: e } });
117
122
  } catch (e) {
118
- O(e instanceof Error ? e.message : T("devportal.failedToCancelInvitation", "Failed to cancel invitation"));
123
+ D(e instanceof Error ? e.message : b("devportal.failedToCancelInvitation", "Failed to cancel invitation"));
119
124
  }
120
- }, tt = async (e) => {
121
- O(null);
125
+ }, ut = async (e) => {
126
+ D(null);
122
127
  try {
123
- await Ve({ variables: { id: e } });
128
+ await Je({ variables: { id: e } });
124
129
  } catch (e) {
125
- O(e instanceof Error ? e.message : T("devportal.failedToResendInvitation", "Failed to resend invitation"));
130
+ D(e instanceof Error ? e.message : b("devportal.failedToResendInvitation", "Failed to resend invitation"));
126
131
  }
127
- }, nt = () => {
128
- j(/* @__PURE__ */ new Set()), N(/* @__PURE__ */ new Set());
129
- }, rt = (e, t) => {
130
- j((n) => {
132
+ }, dt = () => {
133
+ A(/* @__PURE__ */ new Set()), M(/* @__PURE__ */ new Set());
134
+ }, ft = (e, t) => {
135
+ A((n) => {
131
136
  let r = new Set(n);
132
137
  return t ? r.add(e) : r.delete(e), r;
133
138
  });
134
- }, it = (e) => {
135
- j((t) => {
139
+ }, pt = (e) => {
140
+ A((t) => {
136
141
  let n = new Set(t);
137
- return X.forEach((t) => {
142
+ return Y.forEach((t) => {
138
143
  e ? n.add(t.id) : n.delete(t.id);
139
144
  }), n;
140
145
  });
141
- }, at = (e, t) => {
142
- N((n) => {
146
+ }, mt = (e, t) => {
147
+ M((n) => {
143
148
  let r = new Set(n);
144
149
  return t ? r.add(e) : r.delete(e), r;
145
150
  });
151
+ }, ht = (e) => {
152
+ M((t) => {
153
+ let n = new Set(t);
154
+ return K.forEach((t) => {
155
+ e ? n.add(t.id) : n.delete(t.id);
156
+ }), n;
157
+ });
158
+ }, gt = async () => {
159
+ if (Z.length === 0) return;
160
+ D(null);
161
+ let e = await Promise.allSettled(Z.map((e) => Ue({ variables: {
162
+ id: e.id,
163
+ reason: void 0
164
+ } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
165
+ O(`${b("devportal.suspended", "Suspended")} ${t} ${t === 1 ? b("devportal.memberLower", "member") : b("devportal.membersLower", "members")}${n > 0 ? ` • ${n} ${b("devportal.failed", "failed")}` : ""}`), A(/* @__PURE__ */ new Set());
166
+ }, _t = async () => {
167
+ if (Q.length === 0) return;
168
+ D(null);
169
+ let e = await Promise.allSettled(Q.map((e) => We({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
170
+ O(`${b("devportal.reactivated", "Reactivated")} ${t} ${t === 1 ? b("devportal.memberLower", "member") : b("devportal.membersLower", "members")}${n > 0 ? ` • ${n} ${b("devportal.failed", "failed")}` : ""}`), A(/* @__PURE__ */ new Set());
171
+ }, vt = async () => {
172
+ if ($.length === 0) return;
173
+ D(null);
174
+ let e = await Promise.allSettled($.map((e) => He({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
175
+ O(`${b("devportal.removed", "Removed")} ${t} ${t === 1 ? b("devportal.memberLower", "member") : b("devportal.membersLower", "members")}${n > 0 ? ` • ${n} ${b("devportal.failed", "failed")}` : ""}`), N(!1), A(/* @__PURE__ */ new Set());
176
+ }, yt = async () => {
177
+ if (J.length === 0) return;
178
+ D(null);
179
+ let e = await Promise.allSettled(J.map((e) => Je({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
180
+ O(`${b("devportal.resent", "Resent")} ${t} ${t === 1 ? b("devportal.invitationLower", "invitation") : b("devportal.invitationsLower", "invitations")}${n > 0 ? ` • ${n} ${b("devportal.failed", "failed")}` : ""}`), M(/* @__PURE__ */ new Set());
181
+ }, bt = async () => {
182
+ if (J.length === 0) return;
183
+ D(null);
184
+ let e = await Promise.allSettled(J.map((e) => qe({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
185
+ O(`${b("devportal.cancelled", "Cancelled")} ${t} ${t === 1 ? b("devportal.invitationLower", "invitation") : b("devportal.invitationsLower", "invitations")}${n > 0 ? ` • ${n} ${b("devportal.failed", "failed")}` : ""}`), P(!1), M(/* @__PURE__ */ new Set());
146
186
  };
147
- return (Fe || Ie) && !R && !B ? /* @__PURE__ */ g(i, {
148
- title: T("devportal.teamMembers", "Team Members"),
149
- description: T("devportal.manageYourOrganizationsTeam", "Manage your organization's team"),
150
- backLink: `/organizations/${v}`,
151
- backLabel: T("devportal.backToOrganization", "Back to Organization"),
152
- children: /* @__PURE__ */ g("div", {
187
+ return (Re || Xe) && !L && !G ? /* @__PURE__ */ h(i, {
188
+ title: b("devportal.teamMembers", "Team Members"),
189
+ description: b("devportal.manageYourOrganizationsTeam", "Manage your organization's team"),
190
+ backLink: `/organizations/${_}`,
191
+ backLabel: b("devportal.backToOrganization", "Back to Organization"),
192
+ children: /* @__PURE__ */ h("div", {
153
193
  className: "flex items-center justify-center py-16",
154
- children: /* @__PURE__ */ g(he, { className: "h-8 w-8 animate-spin text-text-secondary" })
194
+ children: /* @__PURE__ */ h(_e, { className: "h-8 w-8 animate-spin text-text-secondary" })
155
195
  })
156
- }) : (z || V) && !R && !B ? /* @__PURE__ */ g(i, {
157
- title: T("devportal.teamMembers", "Team Members"),
158
- description: T("devportal.manageYourOrganizationsTeam", "Manage your organization's team"),
159
- backLink: `/organizations/${v}`,
160
- backLabel: T("devportal.backToOrganization", "Back to Organization"),
161
- children: /* @__PURE__ */ g(t, {
162
- icon: /* @__PURE__ */ g(h, {
196
+ }) : (ze || Ze) && !L && !G ? /* @__PURE__ */ h(i, {
197
+ title: b("devportal.teamMembers", "Team Members"),
198
+ description: b("devportal.manageYourOrganizationsTeam", "Manage your organization's team"),
199
+ backLink: `/organizations/${_}`,
200
+ backLabel: b("devportal.backToOrganization", "Back to Organization"),
201
+ children: /* @__PURE__ */ h(t, {
202
+ icon: /* @__PURE__ */ h(m, {
163
203
  size: 32,
164
204
  className: "text-status-error-text"
165
205
  }),
166
- title: T("devportal.failedToLoadMembers", "Failed to load members"),
167
- description: z?.message || V?.message || T("devportal.anErrorOccurredWhileLoadingTeamData", "An error occurred while loading team data")
206
+ title: b("devportal.failedToLoadMembers", "Failed to load members"),
207
+ description: ze?.message || Ze?.message || b("devportal.anErrorOccurredWhileLoadingTeamData", "An error occurred while loading team data")
168
208
  })
169
- }) : /* @__PURE__ */ g(fe, {
209
+ }) : /* @__PURE__ */ h(pe, {
170
210
  permission: u.ORG_MEMBER_READ,
171
- children: /* @__PURE__ */ _(i, {
172
- title: T("devportal.teamMembers", "Team Members"),
173
- description: T("devportal.manageYourOrganizationsTeam", "Manage your organization's team"),
174
- purpose: T("devportal.teamMembersPurpose", "Control who can work on this organization's apps and what they can do. Invite teammates by email, assign roles to grant the right level of access, and suspend or remove anyone who should no longer have it."),
175
- backLink: `/organizations/${v}`,
176
- backLabel: T("devportal.backToOrganization", "Back to Organization"),
177
- actions: /* @__PURE__ */ _("button", {
178
- onClick: () => E(!0),
179
- disabled: !Se,
180
- "aria-disabled": !Se,
211
+ children: /* @__PURE__ */ g(i, {
212
+ title: b("devportal.teamMembers", "Team Members"),
213
+ description: b("devportal.manageYourOrganizationsTeam", "Manage your organization's team"),
214
+ purpose: b("devportal.teamMembersPurpose", "Control who can work on this organization's apps and what they can do. Invite teammates by email, assign roles to grant the right level of access, and suspend or remove anyone who should no longer have it."),
215
+ backLink: `/organizations/${_}`,
216
+ backLabel: b("devportal.backToOrganization", "Back to Organization"),
217
+ actions: B ? /* @__PURE__ */ g("button", {
218
+ onClick: () => S(!0),
219
+ disabled: !B,
220
+ "aria-disabled": !B,
181
221
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 disabled:opacity-50",
182
- children: [/* @__PURE__ */ g(_e, { size: 16 }), T("devportal.inviteMember", "Invite Member")]
183
- }),
222
+ children: [/* @__PURE__ */ h(ye, { size: 16 }), b("devportal.inviteMember", "Invite Member")]
223
+ }) : void 0,
184
224
  children: [
185
- Ae && /* @__PURE__ */ _("div", {
225
+ Ne && /* @__PURE__ */ g("div", {
186
226
  className: "rounded-lg border border-border-subtle bg-status-error-bg-subtle p-3 flex items-center gap-2 text-sm text-status-error-text",
187
227
  children: [
188
- /* @__PURE__ */ g(h, {
228
+ /* @__PURE__ */ h(m, {
189
229
  size: 16,
190
230
  className: "flex-shrink-0"
191
231
  }),
192
- Ae,
193
- /* @__PURE__ */ g("button", {
194
- onClick: () => O(null),
232
+ Ne,
233
+ /* @__PURE__ */ h("button", {
234
+ onClick: () => D(null),
195
235
  className: "ml-auto text-status-error-text hover:text-status-error-text",
196
- children: T("devportal.dismiss", "Dismiss")
236
+ children: b("devportal.dismiss", "Dismiss")
197
237
  })
198
238
  ]
199
239
  }),
200
- je && /* @__PURE__ */ _("div", {
240
+ Pe && /* @__PURE__ */ g("div", {
201
241
  className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 flex items-center gap-2 text-sm text-status-success-text",
202
242
  children: [
203
- /* @__PURE__ */ g(h, {
243
+ /* @__PURE__ */ h(m, {
204
244
  size: 16,
205
245
  className: "flex-shrink-0"
206
246
  }),
207
- je,
208
- /* @__PURE__ */ g("button", {
209
- onClick: () => k(null),
247
+ Pe,
248
+ /* @__PURE__ */ h("button", {
249
+ onClick: () => O(null),
210
250
  className: "ml-auto text-status-success-text hover:text-status-success-text",
211
- children: T("devportal.dismiss", "Dismiss")
251
+ children: b("devportal.dismiss", "Dismiss")
212
252
  })
213
253
  ]
214
254
  }),
215
- (A.size > 0 || M.size > 0) && /* @__PURE__ */ _("div", {
255
+ (k.size > 0 || j.size > 0) && /* @__PURE__ */ g("div", {
216
256
  className: "flex flex-wrap items-center gap-3 rounded-card border border-border-seam bg-bg-surface p-4",
217
- children: [/* @__PURE__ */ _("span", {
257
+ children: [/* @__PURE__ */ g("span", {
218
258
  className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
219
259
  children: [
220
- A.size + M.size,
260
+ k.size + j.size,
221
261
  " ",
222
- T("devportal.selected", "selected")
262
+ b("devportal.selected", "selected")
223
263
  ]
224
- }), /* @__PURE__ */ g("button", {
225
- onClick: nt,
264
+ }), /* @__PURE__ */ h("button", {
265
+ onClick: dt,
226
266
  className: "text-sm text-text-secondary hover:text-text-primary",
227
- children: T("devportal.clearAllSelections", "Clear all selections")
267
+ children: b("devportal.clearAllSelections", "Clear all selections")
228
268
  })]
229
269
  }),
230
- /* @__PURE__ */ g(a, {
231
- title: `${T("devportal.members", "Members")} (${He})`,
232
- actions: K.length > 0 ? /* @__PURE__ */ _("div", {
270
+ /* @__PURE__ */ h(a, {
271
+ title: `${b("devportal.members", "Members")} (${Qe})`,
272
+ actions: R.length > 0 && z ? /* @__PURE__ */ g("div", {
233
273
  className: "flex flex-wrap items-center gap-2",
234
274
  children: [
235
- /* @__PURE__ */ _("button", {
236
- onClick: async () => {
237
- if (Z.length === 0) return;
238
- O(null);
239
- let e = await Promise.allSettled(Z.map((e) => U({ variables: {
240
- id: e.id,
241
- reason: void 0
242
- } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
243
- k(`${T("devportal.suspended", "Suspended")} ${t} ${t === 1 ? T("devportal.memberLower", "member") : T("devportal.membersLower", "members")}${n > 0 ? ` • ${n} ${T("devportal.failed", "failed")}` : ""}`), j(/* @__PURE__ */ new Set());
244
- },
245
- disabled: Z.length === 0 || !C,
246
- "aria-disabled": !C,
275
+ /* @__PURE__ */ g("button", {
276
+ onClick: gt,
277
+ disabled: Z.length === 0 || !W,
278
+ "aria-disabled": !W,
247
279
  className: "rounded-md border border-status-warning-bg px-3 py-2 text-sm font-medium text-status-warning-text hover:bg-status-warning-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
248
- children: [T("devportal.suspendSelected", "Suspend Selected"), Z.length > 0 ? ` (${Z.length})` : ""]
280
+ children: [b("devportal.suspendSelected", "Suspend Selected"), Z.length > 0 ? ` (${Z.length})` : ""]
249
281
  }),
250
- /* @__PURE__ */ _("button", {
251
- onClick: async () => {
252
- if (Q.length === 0) return;
253
- O(null);
254
- let e = await Promise.allSettled(Q.map((e) => W({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
255
- k(`${T("devportal.reactivated", "Reactivated")} ${t} ${t === 1 ? T("devportal.memberLower", "member") : T("devportal.membersLower", "members")}${n > 0 ? ` • ${n} ${T("devportal.failed", "failed")}` : ""}`), j(/* @__PURE__ */ new Set());
256
- },
257
- disabled: Q.length === 0 || !S,
258
- "aria-disabled": !S,
282
+ /* @__PURE__ */ g("button", {
283
+ onClick: _t,
284
+ disabled: Q.length === 0 || !U,
285
+ "aria-disabled": !U,
259
286
  className: "rounded-md border border-status-success-bg px-3 py-2 text-sm font-medium text-status-success-text hover:bg-status-success-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
260
- children: [T("devportal.reactivateSelected", "Reactivate Selected"), Q.length > 0 ? ` (${Q.length})` : ""]
287
+ children: [b("devportal.reactivateSelected", "Reactivate Selected"), Q.length > 0 ? ` (${Q.length})` : ""]
261
288
  }),
262
- /* @__PURE__ */ _("button", {
263
- onClick: () => P(!0),
264
- disabled: $.length === 0 || !x,
265
- "aria-disabled": !x,
289
+ /* @__PURE__ */ g("button", {
290
+ onClick: () => N(!0),
291
+ disabled: $.length === 0 || !H,
292
+ "aria-disabled": !H,
266
293
  className: "rounded-md border border-status-error-bg px-3 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
267
- children: [T("devportal.removeSelected", "Remove Selected"), $.length > 0 ? ` (${$.length})` : ""]
294
+ children: [b("devportal.removeSelected", "Remove Selected"), $.length > 0 ? ` (${$.length})` : ""]
268
295
  })
269
296
  ]
270
297
  }) : null,
271
- children: K.length > 0 ? /* @__PURE__ */ g(le, {
272
- data: K,
298
+ children: R.length > 0 ? /* @__PURE__ */ h(le, {
299
+ data: R,
273
300
  keyField: "id",
274
301
  columns: [
275
- {
302
+ ...z ? [{
276
303
  key: "select",
277
- header: /* @__PURE__ */ g(c, {
278
- checked: We,
279
- indeterminate: Ge,
280
- onChange: it,
281
- ariaLabel: T("devportal.selectAllMembers", "Select all members")
304
+ header: /* @__PURE__ */ h(c, {
305
+ checked: et,
306
+ indeterminate: tt,
307
+ onChange: pt,
308
+ ariaLabel: b("devportal.selectAllMembers", "Select all members")
282
309
  }),
283
310
  className: "w-12",
284
- render: (e) => /* @__PURE__ */ g("div", {
311
+ render: (e) => /* @__PURE__ */ h("div", {
285
312
  onClick: (e) => e.stopPropagation(),
286
- children: /* @__PURE__ */ g(c, {
287
- checked: A.has(e.id),
313
+ children: /* @__PURE__ */ h(c, {
314
+ checked: k.has(e.id),
288
315
  disabled: e.role === "OWNER",
289
- onChange: (t) => rt(e.id, t),
290
- ariaLabel: `Select member ${w(e)}`
316
+ onChange: (t) => ft(e.id, t),
317
+ ariaLabel: `Select member ${y(e)}`
291
318
  })
292
319
  })
293
- },
320
+ }] : [],
294
321
  {
295
322
  key: "email",
296
- header: T("devportal.memberColumn", "Member"),
323
+ header: b("devportal.memberColumn", "Member"),
297
324
  render: (e) => {
298
- let t = w(e);
299
- return /* @__PURE__ */ _("div", {
325
+ let t = y(e);
326
+ return /* @__PURE__ */ g("div", {
300
327
  className: "flex items-center gap-3",
301
- children: [/* @__PURE__ */ g("div", {
328
+ children: [/* @__PURE__ */ h("div", {
302
329
  className: "flex h-8 w-8 items-center justify-center rounded-full bg-action-primary-bg/10 text-primary text-sm font-medium",
303
330
  children: t.charAt(0).toUpperCase()
304
- }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
331
+ }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("p", {
305
332
  className: "font-medium",
306
333
  children: t
307
- }), /* @__PURE__ */ _("p", {
334
+ }), /* @__PURE__ */ g("p", {
308
335
  className: "text-xs text-text-secondary",
309
336
  children: [
310
- T("devportal.joined", "Joined"),
337
+ b("devportal.joined", "Joined"),
311
338
  " ",
312
- f(new Date(e.joinedAt), "MMM d, yyyy")
339
+ me(new Date(e.joinedAt), "MMM d, yyyy")
313
340
  ]
314
341
  })] })]
315
342
  });
@@ -317,17 +344,17 @@ var v = () => {
317
344
  },
318
345
  {
319
346
  key: "role",
320
- header: T("devportal.roleColumn", "Role"),
321
- render: (e) => /* @__PURE__ */ _("div", {
347
+ header: b("devportal.roleColumn", "Role"),
348
+ render: (e) => /* @__PURE__ */ g("div", {
322
349
  className: "flex items-center gap-2",
323
- children: [/* @__PURE__ */ g(ye, {
350
+ children: [/* @__PURE__ */ h(xe, {
324
351
  size: 14,
325
352
  className: "text-text-secondary"
326
- }), e.role === "OWNER" ? /* @__PURE__ */ g("span", { children: o[e.role] ?? e.role }) : /* @__PURE__ */ g("select", {
353
+ }), e.role === "OWNER" || !V ? /* @__PURE__ */ h("span", { children: o[e.role] ?? e.role }) : /* @__PURE__ */ h("select", {
327
354
  value: e.role,
328
- onChange: (t) => void Qe(e.id, t.target.value),
355
+ onChange: (t) => void st(e.id, t.target.value),
329
356
  className: "rounded-md border border-border-subtle bg-bg-surface px-2 py-1 text-xs text-text-primary",
330
- children: Object.entries(o).filter(([e]) => e !== "OWNER").map(([e, t]) => /* @__PURE__ */ g("option", {
357
+ children: Object.entries(o).filter(([e]) => e !== "OWNER").map(([e, t]) => /* @__PURE__ */ h("option", {
331
358
  value: e,
332
359
  children: t
333
360
  }, e))
@@ -336,122 +363,110 @@ var v = () => {
336
363
  },
337
364
  {
338
365
  key: "status",
339
- header: T("devportal.statusColumn", "Status"),
340
- render: (e) => e.isSuspended ? /* @__PURE__ */ g(s, {
366
+ header: b("devportal.statusColumn", "Status"),
367
+ render: (e) => e.isSuspended ? /* @__PURE__ */ h(s, {
341
368
  status: "SUSPENDED",
342
369
  type: "app"
343
- }) : e.isActive ? /* @__PURE__ */ g(s, {
370
+ }) : e.isActive ? /* @__PURE__ */ h(s, {
344
371
  status: "ACTIVE",
345
372
  type: "app"
346
- }) : /* @__PURE__ */ g(s, {
373
+ }) : /* @__PURE__ */ h(s, {
347
374
  status: "INACTIVE",
348
375
  type: "app"
349
376
  })
350
377
  },
351
- {
378
+ ...z ? [{
352
379
  key: "actions",
353
380
  header: "",
354
381
  className: "w-32",
355
- render: (e) => e.role !== "OWNER" && /* @__PURE__ */ _("div", {
382
+ render: (e) => e.role !== "OWNER" && /* @__PURE__ */ g("div", {
356
383
  className: "flex gap-1",
357
384
  children: [
358
- e.isSuspended ? /* @__PURE__ */ g("button", {
385
+ e.isSuspended ? /* @__PURE__ */ h("button", {
359
386
  className: "text-xs text-status-success-text hover:underline disabled:opacity-50",
360
- disabled: !S,
361
- "aria-disabled": !S,
362
- title: T("devportal.reactivateMember", "Reactivate member"),
363
- onClick: () => Ze(e.id),
364
- children: T("devportal.reactivate", "Reactivate")
365
- }) : /* @__PURE__ */ g("button", {
387
+ disabled: !U,
388
+ "aria-disabled": !U,
389
+ title: b("devportal.reactivateMember", "Reactivate member"),
390
+ onClick: () => ot(e.id),
391
+ children: b("devportal.reactivate", "Reactivate")
392
+ }) : /* @__PURE__ */ h("button", {
366
393
  className: "text-xs text-status-warning-text hover:underline disabled:opacity-50",
367
- disabled: !C,
368
- "aria-disabled": !C,
369
- title: T("devportal.suspendMember", "Suspend member"),
370
- onClick: () => Xe(e.id),
371
- children: T("devportal.suspend", "Suspend")
394
+ disabled: !W,
395
+ "aria-disabled": !W,
396
+ title: b("devportal.suspendMember", "Suspend member"),
397
+ onClick: () => at(e.id),
398
+ children: b("devportal.suspend", "Suspend")
372
399
  }),
373
- /* @__PURE__ */ g("button", {
400
+ /* @__PURE__ */ h("button", {
374
401
  className: "text-xs text-status-error-text hover:underline disabled:opacity-50",
375
- disabled: !x,
376
- "aria-disabled": !x,
377
- title: T("devportal.removeMember", "Remove member"),
378
- onClick: () => Ye(e.id),
379
- children: T("devportal.remove", "Remove")
402
+ disabled: !H,
403
+ "aria-disabled": !H,
404
+ title: b("devportal.removeMember", "Remove member"),
405
+ onClick: () => it(e.id),
406
+ children: b("devportal.remove", "Remove")
380
407
  }),
381
- /* @__PURE__ */ g("button", {
408
+ /* @__PURE__ */ h("button", {
382
409
  className: "text-xs text-primary hover:underline disabled:opacity-50",
383
- disabled: !b,
384
- "aria-disabled": !b,
385
- title: T("devportal.transferOwnership", "Transfer ownership"),
386
- onClick: () => L(e),
387
- children: T("devportal.makeOwner", "Make Owner")
410
+ disabled: !V,
411
+ "aria-disabled": !V,
412
+ title: b("devportal.transferOwnership", "Transfer ownership"),
413
+ onClick: () => I(e),
414
+ children: b("devportal.makeOwner", "Make Owner")
388
415
  })
389
416
  ]
390
417
  })
391
- }
418
+ }] : []
392
419
  ]
393
- }) : /* @__PURE__ */ g(t, {
420
+ }) : /* @__PURE__ */ h(t, {
394
421
  illustration: "empty-people",
395
- title: T("devportal.noMembers", "No members"),
396
- description: T("devportal.inviteTeamMembersToCollaborate", "Invite team members to collaborate")
422
+ title: b("devportal.noMembers", "No members"),
423
+ description: b("devportal.inviteTeamMembersToCollaborate", "Invite team members to collaborate")
397
424
  })
398
425
  }),
399
- q.length > 0 && /* @__PURE__ */ g(a, {
400
- title: `${T("devportal.pendingInvitations", "Pending Invitations")} (${Ue})`,
401
- actions: /* @__PURE__ */ _("div", {
426
+ z && K.length > 0 && /* @__PURE__ */ h(a, {
427
+ title: `${b("devportal.pendingInvitations", "Pending Invitations")} (${$e})`,
428
+ actions: /* @__PURE__ */ g("div", {
402
429
  className: "flex flex-wrap items-center gap-2",
403
- children: [/* @__PURE__ */ _("button", {
404
- onClick: async () => {
405
- if (Y.length === 0) return;
406
- O(null);
407
- let e = await Promise.allSettled(Y.map((e) => Ve({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
408
- k(`${T("devportal.resent", "Resent")} ${t} ${t === 1 ? T("devportal.invitationLower", "invitation") : T("devportal.invitationsLower", "invitations")}${n > 0 ? ` • ${n} ${T("devportal.failed", "failed")}` : ""}`), N(/* @__PURE__ */ new Set());
409
- },
410
- disabled: Y.length === 0,
430
+ children: [/* @__PURE__ */ g("button", {
431
+ onClick: yt,
432
+ disabled: J.length === 0,
411
433
  className: "rounded-md border border-primary/30 px-3 py-2 text-sm font-medium text-primary hover:bg-action-primary-bg/5 disabled:cursor-not-allowed disabled:opacity-50",
412
- children: [T("devportal.resendSelected", "Resend Selected"), Y.length > 0 ? ` (${Y.length})` : ""]
413
- }), /* @__PURE__ */ _("button", {
414
- onClick: () => F(!0),
415
- disabled: Y.length === 0,
434
+ children: [b("devportal.resendSelected", "Resend Selected"), J.length > 0 ? ` (${J.length})` : ""]
435
+ }), /* @__PURE__ */ g("button", {
436
+ onClick: () => P(!0),
437
+ disabled: J.length === 0,
416
438
  className: "rounded-md border border-status-error-bg px-3 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
417
- children: [T("devportal.cancelSelected", "Cancel Selected"), Y.length > 0 ? ` (${Y.length})` : ""]
439
+ children: [b("devportal.cancelSelected", "Cancel Selected"), J.length > 0 ? ` (${J.length})` : ""]
418
440
  })]
419
441
  }),
420
- children: /* @__PURE__ */ g(le, {
421
- data: q,
442
+ children: /* @__PURE__ */ h(le, {
443
+ data: K,
422
444
  keyField: "id",
423
445
  columns: [
424
446
  {
425
447
  key: "select",
426
- header: /* @__PURE__ */ g(c, {
427
- checked: Ke,
428
- indeterminate: qe,
429
- onChange: (e) => {
430
- N((t) => {
431
- let n = new Set(t);
432
- return q.forEach((t) => {
433
- e ? n.add(t.id) : n.delete(t.id);
434
- }), n;
435
- });
436
- },
437
- ariaLabel: T("devportal.selectAllInvitations", "Select all invitations")
448
+ header: /* @__PURE__ */ h(c, {
449
+ checked: X,
450
+ indeterminate: nt,
451
+ onChange: ht,
452
+ ariaLabel: b("devportal.selectAllInvitations", "Select all invitations")
438
453
  }),
439
454
  className: "w-12",
440
- render: (e) => /* @__PURE__ */ g("div", {
455
+ render: (e) => /* @__PURE__ */ h("div", {
441
456
  onClick: (e) => e.stopPropagation(),
442
- children: /* @__PURE__ */ g(c, {
443
- checked: M.has(e.id),
444
- onChange: (t) => at(e.id, t),
457
+ children: /* @__PURE__ */ h(c, {
458
+ checked: j.has(e.id),
459
+ onChange: (t) => mt(e.id, t),
445
460
  ariaLabel: `Select invitation ${e.invitedEmail}`
446
461
  })
447
462
  })
448
463
  },
449
464
  {
450
465
  key: "invitedEmail",
451
- header: T("devportal.emailColumn", "Email"),
452
- render: (e) => /* @__PURE__ */ _("div", {
466
+ header: b("devportal.emailColumn", "Email"),
467
+ render: (e) => /* @__PURE__ */ g("div", {
453
468
  className: "flex items-center gap-2",
454
- children: [/* @__PURE__ */ g(ge, {
469
+ children: [/* @__PURE__ */ h(ve, {
455
470
  size: 16,
456
471
  className: "text-text-secondary"
457
472
  }), e.invitedEmail]
@@ -459,122 +474,122 @@ var v = () => {
459
474
  },
460
475
  {
461
476
  key: "role",
462
- header: T("devportal.invitedRoleColumn", "Invited Role"),
477
+ header: b("devportal.invitedRoleColumn", "Invited Role"),
463
478
  render: (e) => o[e.role] ?? e.role
464
479
  },
465
480
  {
466
481
  key: "status",
467
- header: T("devportal.statusColumn", "Status"),
468
- render: (e) => /* @__PURE__ */ g(s, {
482
+ header: b("devportal.statusColumn", "Status"),
483
+ render: (e) => /* @__PURE__ */ h(s, {
469
484
  status: e.status,
470
485
  type: "invitation"
471
486
  })
472
487
  },
473
488
  {
474
489
  key: "expiresAt",
475
- header: T("devportal.expiresColumn", "Expires"),
476
- render: (e) => f(new Date(e.expiresAt), "MMM d, yyyy")
490
+ header: b("devportal.expiresColumn", "Expires"),
491
+ render: (e) => me(new Date(e.expiresAt), "MMM d, yyyy")
477
492
  },
478
493
  {
479
494
  key: "actions",
480
495
  header: "",
481
496
  className: "w-24",
482
- render: (e) => /* @__PURE__ */ _("div", {
497
+ render: (e) => /* @__PURE__ */ g("div", {
483
498
  className: "flex gap-1",
484
- children: [/* @__PURE__ */ g("button", {
499
+ children: [/* @__PURE__ */ h("button", {
485
500
  className: "rounded p-1 hover:bg-bg-sunken",
486
- title: T("devportal.resend", "Resend"),
487
- onClick: () => tt(e.id),
488
- children: /* @__PURE__ */ g(ve, { size: 14 })
489
- }), /* @__PURE__ */ g("button", {
501
+ title: b("devportal.resend", "Resend"),
502
+ onClick: () => ut(e.id),
503
+ children: /* @__PURE__ */ h(be, { size: 14 })
504
+ }), /* @__PURE__ */ h("button", {
490
505
  className: "rounded p-1 hover:bg-bg-sunken text-status-error-text",
491
- title: T("devportal.cancel", "Cancel"),
492
- onClick: () => et(e.id),
493
- children: /* @__PURE__ */ g(be, { size: 14 })
506
+ title: b("devportal.cancel", "Cancel"),
507
+ onClick: () => lt(e.id),
508
+ children: /* @__PURE__ */ h(Se, { size: 14 })
494
509
  })]
495
510
  })
496
511
  }
497
512
  ]
498
513
  })
499
514
  }),
500
- we && /* @__PURE__ */ g(l, {
501
- open: we,
502
- onOpenChange: E,
503
- onConfirm: Je,
504
- title: T("devportal.inviteTeamMember", "Invite Team Member"),
505
- confirmLabel: Re ? T("devportal.sendingDots", "Sending...") : T("devportal.sendInvitation", "Send Invitation"),
506
- children: /* @__PURE__ */ _("div", {
515
+ x && /* @__PURE__ */ h(l, {
516
+ open: x,
517
+ onOpenChange: S,
518
+ onConfirm: rt,
519
+ title: b("devportal.inviteTeamMember", "Invite Team Member"),
520
+ confirmLabel: Ve ? b("devportal.sendingDots", "Sending...") : b("devportal.sendInvitation", "Send Invitation"),
521
+ children: /* @__PURE__ */ g("div", {
507
522
  className: "space-y-4",
508
- children: [/* @__PURE__ */ g(ue, {
509
- label: T("devportal.emailAddress", "Email Address"),
510
- type: "email",
511
- value: D,
512
- onChange: (e) => Te(e.target.value),
513
- placeholder: "colleague@example.com",
514
- hint: T("devportal.mustBeExistingVerifiedUser", "Must be an existing verified user"),
515
- required: !0
516
- }), /* @__PURE__ */ g(de, {
517
- label: T("devportal.roleColumn", "Role"),
518
- value: Ee,
519
- onChange: (e) => De(e.target.value),
520
- options: [
521
- {
522
- value: "ADMIN",
523
- label: T("devportal.adminFullAccess", "Admin - Full access")
524
- },
525
- {
526
- value: "DEVELOPER",
527
- label: T("devportal.developerCreateAndManageApps", "Developer - Create and manage apps")
528
- },
529
- {
530
- value: "VIEWER",
531
- label: T("devportal.viewerReadOnlyAccess", "Viewer - Read-only access")
532
- }
533
- ],
534
- required: !0
535
- })]
523
+ children: [
524
+ /* @__PURE__ */ h(ue, {
525
+ label: b("devportal.emailAddress", "Email Address"),
526
+ type: "email",
527
+ value: C,
528
+ onChange: (e) => w(e.target.value),
529
+ placeholder: "colleague@example.com",
530
+ hint: b("devportal.mustBeExistingVerifiedUser", "Must be an existing verified user"),
531
+ required: !0
532
+ }),
533
+ /* @__PURE__ */ h(de, {
534
+ label: b("devportal.roleColumn", "Role"),
535
+ value: T,
536
+ onChange: (e) => E(e.target.value),
537
+ options: [
538
+ {
539
+ value: "ADMIN",
540
+ label: b("devportal.adminFullAccess", "Admin - Full access")
541
+ },
542
+ {
543
+ value: "DEVELOPER",
544
+ label: b("devportal.developerCreateAndManageApps", "Developer - Create and manage apps")
545
+ },
546
+ {
547
+ value: "VIEWER",
548
+ label: b("devportal.viewerReadOnlyAccess", "Viewer - Read-only access")
549
+ }
550
+ ],
551
+ required: !0
552
+ }),
553
+ /* @__PURE__ */ h(fe, {
554
+ label: b("devportal.personalMessage", "Personal Message"),
555
+ value: je,
556
+ onChange: (e) => Me(e.target.value),
557
+ placeholder: b("devportal.personalMessagePlaceholder", "Add a short note to include in the invitation email"),
558
+ rows: 3
559
+ })
560
+ ]
536
561
  })
537
562
  }),
538
- /* @__PURE__ */ g(l, {
539
- open: Me,
540
- onOpenChange: P,
541
- onConfirm: async () => {
542
- if ($.length === 0) return;
543
- O(null);
544
- let e = await Promise.allSettled($.map((e) => H({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
545
- k(`${T("devportal.removed", "Removed")} ${t} ${t === 1 ? T("devportal.memberLower", "member") : T("devportal.membersLower", "members")}${n > 0 ? ` • ${n} ${T("devportal.failed", "failed")}` : ""}`), P(!1), j(/* @__PURE__ */ new Set());
546
- },
547
- title: T("devportal.removeSelectedMembers", "Remove selected members"),
548
- description: `${T("devportal.removeNSelectedMembers", "Remove")} ${$.length} ${T("devportal.selectedMembersFromOrg", "selected member(s) from this organization? This action cannot be undone.")}`,
549
- confirmLabel: T("devportal.removeMembers", "Remove Members"),
550
- cancelLabel: T("devportal.cancel", "Cancel"),
563
+ /* @__PURE__ */ h(l, {
564
+ open: Fe,
565
+ onOpenChange: N,
566
+ onConfirm: vt,
567
+ title: b("devportal.removeSelectedMembers", "Remove selected members"),
568
+ description: `${b("devportal.removeNSelectedMembers", "Remove")} ${$.length} ${b("devportal.selectedMembersFromOrg", "selected member(s) from this organization? This action cannot be undone.")}`,
569
+ confirmLabel: b("devportal.removeMembers", "Remove Members"),
570
+ cancelLabel: b("devportal.cancel", "Cancel"),
551
571
  variant: "danger"
552
572
  }),
553
- /* @__PURE__ */ g(l, {
554
- open: Ne,
555
- onOpenChange: F,
556
- onConfirm: async () => {
557
- if (Y.length === 0) return;
558
- O(null);
559
- let e = await Promise.allSettled(Y.map((e) => G({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
560
- k(`${T("devportal.cancelled", "Cancelled")} ${t} ${t === 1 ? T("devportal.invitationLower", "invitation") : T("devportal.invitationsLower", "invitations")}${n > 0 ? ` • ${n} ${T("devportal.failed", "failed")}` : ""}`), F(!1), N(/* @__PURE__ */ new Set());
561
- },
562
- title: T("devportal.cancelSelectedInvitations", "Cancel selected invitations"),
563
- description: `${T("devportal.cancelNPendingInvitations", "Cancel")} ${Y.length} ${T("devportal.pendingInvitationsQuestion", "pending invitation(s)?")}`,
564
- confirmLabel: T("devportal.cancelInvitations", "Cancel Invitations"),
565
- cancelLabel: T("devportal.keepInvitations", "Keep Invitations"),
573
+ /* @__PURE__ */ h(l, {
574
+ open: Ie,
575
+ onOpenChange: P,
576
+ onConfirm: bt,
577
+ title: b("devportal.cancelSelectedInvitations", "Cancel selected invitations"),
578
+ description: `${b("devportal.cancelNPendingInvitations", "Cancel")} ${J.length} ${b("devportal.pendingInvitationsQuestion", "pending invitation(s)?")}`,
579
+ confirmLabel: b("devportal.cancelInvitations", "Cancel Invitations"),
580
+ cancelLabel: b("devportal.keepInvitations", "Keep Invitations"),
566
581
  variant: "danger"
567
582
  }),
568
- /* @__PURE__ */ g(l, {
569
- open: I !== null,
583
+ /* @__PURE__ */ h(l, {
584
+ open: F !== null,
570
585
  onOpenChange: (e) => {
571
- e || L(null);
586
+ e || I(null);
572
587
  },
573
- onConfirm: $e,
574
- title: T("devportal.transferOwnership", "Transfer ownership"),
575
- description: I ? T("devportal.transferOwnershipConfirmation", `Transfer organization ownership to ${w(I)}?`) : void 0,
576
- confirmLabel: T("devportal.makeOwner", "Make Owner"),
577
- cancelLabel: T("devportal.cancel", "Cancel"),
588
+ onConfirm: ct,
589
+ title: b("devportal.transferOwnership", "Transfer ownership"),
590
+ description: F ? b("devportal.transferOwnershipConfirmation", `Transfer organization ownership to ${y(F)}?`) : void 0,
591
+ confirmLabel: b("devportal.makeOwner", "Make Owner"),
592
+ cancelLabel: b("devportal.cancel", "Cancel"),
578
593
  variant: "warning"
579
594
  })
580
595
  ]
@@ -582,6 +597,6 @@ var v = () => {
582
597
  });
583
598
  };
584
599
  //#endregion
585
- export { v as OrganizationMembersPage };
600
+ export { _ as OrganizationMembersPage };
586
601
 
587
602
  //# sourceMappingURL=OrganizationMembersPage.js.map