@burdenoff/microfe-devportal 2026.1112.2 → 2026.1113.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.
Files changed (78) 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 +72 -69
  4. package/dist/devportal/components/AppCard.js.map +1 -1
  5. package/dist/devportal/components/DeveloperSettingsHub.d.ts +6 -0
  6. package/dist/devportal/components/DeveloperSettingsHub.js +59 -0
  7. package/dist/devportal/components/DeveloperSettingsHub.js.map +1 -0
  8. package/dist/devportal/components/ImageUploadField.js +82 -80
  9. package/dist/devportal/components/ImageUploadField.js.map +1 -1
  10. package/dist/devportal/components/SectionNav.d.ts +1 -1
  11. package/dist/devportal/components/SectionNav.js +60 -36
  12. package/dist/devportal/components/SectionNav.js.map +1 -1
  13. package/dist/devportal/components/StoreImage.d.ts +15 -0
  14. package/dist/devportal/components/StoreImage.js +30 -0
  15. package/dist/devportal/components/StoreImage.js.map +1 -0
  16. package/dist/devportal/components/index.d.ts +1 -0
  17. package/dist/devportal/components/index.js +17 -16
  18. package/dist/devportal/hooks/usePackageUpload.d.ts +46 -4
  19. package/dist/devportal/hooks/usePackageUpload.js +90 -36
  20. package/dist/devportal/hooks/usePackageUpload.js.map +1 -1
  21. package/dist/devportal/pages/AdminReviewPage.js +205 -202
  22. package/dist/devportal/pages/AdminReviewPage.js.map +1 -1
  23. package/dist/devportal/pages/AnalyticsDashboardPage.js +186 -179
  24. package/dist/devportal/pages/AnalyticsDashboardPage.js.map +1 -1
  25. package/dist/devportal/pages/ApiKeysPage.js +113 -111
  26. package/dist/devportal/pages/ApiKeysPage.js.map +1 -1
  27. package/dist/devportal/pages/AppLogsPage.js +80 -84
  28. package/dist/devportal/pages/AppLogsPage.js.map +1 -1
  29. package/dist/devportal/pages/ApplicationDetailPage.js +529 -504
  30. package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
  31. package/dist/devportal/pages/ApplicationsPage.js +186 -183
  32. package/dist/devportal/pages/ApplicationsPage.js.map +1 -1
  33. package/dist/devportal/pages/CreateApiKeyPage.js +163 -166
  34. package/dist/devportal/pages/CreateApiKeyPage.js.map +1 -1
  35. package/dist/devportal/pages/CreateOAuthClientPage.js +134 -130
  36. package/dist/devportal/pages/CreateOAuthClientPage.js.map +1 -1
  37. package/dist/devportal/pages/CreatePhysicalItemPage.js +2 -2
  38. package/dist/devportal/pages/CreatePhysicalItemPage.js.map +1 -1
  39. package/dist/devportal/pages/DelegationsPage.js +11 -11
  40. package/dist/devportal/pages/DocumentationPage.js +100 -94
  41. package/dist/devportal/pages/DocumentationPage.js.map +1 -1
  42. package/dist/devportal/pages/EditApplicationPage.js +379 -377
  43. package/dist/devportal/pages/EditApplicationPage.js.map +1 -1
  44. package/dist/devportal/pages/EditPhysicalItemPage.js +312 -307
  45. package/dist/devportal/pages/EditPhysicalItemPage.js.map +1 -1
  46. package/dist/devportal/pages/InvitationDecisionPage.js +83 -79
  47. package/dist/devportal/pages/InvitationDecisionPage.js.map +1 -1
  48. package/dist/devportal/pages/ListingPreviewPage.js +175 -171
  49. package/dist/devportal/pages/ListingPreviewPage.js.map +1 -1
  50. package/dist/devportal/pages/OAuthClientDetailPage.js +76 -76
  51. package/dist/devportal/pages/OAuthClientDetailPage.js.map +1 -1
  52. package/dist/devportal/pages/OAuthClientsPage.js +126 -124
  53. package/dist/devportal/pages/OAuthClientsPage.js.map +1 -1
  54. package/dist/devportal/pages/OrganizationDetailPage.js +19 -19
  55. package/dist/devportal/pages/OrganizationMembersPage.js +223 -204
  56. package/dist/devportal/pages/OrganizationMembersPage.js.map +1 -1
  57. package/dist/devportal/pages/ResourcesPage.d.ts +6 -0
  58. package/dist/devportal/pages/ResourcesPage.js +171 -155
  59. package/dist/devportal/pages/ResourcesPage.js.map +1 -1
  60. package/dist/devportal/pages/SellerDashboardPage.js +117 -115
  61. package/dist/devportal/pages/SellerDashboardPage.js.map +1 -1
  62. package/dist/devportal/pages/SellerItemsPage.js +202 -199
  63. package/dist/devportal/pages/SellerItemsPage.js.map +1 -1
  64. package/dist/devportal/pages/SettingsPage.js +330 -315
  65. package/dist/devportal/pages/SettingsPage.js.map +1 -1
  66. package/dist/devportal/pages/SetupPage.js +5 -5
  67. package/dist/devportal/pages/StoreSubmissionPage.js +133 -131
  68. package/dist/devportal/pages/StoreSubmissionPage.js.map +1 -1
  69. package/dist/devportal/pages/WebhookDetailPage.js +6 -6
  70. package/dist/devportal/pages/WebhooksPage.js +39 -39
  71. package/dist/devportal/pages/WebhooksPage.js.map +1 -1
  72. package/dist/devportal/utils/appDetailTabs.d.ts +73 -0
  73. package/dist/devportal/utils/appDetailTabs.js +62 -0
  74. package/dist/devportal/utils/appDetailTabs.js.map +1 -0
  75. package/dist/devportal/utils/developerNav.d.ts +39 -0
  76. package/dist/devportal/utils/developerNav.js +304 -0
  77. package/dist/devportal/utils/developerNav.js.map +1 -0
  78. package/package.json +2 -2
@@ -3,43 +3,44 @@ import { EmptyState as n } from "../components/EmptyState.js";
3
3
  import { useApproveApplicationMutation as r, useApproveApplicationVersionMutation as i, useGetApplicationForReviewQuery as a, useGetApplicationsQuery as o, useGetApplicationsWithPendingVersionsQuery as s, useRejectApplicationMutation as c, useRejectApplicationVersionMutation as l } from "../../generated/global-operations.js";
4
4
  import { getErrorMessage as u } from "../hooks/useGraphQL.js";
5
5
  import { useDevportal as d } from "../providers/DevportalProvider.js";
6
+ import "../components/index.js";
6
7
  import { PermissionGuard as f } from "../components/PermissionGuard.js";
7
8
  import { ManifestViewer as p } from "../components/ManifestViewer.js";
8
9
  import { PackageValidationPanel as m } from "../components/PackageValidationPanel.js";
