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