9
- import "../components/index.js";
10
- import { useDevportalPermission as h } from "../hooks/usePermission.js";
11
- import { DEVPORTAL_PERMISSIONS as g } from "../constants/permissions.js";
10
+ import { DEVPORTAL_PERMISSIONS as h } from "../constants/permissions.js";
11
+ import { useDevportalPermission as g } from "../hooks/usePermission.js";
12
12
  import "../hooks/index.js";
13
- import { useState as _ } from "react";
14
- import { AlertCircle as v, CheckCircle as y, ChevronDown as b, ChevronUp as x, Clock as S, Download as C, Eye as w, GitBranch as T, Loader2 as E, Package as D, Search as O, XCircle as k } from "lucide-react";
15
- import { jsx as A, jsxs as j } from "react/jsx-runtime";
16
- import { useI18n as M } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
13
+ import { StoreImage as _ } from "../components/StoreImage.js";
14
+ import { useState as v } from "react";
15
+ import { AlertCircle as y, CheckCircle as b, ChevronDown as x, ChevronUp as S, Clock as C, Download as w, Eye as T, GitBranch as E, Loader2 as D, Package as O, Search as k, XCircle as A } from "lucide-react";
16
+ import { jsx as j, jsxs as M } from "react/jsx-runtime";
17
+ import { useI18n as N } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
17
18
  // src/devportal/pages/AdminReviewPage.tsx
18
- var N = {
19
+ var P = {
19
20
  NODE: "Node package",
20
21
  WORKFLOW: "Workflow bundle"
21
- }, P = ({ appType: e, packageUrl: t, packageSize: n, tr: r }) => {
22
- let i = N[e];
23
- return i ? /* @__PURE__ */ j("div", {
22
+ }, F = ({ appType: e, packageUrl: t, packageSize: n, tr: r }) => {
23
+ let i = P[e];
24
+ return i ? /* @__PURE__ */ M("div", {
24
25
  className: "rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle p-3 space-y-2",
25
- children: [/* @__PURE__ */ j("div", {
26
+ children: [/* @__PURE__ */ M("div", {
26
27
  className: "flex items-center gap-2 text-xs font-medium text-status-warning-text",
27
- children: [/* @__PURE__ */ A(D, {
28
+ children: [/* @__PURE__ */ j(O, {
28
29
  size: 13,
29
30
  className: "flex-shrink-0"
30
31
  }), r("devportal.zipVerificationRequired", "ZIP verification required — download and test before approving")]
31
- }), t ? /* @__PURE__ */ j("a", {
32
+ }), t ? /* @__PURE__ */ M("a", {
32
33
  href: t,
33
34
  download: !0,
34
35
  target: "_blank",
35
36
  rel: "noopener noreferrer",
36
37
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-3 py-1.5 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
37
38
  children: [
38
- /* @__PURE__ */ A(C, { size: 14 }),
39
+ /* @__PURE__ */ j(w, { size: 14 }),
39
40
  r("devportal.download", "Download"),
40
41
  " ",
41
42
  i,
42
- n && /* @__PURE__ */ j("span", {
43
+ n && /* @__PURE__ */ M("span", {
43
44
  className: "opacity-70 text-xs",
44
45
  children: [
45
46
  "(",
@@ -48,61 +49,62 @@ var N = {
48
49
  ]
49
50
  })
50
51
  ]
51
- }) : /* @__PURE__ */ j("p", {
52
+ }) : /* @__PURE__ */ M("p", {
52
53
  className: "text-xs text-status-error-text flex items-center gap-1.5",
53
- children: [/* @__PURE__ */ A(v, { size: 12 }), r("devportal.noZipUploaded", "No ZIP uploaded — developer must upload before this can be approved")]
54
+ children: [/* @__PURE__ */ j(y, { size: 12 }), r("devportal.noZipUploaded", "No ZIP uploaded — developer must upload before this can be approved")]
54
55
  })]
55
56
  }) : null;
56
- }, F = ({ app: e, onApprove: t, onReject: n, processing: r, hasPendingVersions: i }) => {
57
- let { navigate: o, basePath: s } = d(), { t: c } = M(), l = (e, t) => {
57
+ }, I = ({ app: e, onApprove: t, onReject: n, processing: r, hasPendingVersions: i }) => {
58
+ let { navigate: o, basePath: s } = d(), { t: c } = N(), l = (e, t) => {
58
59
  let n = c(e);
59
60
  return n === e ? t : n;
60
- }, [u, f] = _(!1), [m, v] = _(""), S = h(g.APP_APPROVE), D = h(g.APP_REJECT), { data: O } = a({
61
+ }, [u, f] = v(!1), [m, y] = v(""), C = g(h.APP_APPROVE), O = g(h.APP_REJECT), { data: k } = a({
61
62
  variables: { id: e.id },
62
63
  skip: !u,
63
64
  fetchPolicy: "cache-first"
64
- }), F = O?.application?.versions?.edges?.[0]?.node;
65
- return /* @__PURE__ */ j("div", {
65
+ }), I = k?.application?.versions?.edges?.[0]?.node;
66
+ return /* @__PURE__ */ M("div", {
66
67
  className: "rounded-card border border-border-seam bg-bg-surface overflow-hidden",
67
- children: [/* @__PURE__ */ j("div", {
68
+ children: [/* @__PURE__ */ M("div", {
68
69
  className: "flex items-center gap-4 p-4",
69
70
  children: [
70
- e.iconUrl ? /* @__PURE__ */ A("img", {
71
+ /* @__PURE__ */ j(_, {
71
72
  src: e.iconUrl,
72
73
  alt: e.name,
73
- className: "h-12 w-12 rounded-lg object-cover flex-shrink-0"
74
- }) : /* @__PURE__ */ A("div", {
75
- className: "h-12 w-12 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0",
76
- children: /* @__PURE__ */ A("span", {
77
- className: "text-lg font-bold text-text-secondary",
78
- children: e.name.charAt(0).toUpperCase()
74
+ className: "h-12 w-12 rounded-lg object-cover flex-shrink-0",
75
+ fallback: /* @__PURE__ */ j("div", {
76
+ className: "h-12 w-12 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0",
77
+ children: /* @__PURE__ */ j("span", {
78
+ className: "text-lg font-bold text-text-secondary",
79
+ children: e.name.charAt(0).toUpperCase()
80
+ })
79
81
  })
80
82
  }),
81
- /* @__PURE__ */ j("div", {
83
+ /* @__PURE__ */ M("div", {
82
84
  className: "flex-1 min-w-0",
83
85
  children: [
84
- /* @__PURE__ */ j("div", {
86
+ /* @__PURE__ */ M("div", {
85
87
  className: "flex items-center gap-2",
86
88
  children: [
87
- /* @__PURE__ */ A("h3", {
89
+ /* @__PURE__ */ j("h3", {
88
90
  className: "font-semibold truncate",
89
91
  children: e.name
90
92
  }),
91
- /* @__PURE__ */ A("span", {
93
+ /* @__PURE__ */ j("span", {
92
94
  className: "inline-flex items-center rounded-full bg-status-warning-bg-subtle px-2 py-0.5 text-xs font-medium text-status-warning-text",
93
95
  children: e.status
94
96
  }),
95
- /* @__PURE__ */ A("span", {
97
+ /* @__PURE__ */ j("span", {
96
98
  className: "inline-flex items-center rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary",
97
99
  children: e.appType.replace(/_/g, " ")
98
100
  })
99
101
  ]
100
102
  }),
101
- /* @__PURE__ */ A("p", {
103
+ /* @__PURE__ */ j("p", {
102
104
  className: "text-sm text-text-secondary truncate",
103
105
  children: e.shortDescription ?? e.description ?? l("devportal.noDescription", "No description")
104
106
  }),
105
- /* @__PURE__ */ j("p", {
107
+ /* @__PURE__ */ M("p", {
106
108
  className: "text-xs text-text-secondary mt-0.5",
107
109
  children: [
108
110
  l("devportal.submitted", "Submitted"),
@@ -117,183 +119,183 @@ var N = {
117
119
  })
118
120
  ]
119
121
  }),
120
- /* @__PURE__ */ j("div", {
122
+ /* @__PURE__ */ M("div", {
121
123
  className: "flex items-center gap-2 flex-shrink-0",
122
- children: [/* @__PURE__ */ j("button", {
124
+ children: [/* @__PURE__ */ M("button", {
123
125
  onClick: () => o?.(`${s}/apps/${e.id}`),
124
126
  className: "inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm hover:bg-bg-sunken",
125
127
  title: l("devportal.viewAppDetails", "View app details"),
126
- children: [/* @__PURE__ */ A(w, { size: 14 }), l("devportal.view", "View")]
127
- }), /* @__PURE__ */ j("button", {
128
+ children: [/* @__PURE__ */ j(T, { size: 14 }), l("devportal.view", "View")]
129
+ }), /* @__PURE__ */ M("button", {
128
130
  onClick: () => f((e) => !e),
129
131
  className: "inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm hover:bg-bg-sunken",
130
- children: [A(u ? x : b, { size: 14 }), l("devportal.review", "Review")]
132
+ children: [j(u ? S : x, { size: 14 }), l("devportal.review", "Review")]
131
133
  })]
132
134
  })
133
135
  ]
134
- }), u && /* @__PURE__ */ j("div", {
136
+ }), u && /* @__PURE__ */ M("div", {
135
137
  className: "border-t bg-bg-sunken/30 p-4 space-y-4",
136
138
  children: [
137
- i && /* @__PURE__ */ j("div", {
139
+ i && /* @__PURE__ */ M("div", {
138
140
  className: "flex items-start gap-2 rounded-md border border-status-warning-bg bg-status-warning-bg-subtle px-3 py-2.5 text-xs text-status-warning-text",
139
- children: [/* @__PURE__ */ A(T, {
141
+ children: [/* @__PURE__ */ j(E, {
140
142
  size: 14,
141
143
  className: "mt-0.5 shrink-0",
142
144
  "aria-hidden": "true"
143
- }), /* @__PURE__ */ j("span", { children: [
145
+ }), /* @__PURE__ */ M("span", { children: [
144
146
  "This app has a pending version. Approve the version in the",
145
147
  " ",
146
- /* @__PURE__ */ A("strong", { children: "Version Updates" }),
148
+ /* @__PURE__ */ j("strong", { children: "Version Updates" }),
147
149
  " section below before approving the app — the version must be live before the app can go public."
148
150
  ] })]
149
151
  }),
150
- e.reviewNotes && /* @__PURE__ */ j("div", {
152
+ e.reviewNotes && /* @__PURE__ */ M("div", {
151
153
  className: "rounded-md border bg-bg-surface p-3",
152
- children: [/* @__PURE__ */ A("p", {
154
+ children: [/* @__PURE__ */ j("p", {
153
155
  className: "text-xs font-medium text-text-secondary mb-1",
154
156
  children: l("devportal.developerNotes", "Developer Notes")
155
- }), /* @__PURE__ */ A("p", {
157
+ }), /* @__PURE__ */ j("p", {
156
158
  className: "text-sm",
157
159
  children: e.reviewNotes
158
160
  })]
159
161
  }),
160
- /* @__PURE__ */ j("div", {
162
+ /* @__PURE__ */ M("div", {
161
163
  className: "grid grid-cols-2 gap-3 text-sm",
162
164
  children: [
163
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ j("span", {
165
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ M("span", {
164
166
  className: "text-text-secondary",
165
167
  children: [
166
168
  l("devportal.category", "Category"),
167
169
  ":",
168
170
  " "
169
171
  ]
170
- }), /* @__PURE__ */ A("span", { children: e.category ?? "—" })] }),
171
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ j("span", {
172
+ }), /* @__PURE__ */ j("span", { children: e.category ?? "—" })] }),
173
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ M("span", {
172
174
  className: "text-text-secondary",
173
175
  children: [
174
176
  l("devportal.pricing", "Pricing"),
175
177
  ":",
176
178
  " "
177
179
  ]
178
- }), /* @__PURE__ */ A("span", { children: e.pricingType ?? "FREE" })] }),
179
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ j("span", {
180
+ }), /* @__PURE__ */ j("span", { children: e.pricingType ?? "FREE" })] }),
181
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ M("span", {
180
182
  className: "text-text-secondary",
181
183
  children: [
182
184
  l("devportal.website", "Website"),
183
185
  ":",
184
186
  " "
185
187
  ]
186
- }), e.websiteUrl ? /* @__PURE__ */ A("a", {
188
+ }), e.websiteUrl ? /* @__PURE__ */ j("a", {
187
189
  href: e.websiteUrl,
188
190
  target: "_blank",
189
191
  rel: "noopener noreferrer",
190
192
  className: "text-primary underline hover:no-underline",
191
193
  children: l("devportal.link", "Link")
192
- }) : /* @__PURE__ */ A("span", { children: "—" })] }),
193
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ j("span", {
194
+ }) : /* @__PURE__ */ j("span", { children: "—" })] }),
195
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ M("span", {
194
196
  className: "text-text-secondary",
195
197
  children: [
196
198
  l("devportal.privacyPolicy", "Privacy Policy"),
197
199
  ":",
198
200
  " "
199
201
  ]
200
- }), e.privacyPolicyUrl ? /* @__PURE__ */ A("a", {
202
+ }), e.privacyPolicyUrl ? /* @__PURE__ */ j("a", {
201
203
  href: e.privacyPolicyUrl,
202
204
  target: "_blank",
203
205
  rel: "noopener noreferrer",
204
206
  className: "text-primary underline hover:no-underline",
205
207
  children: l("devportal.link", "Link")
206
- }) : /* @__PURE__ */ A("span", {
208
+ }) : /* @__PURE__ */ j("span", {
207
209
  className: "text-status-error-text",
208
210
  children: l("devportal.missing", "Missing")
209
211
  })] })
210
212
  ]
211
213
  }),
212
- F && /* @__PURE__ */ j("div", {
214
+ I && /* @__PURE__ */ M("div", {
213
215
  className: "rounded-md border bg-bg-surface p-3 space-y-3",
214
216
  children: [
215
- /* @__PURE__ */ j("p", {
217
+ /* @__PURE__ */ M("p", {
216
218
  className: "text-xs font-medium text-text-secondary",
217
219
  children: [
218
220
  l("devportal.latestVersion", "Latest Version"),
219
221
  ":",
220
222
  " ",
221
- /* @__PURE__ */ A("span", {
223
+ /* @__PURE__ */ j("span", {
222
224
  className: "font-mono text-text-primary",
223
- children: F.version
225
+ children: I.version
224
226
  })
225
227
  ]
226
228
  }),
227
- N[e.appType] ? /* @__PURE__ */ A(P, {
229
+ P[e.appType] ? /* @__PURE__ */ j(F, {
228
230
  appType: e.appType,
229
- packageUrl: F.packageUrl,
230
- packageSize: F.packageSize,
231
+ packageUrl: I.packageUrl,
232
+ packageSize: I.packageSize,
231
233
  tr: l
232
- }) : F.packageUrl && /* @__PURE__ */ A("div", {
234
+ }) : I.packageUrl && /* @__PURE__ */ j("div", {
233
235
  className: "flex flex-wrap gap-2",
234
- children: /* @__PURE__ */ j("a", {
235
- href: F.packageUrl,
236
+ children: /* @__PURE__ */ M("a", {
237
+ href: I.packageUrl,
236
238
  download: !0,
237
239
  target: "_blank",
238
240
  rel: "noopener noreferrer",
239
241
  className: "inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm hover:bg-bg-sunken",
240
242
  children: [
241
- /* @__PURE__ */ A(C, { size: 14 }),
243
+ /* @__PURE__ */ j(w, { size: 14 }),
242
244
  l("devportal.downloadPackage", "Download Package"),
243
- F.packageSize && /* @__PURE__ */ j("span", {
245
+ I.packageSize && /* @__PURE__ */ M("span", {
244
246
  className: "text-text-secondary text-xs ml-1",
245
247
  children: [
246
248
  "(",
247
- F.packageSize,
249
+ I.packageSize,
248
250
  ")"
249
251
  ]
250
252
  })
251
253
  ]
252
254
  })
253
255
  }),
254
- F.manifest && /* @__PURE__ */ A(p, {
255
- manifest: F.manifest,
256
+ I.manifest && /* @__PURE__ */ j(p, {
257
+ manifest: I.manifest,
256
258
  tr: l
257
259
  })
258
260
  ]
259
261
  }),
260
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("label", {
262
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("label", {
261
263
  className: "text-sm font-medium",
262
264
  children: l("devportal.reviewNotes", "Review Notes")
263
- }), /* @__PURE__ */ A("textarea", {
265
+ }), /* @__PURE__ */ j("textarea", {
264
266
  value: m,
265
- onChange: (e) => v(e.target.value),
267
+ onChange: (e) => y(e.target.value),
266
268
  placeholder: l("devportal.reviewNotesPlaceholder", "Add feedback for the developer (required for rejection)..."),
267
269
  rows: 3,
268
270
  className: "mt-1 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm ring-offset-background placeholder:text-text-secondary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] resize-none"
269
271
  })] }),
270
- /* @__PURE__ */ j("div", {
272
+ /* @__PURE__ */ M("div", {
271
273
  className: "flex gap-3",
272
- children: [/* @__PURE__ */ j("button", {
274
+ children: [/* @__PURE__ */ M("button", {
273
275
  onClick: () => t(e.id, m),
274
- disabled: r || !S.allowed,
275
- "aria-disabled": r || !S.allowed,
276
- title: S.allowed ? void 0 : l("devportal.common.noPermission", "You do not have permission to perform this action"),
276
+ disabled: r || !C.allowed,
277
+ "aria-disabled": r || !C.allowed,
278
+ title: C.allowed ? void 0 : l("devportal.common.noPermission", "You do not have permission to perform this action"),
277
279
  className: "inline-flex items-center gap-2 rounded-md bg-status-success-bg px-4 py-2 text-sm font-medium text-white hover:bg-status-success-bg/90 disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
278
- children: [r ? /* @__PURE__ */ A(E, {
280
+ children: [r ? /* @__PURE__ */ j(D, {
279
281
  size: 14,
280
282
  className: "animate-spin",
281
283
  "aria-hidden": "true"
282
- }) : /* @__PURE__ */ A(y, {
284
+ }) : /* @__PURE__ */ j(b, {
283
285
  size: 14,
284
286
  "aria-hidden": "true"
285
287
  }), l("devportal.approve", "Approve")]
286
- }), /* @__PURE__ */ j("button", {
288
+ }), /* @__PURE__ */ M("button", {
287
289
  onClick: () => n(e.id, m),
288
- disabled: r || !m.trim() || !D.allowed,
289
- "aria-disabled": r || !m.trim() || !D.allowed,
290
+ disabled: r || !m.trim() || !O.allowed,
291
+ "aria-disabled": r || !m.trim() || !O.allowed,
290
292
  className: "inline-flex items-center gap-2 rounded-md bg-status-error-bg px-4 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg/90 disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
291
- title: D.allowed ? m.trim() ? void 0 : l("devportal.notesRequiredForRejection", "Notes required for rejection") : l("devportal.common.noPermission", "You do not have permission to perform this action"),
292
- children: [r ? /* @__PURE__ */ A(E, {
293
+ title: O.allowed ? m.trim() ? void 0 : l("devportal.notesRequiredForRejection", "Notes required for rejection") : l("devportal.common.noPermission", "You do not have permission to perform this action"),
294
+ children: [r ? /* @__PURE__ */ j(D, {
293
295
  size: 14,
294
296
  className: "animate-spin",
295
297
  "aria-hidden": "true"
296
- }) : /* @__PURE__ */ A(k, {
298
+ }) : /* @__PURE__ */ j(A, {
297
299
  size: 14,
298
300
  "aria-hidden": "true"
299
301
  }), l("devportal.reject", "Reject")]
@@ -302,35 +304,36 @@ var N = {
302
304
  ]
303
305
  })]
304
306
  });
305
- }, I = ({ app: e, onApproveVersion: t, onRejectVersion: n, processingVersionIds: r }) => {
306
- let { navigate: i, basePath: a } = d(), { t: o } = M(), s = (e, t) => {
307
+ }, L = ({ app: e, onApproveVersion: t, onRejectVersion: n, processingVersionIds: r }) => {
308
+ let { navigate: i, basePath: a } = d(), { t: o } = N(), s = (e, t) => {
307
309
  let n = o(e);
308
310
  return n === e ? t : n;
309
- }, [c, l] = _(!1), u = e.versions.edges.map((e) => e.node).filter((e) => e.status === "pending_review");
310
- return u.length === 0 ? null : /* @__PURE__ */ j("div", {
311
+ }, [c, l] = v(!1), u = e.versions.edges.map((e) => e.node).filter((e) => e.status === "pending_review");
312
+ return u.length === 0 ? null : /* @__PURE__ */ M("div", {
311
313
  className: "rounded-card border border-border-seam bg-bg-surface overflow-hidden",
312
- children: [/* @__PURE__ */ j("div", {
314
+ children: [/* @__PURE__ */ M("div", {
313
315
  className: "flex items-center gap-4 p-4",
314
316
  children: [
315
- e.iconUrl ? /* @__PURE__ */ A("img", {
317
+ /* @__PURE__ */ j(_, {
316
318
  src: e.iconUrl,
317
319
  alt: e.name,
318
- className: "h-12 w-12 rounded-lg object-cover flex-shrink-0"
319
- }) : /* @__PURE__ */ A("div", {
320
- className: "h-12 w-12 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0",
321
- children: /* @__PURE__ */ A("span", {
322
- className: "text-lg font-bold text-text-secondary",
323
- children: e.name.charAt(0).toUpperCase()
320
+ className: "h-12 w-12 rounded-lg object-cover flex-shrink-0",
321
+ fallback: /* @__PURE__ */ j("div", {
322
+ className: "h-12 w-12 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0",
323
+ children: /* @__PURE__ */ j("span", {
324
+ className: "text-lg font-bold text-text-secondary",
325
+ children: e.name.charAt(0).toUpperCase()
326
+ })
324
327
  })
325
328
  }),
326
- /* @__PURE__ */ j("div", {
329
+ /* @__PURE__ */ M("div", {
327
330
  className: "flex-1 min-w-0",
328
- children: [/* @__PURE__ */ j("div", {
331
+ children: [/* @__PURE__ */ M("div", {
329
332
  className: "flex items-center gap-2",
330
- children: [/* @__PURE__ */ A("h3", {
333
+ children: [/* @__PURE__ */ j("h3", {
331
334
  className: "font-semibold truncate",
332
335
  children: e.name
333
- }), /* @__PURE__ */ j("span", {
336
+ }), /* @__PURE__ */ M("span", {
334
337
  className: "inline-flex items-center rounded-full bg-status-info-bg-subtle px-2 py-0.5 text-xs font-medium text-status-info-text",
335
338
  children: [
336
339
  u.length,
@@ -339,27 +342,27 @@ var N = {
339
342
  " pending"
340
343
  ]
341
344
  })]
342
- }), /* @__PURE__ */ A("p", {
345
+ }), /* @__PURE__ */ j("p", {
343
346
  className: "text-sm text-text-secondary truncate",
344
347
  children: e.shortDescription ?? e.description ?? s("devportal.noDescription", "No description")
345
348
  })]
346
349
  }),
347
- /* @__PURE__ */ j("div", {
350
+ /* @__PURE__ */ M("div", {
348
351
  className: "flex items-center gap-2 flex-shrink-0",
349
- children: [/* @__PURE__ */ j("button", {
352
+ children: [/* @__PURE__ */ M("button", {
350
353
  onClick: () => i?.(`${a}/apps/${e.id}`),
351
354
  className: "inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm hover:bg-bg-sunken",
352
- children: [/* @__PURE__ */ A(w, { size: 14 }), s("devportal.view", "View")]
353
- }), /* @__PURE__ */ j("button", {
355
+ children: [/* @__PURE__ */ j(T, { size: 14 }), s("devportal.view", "View")]
356
+ }), /* @__PURE__ */ M("button", {
354
357
  onClick: () => l((e) => !e),
355
358
  className: "inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm hover:bg-bg-sunken",
356
- children: [A(c ? x : b, { size: 14 }), s("devportal.review", "Review")]
359
+ children: [j(c ? S : x, { size: 14 }), s("devportal.review", "Review")]
357
360
  })]
358
361
  })
359
362
  ]
360
- }), c && /* @__PURE__ */ A("div", {
363
+ }), c && /* @__PURE__ */ j("div", {
361
364
  className: "border-t bg-bg-sunken/30 p-4 space-y-4",
362
- children: u.map((i) => /* @__PURE__ */ A(L, {
365
+ children: u.map((i) => /* @__PURE__ */ j(R, {
363
366
  version: i,
364
367
  appId: e.id,
365
368
  appType: e.appType,
@@ -370,27 +373,27 @@ var N = {
370
373
  }, i.id))
371
374
  })]
372
375
  });
373
- }, L = ({ version: e, appId: t, appType: n, onApprove: r, onReject: i, processing: a, tr: o }) => {
374
- let [s, c] = _(""), l = h(g.APP_APPROVE), u = h(g.APP_REJECT);
375
- return /* @__PURE__ */ j("div", {
376
+ }, R = ({ version: e, appId: t, appType: n, onApprove: r, onReject: i, processing: a, tr: o }) => {
377
+ let [s, c] = v(""), l = g(h.APP_APPROVE), u = g(h.APP_REJECT);
378
+ return /* @__PURE__ */ M("div", {
376
379
  className: "rounded-md border bg-bg-surface p-4 space-y-3",
377
380
  children: [
378
- /* @__PURE__ */ j("div", {
381
+ /* @__PURE__ */ M("div", {
379
382
  className: "flex items-center gap-3",
380
383
  children: [
381
- /* @__PURE__ */ A(T, {
384
+ /* @__PURE__ */ j(E, {
382
385
  size: 14,
383
386
  className: "text-text-secondary flex-shrink-0"
384
387
  }),
385
- /* @__PURE__ */ A("span", {
388
+ /* @__PURE__ */ j("span", {
386
389
  className: "font-mono font-semibold text-sm",
387
390
  children: e.version
388
391
  }),
389
- e.isLatest && /* @__PURE__ */ A("span", {
392
+ e.isLatest && /* @__PURE__ */ j("span", {
390
393
  className: "inline-flex items-center rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary",
391
394
  children: "Latest"
392
395
  }),
393
- /* @__PURE__ */ j("span", {
396
+ /* @__PURE__ */ M("span", {
394
397
  className: "text-xs text-text-secondary ml-auto",
395
398
  children: [
396
399
  o("devportal.submitted", "Submitted"),
@@ -405,27 +408,27 @@ var N = {
405
408
  })
406
409
  ]
407
410
  }),
408
- e.releaseNotes && /* @__PURE__ */ A("p", {
411
+ e.releaseNotes && /* @__PURE__ */ j("p", {
409
412
  className: "text-sm text-text-secondary",
410
413
  children: e.releaseNotes
411
414
  }),
412
- N[n] ? /* @__PURE__ */ A(P, {
415
+ P[n] ? /* @__PURE__ */ j(F, {
413
416
  appType: n,
414
417
  packageUrl: e.packageUrl,
415
418
  packageSize: e.packageSize,
416
419
  tr: o
417
- }) : e.packageUrl && /* @__PURE__ */ A("div", {
420
+ }) : e.packageUrl && /* @__PURE__ */ j("div", {
418
421
  className: "flex flex-wrap gap-2",
419
- children: /* @__PURE__ */ j("a", {
422
+ children: /* @__PURE__ */ M("a", {
420
423
  href: e.packageUrl,
421
424
  download: !0,
422
425
  target: "_blank",
423
426
  rel: "noopener noreferrer",
424
427
  className: "inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm hover:bg-bg-sunken",
425
428
  children: [
426
- /* @__PURE__ */ A(C, { size: 14 }),
429
+ /* @__PURE__ */ j(w, { size: 14 }),
427
430
  o("devportal.downloadPackage", "Download Package"),
428
- e.packageSize && /* @__PURE__ */ j("span", {
431
+ e.packageSize && /* @__PURE__ */ M("span", {
429
432
  className: "text-text-secondary text-xs ml-1",
430
433
  children: [
431
434
  "(",
@@ -436,62 +439,62 @@ var N = {
436
439
  ]
437
440
  })
438
441
  }),
439
- n === "NODE" && /* @__PURE__ */ j("div", {
442
+ n === "NODE" && /* @__PURE__ */ M("div", {
440
443
  className: "space-y-1",
441
- children: [/* @__PURE__ */ A("p", {
444
+ children: [/* @__PURE__ */ j("p", {
442
445
  className: "text-sm font-medium",
443
446
  children: o("devportal.packageValidation.title", "Package validation")
444
- }), /* @__PURE__ */ A(m, {
447
+ }), /* @__PURE__ */ j(m, {
445
448
  metadata: e.metadata,
446
449
  defaultExpanded: !0
447
450
  })]
448
451
  }),
449
- e.manifest && /* @__PURE__ */ A(p, {
452
+ e.manifest && /* @__PURE__ */ j(p, {
450
453
  manifest: e.manifest,
451
454
  tr: o
452
455
  }),
453
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("label", {
456
+ /* @__PURE__ */ M("div", { children: [/* @__PURE__ */ j("label", {
454
457
  className: "text-sm font-medium",
455
458
  children: o("devportal.reviewNotes", "Review Notes")
456
- }), /* @__PURE__ */ A("textarea", {
459
+ }), /* @__PURE__ */ j("textarea", {
457
460
  value: s,
458
461
  onChange: (e) => c(e.target.value),
459
462
  placeholder: o("devportal.reviewNotesPlaceholder", "Add feedback for the developer (required for rejection)..."),
460
463
  rows: 2,
461
464
  className: "mt-1 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm ring-offset-background placeholder:text-text-secondary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] resize-none"
462
465
  })] }),
463
- /* @__PURE__ */ j("div", {
466
+ /* @__PURE__ */ M("div", {
464
467
  className: "flex gap-3",
465
- children: [/* @__PURE__ */ j("button", {
468
+ children: [/* @__PURE__ */ M("button", {
466
469
  onClick: () => r(e.id, t, s),
467
470
  disabled: a || !l.allowed,
468
471
  "aria-disabled": a || !l.allowed,
469
472
  className: "inline-flex items-center gap-2 rounded-md bg-status-success-bg px-4 py-2 text-sm font-medium text-white hover:bg-status-success-bg/90 disabled:opacity-50 disabled:cursor-not-allowed",
470
- children: [a ? /* @__PURE__ */ A(E, {
473
+ children: [a ? /* @__PURE__ */ j(D, {
471
474
  size: 14,
472
475
  className: "animate-spin"
473
- }) : /* @__PURE__ */ A(y, { size: 14 }), o("devportal.approveVersion", "Approve Version")]
474
- }), /* @__PURE__ */ j("button", {
476
+ }) : /* @__PURE__ */ j(b, { size: 14 }), o("devportal.approveVersion", "Approve Version")]
477
+ }), /* @__PURE__ */ M("button", {
475
478
  onClick: () => i(e.id, t, s),
476
479
  disabled: a || !s.trim() || !u.allowed,
477
480
  "aria-disabled": a || !s.trim() || !u.allowed,
478
481
  className: "inline-flex items-center gap-2 rounded-md bg-status-error-bg px-4 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg/90 disabled:opacity-50 disabled:cursor-not-allowed",
479
- children: [a ? /* @__PURE__ */ A(E, {
482
+ children: [a ? /* @__PURE__ */ j(D, {
480
483
  size: 14,
481
484
  className: "animate-spin"
482
- }) : /* @__PURE__ */ A(k, { size: 14 }), o("devportal.rejectVersion", "Reject Version")]
485
+ }) : /* @__PURE__ */ j(A, { size: 14 }), o("devportal.rejectVersion", "Reject Version")]
483
486
  })]
484
487
  })
485
488
  ]
486
489
  });
487
- }, R = () => {
488
- let { t: a } = M(), d = (e, t) => {
490
+ }, z = () => {
491
+ let { t: a } = N(), d = (e, t) => {
489
492
  let n = a(e);
490
493
  return n === e ? t : n;
491
- }, [p, m] = _(""), [h, b] = _(/* @__PURE__ */ new Set()), [x, C] = _(/* @__PURE__ */ new Set()), [w, D] = _(null), [k, N] = _(null), P = (e) => b((t) => new Set(t).add(e)), L = (e) => b((t) => {
494
+ }, [p, m] = v(""), [g, _] = v(/* @__PURE__ */ new Set()), [x, S] = v(/* @__PURE__ */ new Set()), [w, T] = v(null), [O, A] = v(null), P = (e) => _((t) => new Set(t).add(e)), F = (e) => _((t) => {
492
495
  let n = new Set(t);
493
496
  return n.delete(e), n;
494
- }), R = (e) => C((t) => new Set(t).add(e)), z = (e) => C((t) => {
497
+ }), R = (e) => S((t) => new Set(t).add(e)), z = (e) => S((t) => {
495
498
  let n = new Set(t);
496
499
  return n.delete(e), n;
497
500
  }), { data: B, loading: V, error: H, refetch: U } = o({
@@ -504,98 +507,98 @@ var N = {
504
507
  variables: { limit: 100 },
505
508
  fetchPolicy: "cache-and-network"
506
509
  }), [K] = r(), [q] = c(), [J] = i(), [Y] = l(), X = B?.applications?.edges?.map((e) => e.node) ?? [], Z = W?.applicationsWithPendingVersions?.edges?.map((e) => e.node) ?? [], Q = new Set(Z.map((e) => e.id)), $ = p ? X.filter((e) => e.name.toLowerCase().includes(p.toLowerCase()) || (e.shortDescription ?? "").toLowerCase().includes(p.toLowerCase())) : X, ee = async (e, t) => {
507
- P(e), D(null), N(null);
510
+ P(e), T(null), A(null);
508
511
  try {
509
512
  let n = await K({ variables: {
510
513
  id: e,
511
514
  notes: t || void 0
512
515
  } });
513
516
  if (n.error) throw n.error;
514
- N(d("devportal.applicationApprovedSuccess", "Application approved successfully.")), await U();
517
+ A(d("devportal.applicationApprovedSuccess", "Application approved successfully.")), await U();
515
518
  } catch (e) {
516
- D(e instanceof Error ? e.message : d("devportal.failedToApproveApplication", "Failed to approve application"));
519
+ T(e instanceof Error ? e.message : d("devportal.failedToApproveApplication", "Failed to approve application"));
517
520
  } finally {
518
- L(e);
521
+ F(e);
519
522
  }
520
523
  }, te = async (e, t) => {
521
524
  if (t.trim()) {
522
- P(e), D(null), N(null);
525
+ P(e), T(null), A(null);
523
526
  try {
524
527
  let n = await q({ variables: {
525
528
  id: e,
526
529
  notes: t
527
530
  } });
528
531
  if (n.error) throw n.error;
529
- N(d("devportal.applicationRejected", "Application rejected.")), await U();
532
+ A(d("devportal.applicationRejected", "Application rejected.")), await U();
530
533
  } catch (e) {
531
- D(e instanceof Error ? e.message : d("devportal.failedToRejectApplication", "Failed to reject application"));
534
+ T(e instanceof Error ? e.message : d("devportal.failedToRejectApplication", "Failed to reject application"));
532
535
  } finally {
533
- L(e);
536
+ F(e);
534
537
  }
535
538
  }
536
539
  }, ne = async (e, t, n) => {
537
- R(e), D(null), N(null);
540
+ R(e), T(null), A(null);
538
541
  try {
539
542
  let t = await J({ variables: {
540
543
  id: e,
541
544
  notes: n || void 0
542
545
  } });
543
546
  if (t.error) throw t.error;
544
- N(d("devportal.versionApprovedSuccess", "Version approved and published.")), await G();
547
+ A(d("devportal.versionApprovedSuccess", "Version approved and published.")), await G();
545
548
  } catch (e) {
546
- D(e instanceof Error ? e.message : d("devportal.failedToApproveVersion", "Failed to approve version"));
549
+ T(e instanceof Error ? e.message : d("devportal.failedToApproveVersion", "Failed to approve version"));
547
550
  } finally {
548
551
  z(e);
549
552
  }
550
553
  }, re = async (e, t, n) => {
551
554
  if (n.trim()) {
552
- R(e), D(null), N(null);
555
+ R(e), T(null), A(null);
553
556
  try {
554
557
  let t = await Y({ variables: {
555
558
  id: e,
556
559
  reason: n
557
560
  } });
558
561
  if (t.error) throw t.error;
559
- N(d("devportal.versionRejectedSuccess", "Version rejected and returned to draft.")), await G();
562
+ A(d("devportal.versionRejectedSuccess", "Version rejected and returned to draft.")), await G();
560
563
  } catch (e) {
561
- D(e instanceof Error ? e.message : d("devportal.failedToRejectVersion", "Failed to reject version"));
564
+ T(e instanceof Error ? e.message : d("devportal.failedToRejectVersion", "Failed to reject version"));
562
565
  } finally {
563
566
  z(e);
564
567
  }
565
568
  }
566
569
  };
567
- return V && !B ? /* @__PURE__ */ A(e, {
570
+ return V && !B ? /* @__PURE__ */ j(e, {
568
571
  title: d("devportal.appReviewQueue", "App Review Queue"),
569
572
  description: d("devportal.appReviewQueueDescription", "Review submitted applications for approval"),
570
- children: /* @__PURE__ */ A("div", {
573
+ children: /* @__PURE__ */ j("div", {
571
574
  className: "flex items-center justify-center py-12",
572
- children: /* @__PURE__ */ A(E, { className: "h-8 w-8 animate-spin text-text-secondary" })
575
+ children: /* @__PURE__ */ j(D, { className: "h-8 w-8 animate-spin text-text-secondary" })
573
576
  })
574
- }) : H ? /* @__PURE__ */ A(e, {
577
+ }) : H ? /* @__PURE__ */ j(e, {
575
578
  title: d("devportal.appReviewQueue", "App Review Queue"),
576
579
  description: d("devportal.appReviewQueueDescription", "Review submitted applications for approval"),
577
- children: /* @__PURE__ */ j("div", {
580
+ children: /* @__PURE__ */ M("div", {
578
581
  className: "rounded-lg border border-status-error-border/50 bg-status-error-bg/10 p-6 text-center",
579
582
  children: [
580
- /* @__PURE__ */ A(v, { className: "mx-auto h-8 w-8 text-status-error-text" }),
581
- /* @__PURE__ */ A("p", {
583
+ /* @__PURE__ */ j(y, { className: "mx-auto h-8 w-8 text-status-error-text" }),
584
+ /* @__PURE__ */ j("p", {
582
585
  className: "mt-2 text-sm text-text-secondary",
583
586
  children: u(H)
584
587
  }),
585
- /* @__PURE__ */ A("button", {
588
+ /* @__PURE__ */ j("button", {
586
589
  onClick: () => U(),
587
590
  className: "mt-4 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
588
591
  children: d("devportal.retry", "Retry")
589
592
  })
590
593
  ]
591
594
  })
592
- }) : /* @__PURE__ */ A(f, {
593
- permission: g.REVIEW_MANAGE,
594
- children: /* @__PURE__ */ j(e, {
595
+ }) : /* @__PURE__ */ j(f, {
596
+ permission: h.REVIEW_MANAGE,
597
+ children: /* @__PURE__ */ M(e, {
595
598
  title: d("devportal.appReviewQueue", "App Review Queue"),
596
599
  description: d("devportal.appReviewQueueFullDescription", "Review submitted applications for approval or rejection"),
597
600
  purpose: d("devportal.appReviewQueuePurpose", "The moderation queue for apps developers have submitted to the marketplace. Open each submission to check its listing, permissions, and behaviour against the guidelines, then approve it to go live or reject it with feedback."),
598
- actions: /* @__PURE__ */ A("button", {
601
+ actions: /* @__PURE__ */ j("button", {
599
602
  onClick: () => {
600
603
  U(), G();
601
604
  },
@@ -603,15 +606,15 @@ var N = {
603
606
  children: d("devportal.refresh", "Refresh")
604
607
  }),
605
608
  children: [
606
- /* @__PURE__ */ j("div", {
609
+ /* @__PURE__ */ M("div", {
607
610
  className: "flex items-center gap-6 rounded-card border border-border-seam bg-bg-surface p-4",
608
611
  children: [
609
- /* @__PURE__ */ j("div", {
612
+ /* @__PURE__ */ M("div", {
610
613
  className: "flex items-center gap-2",
611
- children: [/* @__PURE__ */ A(S, {
614
+ children: [/* @__PURE__ */ j(C, {
612
615
  size: 18,
613
616
  className: "text-status-warning-text"
614
- }), /* @__PURE__ */ j("span", {
617
+ }), /* @__PURE__ */ M("span", {
615
618
  className: "text-sm font-medium",
616
619
  children: [
617
620
  X.length,
@@ -620,12 +623,12 @@ var N = {
620
623
  ]
621
624
  })]
622
625
  }),
623
- Z.length > 0 && /* @__PURE__ */ j("div", {
626
+ Z.length > 0 && /* @__PURE__ */ M("div", {
624
627
  className: "flex items-center gap-2",
625
- children: [/* @__PURE__ */ A(T, {
628
+ children: [/* @__PURE__ */ j(E, {
626
629
  size: 18,
627
630
  className: "text-status-info-text"
628
- }), /* @__PURE__ */ j("span", {
631
+ }), /* @__PURE__ */ M("span", {
629
632
  className: "text-sm font-medium",
630
633
  children: [
631
634
  Z.length,
@@ -634,29 +637,29 @@ var N = {
634
637
  ]
635
638
  })]
636
639
  }),
637
- (h.size > 0 || x.size > 0) && /* @__PURE__ */ j("div", {
640
+ (g.size > 0 || x.size > 0) && /* @__PURE__ */ M("div", {
638
641
  className: "flex items-center gap-2 text-sm text-text-secondary",
639
- children: [/* @__PURE__ */ A(E, {
642
+ children: [/* @__PURE__ */ j(D, {
640
643
  size: 14,
641
644
  className: "animate-spin"
642
645
  }), d("devportal.processing", "Processing...")]
643
646
  })
644
647
  ]
645
648
  }),
646
- k && /* @__PURE__ */ j("div", {
649
+ O && /* @__PURE__ */ M("div", {
647
650
  className: "flex items-center gap-2 rounded-lg border border-border-subtle bg-status-success-bg-subtle px-4 py-3 text-sm text-status-success-text",
648
- children: [/* @__PURE__ */ A(y, { size: 16 }), k]
651
+ children: [/* @__PURE__ */ j(b, { size: 16 }), O]
649
652
  }),
650
- w && /* @__PURE__ */ j("div", {
653
+ w && /* @__PURE__ */ M("div", {
651
654
  className: "flex items-center gap-2 rounded-lg border border-status-error-border/50 bg-status-error-bg/10 px-4 py-3 text-sm text-status-error-text",
652
- children: [/* @__PURE__ */ A(v, { size: 16 }), w]
655
+ children: [/* @__PURE__ */ j(y, { size: 16 }), w]
653
656
  }),
654
- X.length > 0 && /* @__PURE__ */ j("div", {
657
+ X.length > 0 && /* @__PURE__ */ M("div", {
655
658
  className: "relative max-w-sm",
656
- children: [/* @__PURE__ */ A(O, {
659
+ children: [/* @__PURE__ */ j(k, {
657
660
  size: 14,
658
661
  className: "absolute left-3 top-1/2 -translate-y-1/2 text-text-secondary"
659
- }), /* @__PURE__ */ A("input", {
662
+ }), /* @__PURE__ */ j("input", {
660
663
  type: "text",
661
664
  placeholder: d("devportal.searchSubmittedApps", "Search submitted apps..."),
662
665
  value: p,
@@ -664,34 +667,34 @@ var N = {
664
667
  className: "w-full rounded-md border bg-bg-surface pl-9 pr-4 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary"
665
668
  })]
666
669
  }),
667
- /* @__PURE__ */ A(t, {
670
+ /* @__PURE__ */ j(t, {
668
671
  title: d("devportal.newAppSubmissions", "New App Submissions"),
669
- children: $.length === 0 ? /* @__PURE__ */ A(n, {
672
+ children: $.length === 0 ? /* @__PURE__ */ j(n, {
670
673
  illustration: "empty-data",
671
- icon: /* @__PURE__ */ A(y, { size: 32 }),
674
+ icon: /* @__PURE__ */ j(b, { size: 32 }),
672
675
  title: d("devportal.noAppsPendingReview", "No apps pending review"),
673
676
  description: p ? d("devportal.noAppsMatchSearch", "No apps match your search") : d("devportal.allApplicationsReviewed", "All submitted applications have been reviewed")
674
- }) : /* @__PURE__ */ A("div", {
677
+ }) : /* @__PURE__ */ j("div", {
675
678
  className: "space-y-3",
676
- children: $.map((e) => /* @__PURE__ */ A(F, {
679
+ children: $.map((e) => /* @__PURE__ */ j(I, {
677
680
  app: e,
678
681
  onApprove: ee,
679
682
  onReject: te,
680
- processing: h.has(e.id),
683
+ processing: g.has(e.id),
681
684
  hasPendingVersions: Q.has(e.id)
682
685
  }, e.id))
683
686
  })
684
687
  }),
685
- /* @__PURE__ */ A(t, {
688
+ /* @__PURE__ */ j(t, {
686
689
  title: d("devportal.versionUpdates", "Version Updates (Published Apps)"),
687
- children: Z.length === 0 ? /* @__PURE__ */ A(n, {
690
+ children: Z.length === 0 ? /* @__PURE__ */ j(n, {
688
691
  illustration: "empty-data",
689
- icon: /* @__PURE__ */ A(T, { size: 32 }),
692
+ icon: /* @__PURE__ */ j(E, { size: 32 }),
690
693
  title: d("devportal.noPendingVersions", "No pending version updates"),
691
694
  description: d("devportal.allVersionsReviewed", "All version updates from published apps have been reviewed")
692
- }) : /* @__PURE__ */ A("div", {
695
+ }) : /* @__PURE__ */ j("div", {
693
696
  className: "space-y-3",
694
- children: Z.map((e) => /* @__PURE__ */ A(I, {
697
+ children: Z.map((e) => /* @__PURE__ */ j(L, {
695
698
  app: e,
696
699
  onApproveVersion: ne,
697
700
  onRejectVersion: re,
@@ -703,6 +706,6 @@ var N = {
703
706
  })
704
707
  });
705
708
  };
706
- export { R as AdminReviewPage };
709
+ export { z as AdminReviewPage };
707
710
 
708
711
  //# sourceMappingURL=AdminReviewPage.js.map