@burdenoff/microfe-devportal 2026.609.4 → 2026.611.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 (58) hide show
  1. package/dist/devportal/DevportalRoot.js +6 -1
  2. package/dist/devportal/DevportalRoot.js.map +1 -1
  3. package/dist/devportal/DevportalRoutes.js +169 -158
  4. package/dist/devportal/DevportalRoutes.js.map +1 -1
  5. package/dist/devportal/hooks/usePackageUpload.js +120 -0
  6. package/dist/devportal/hooks/usePackageUpload.js.map +1 -0
  7. package/dist/devportal/pages/AnalyticsDashboardPage.js +73 -62
  8. package/dist/devportal/pages/AnalyticsDashboardPage.js.map +1 -1
  9. package/dist/devportal/pages/AppLogsPage.js +89 -82
  10. package/dist/devportal/pages/AppLogsPage.js.map +1 -1
  11. package/dist/devportal/pages/ApplicationDetailPage.js +948 -367
  12. package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
  13. package/dist/devportal/pages/ApplicationVersionsPage.js +56 -45
  14. package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
  15. package/dist/devportal/pages/CreateApiKeyPage.js +30 -32
  16. package/dist/devportal/pages/CreateApiKeyPage.js.map +1 -1
  17. package/dist/devportal/pages/CreateApplicationPage.js +8 -3
  18. package/dist/devportal/pages/CreateApplicationPage.js.map +1 -1
  19. package/dist/devportal/pages/CreateOAuthClientPage.js +4 -4
  20. package/dist/devportal/pages/CreateOAuthClientPage.js.map +1 -1
  21. package/dist/devportal/pages/CreateOrganizationPage.js +238 -229
  22. package/dist/devportal/pages/CreateOrganizationPage.js.map +1 -1
  23. package/dist/devportal/pages/CreateWebhookPage.js +159 -148
  24. package/dist/devportal/pages/CreateWebhookPage.js.map +1 -1
  25. package/dist/devportal/pages/DelegationsPage.js +1 -1
  26. package/dist/devportal/pages/DelegationsPage.js.map +1 -1
  27. package/dist/devportal/pages/EditApplicationPage.js +25 -17
  28. package/dist/devportal/pages/EditApplicationPage.js.map +1 -1
  29. package/dist/devportal/pages/ListingPreviewPage.js +159 -153
  30. package/dist/devportal/pages/ListingPreviewPage.js.map +1 -1
  31. package/dist/devportal/pages/OAuthClientDetailPage.js.map +1 -1
  32. package/dist/devportal/pages/OAuthClientsPage.js +2 -2
  33. package/dist/devportal/pages/OAuthClientsPage.js.map +1 -1
  34. package/dist/devportal/pages/OrganizationDetailPage.js +158 -153
  35. package/dist/devportal/pages/OrganizationDetailPage.js.map +1 -1
  36. package/dist/devportal/pages/OrganizationMembersPage.js +223 -212
  37. package/dist/devportal/pages/OrganizationMembersPage.js.map +1 -1
  38. package/dist/devportal/pages/PublishPage.js +172 -165
  39. package/dist/devportal/pages/PublishPage.js.map +1 -1
  40. package/dist/devportal/pages/ResourcesPage.js.map +1 -1
  41. package/dist/devportal/pages/RevenueDashboardPage.js +461 -0
  42. package/dist/devportal/pages/RevenueDashboardPage.js.map +1 -0
  43. package/dist/devportal/pages/SetupPage.js +186 -181
  44. package/dist/devportal/pages/SetupPage.js.map +1 -1
  45. package/dist/devportal/pages/StoreSubmissionPage.js +76 -97
  46. package/dist/devportal/pages/StoreSubmissionPage.js.map +1 -1
  47. package/dist/devportal/pages/WebhookDetailPage.js +172 -154
  48. package/dist/devportal/pages/WebhookDetailPage.js.map +1 -1
  49. package/dist/devportal/pages/WebhooksPage.js +218 -200
  50. package/dist/devportal/pages/WebhooksPage.js.map +1 -1
  51. package/dist/devportal/providers/DevportalProvider.js +16 -13
  52. package/dist/devportal/providers/DevportalProvider.js.map +1 -1
  53. package/dist/devportal/types/index.js.map +1 -1
  54. package/dist/generated/global-operations.js +334 -223
  55. package/dist/generated/global-operations.js.map +1 -1
  56. package/package.json +1 -1
  57. package/dist/devportal/pages/RevenueRedirectPage.js +0 -14
  58. package/dist/devportal/pages/RevenueRedirectPage.js.map +0 -1
@@ -5,12 +5,13 @@ import { useGetApplicationQuery as i } from "../../generated/global-operations.j
5
5
  import { PermissionGuard as a } from "../components/PermissionGuard.js";
6
6
  import "../components/index.js";
7
7
  import { DEVPORTAL_PERMISSIONS as o } from "../constants/permissions.js";
8
- import { useI18n as s } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
9
- import { CheckCircle as c, Download as l, ExternalLink as u, Eye as d, FileText as f, Globe as p, Loader2 as m, Shield as h, Star as g, Tag as _ } from "lucide-react";
10
- import { useParams as v } from "react-router-dom";
11
- import { jsx as y, jsxs as b } from "react/jsx-runtime";
8
+ import { useEffect as s } from "react";
9
+ import { useI18n as c } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
+ import { CheckCircle as l, Download as u, ExternalLink as d, Eye as f, FileText as p, Globe as m, Loader2 as h, Shield as g, Star as _, Tag as v } from "lucide-react";
11
+ import { useParams as y } from "react-router-dom";
12
+ import { jsx as b, jsxs as x } from "react/jsx-runtime";
12
13
  //#region src/devportal/pages/ListingPreviewPage.tsx
13
- var x = {
14
+ var S = {
14
15
  FREE: "Free",
15
16
  FREEMIUM: "Free with in-app purchases",
16
17
  PAID: "Paid",
@@ -18,7 +19,7 @@ var x = {
18
19
  SUBSCRIPTION: "Subscription",
19
20
  USAGE_BASED: "Usage-based pricing",
20
21
  ENTERPRISE: "Enterprise pricing"
21
- }, S = {
22
+ }, C = {
22
23
  WORKFLOW: "Workflow",
23
24
  WIDGET: "Widget",
24
25
  BOT: "Bot / Chatbot",
@@ -33,314 +34,319 @@ var x = {
33
34
  DESKTOP_APP: "Desktop App",
34
35
  CLI_TOOL: "CLI Tool",
35
36
  SERVICE: "Service"
36
- }, C = () => {
37
- let { appId: C } = v(), { navigate: w, basePath: T } = e(), { t: E } = s(), D = (e, t) => {
38
- let n = E(e);
37
+ }, w = () => {
38
+ let { appId: w } = y(), { navigate: T, basePath: E } = e(), { t: D } = c(), O = (e, t) => {
39
+ let n = D(e);
39
40
  return n === e ? t : n;
40
- }, { data: O, loading: k, error: A } = i({
41
- variables: { id: C },
42
- skip: !C,
41
+ }, { data: k, loading: A, error: j } = i({
42
+ variables: { id: w },
43
+ skip: !w,
43
44
  fetchPolicy: "cache-and-network"
44
- }), j = O?.application;
45
- if (k) return /* @__PURE__ */ y(t, {
46
- title: D("devportal.marketplacePreview", "Marketplace Preview"),
47
- description: D("devportal.loading", "Loading..."),
48
- backLink: `/apps/${C}`,
49
- backLabel: D("devportal.backToApplication", "Back to Application"),
50
- children: /* @__PURE__ */ y("div", {
45
+ }), M = k?.application;
46
+ if (s(() => {
47
+ let e = M?.name;
48
+ if (!w || !e) return;
49
+ let t = window.__breadcrumbRegistry;
50
+ return t?.register(w, e), () => t?.unregister(w);
51
+ }, [w, M?.name]), A) return /* @__PURE__ */ b(t, {
52
+ title: O("devportal.marketplacePreview", "Marketplace Preview"),
53
+ description: O("devportal.loading", "Loading..."),
54
+ backLink: `/apps/${w}`,
55
+ backLabel: O("devportal.backToApplication", "Back to Application"),
56
+ children: /* @__PURE__ */ b("div", {
51
57
  className: "flex items-center justify-center py-12",
52
- children: /* @__PURE__ */ y(m, { className: "h-8 w-8 animate-spin text-muted-foreground" })
58
+ children: /* @__PURE__ */ b(h, { className: "h-8 w-8 animate-spin text-muted-foreground" })
53
59
  })
54
60
  });
55
- if (A || !j) return /* @__PURE__ */ y(t, {
56
- title: D("devportal.marketplacePreview", "Marketplace Preview"),
57
- description: D("devportal.couldNotLoadApplication", "Could not load application"),
58
- backLink: `/apps/${C}`,
59
- backLabel: D("devportal.backToApplication", "Back to Application"),
60
- children: /* @__PURE__ */ y(r, {
61
+ if (j || !M) return /* @__PURE__ */ b(t, {
62
+ title: O("devportal.marketplacePreview", "Marketplace Preview"),
63
+ description: O("devportal.couldNotLoadApplication", "Could not load application"),
64
+ backLink: `/apps/${w}`,
65
+ backLabel: O("devportal.backToApplication", "Back to Application"),
66
+ children: /* @__PURE__ */ b(r, {
61
67
  variant: "error",
62
- title: D("devportal.failedToLoadApplication", "Failed to load application"),
63
- children: A?.message ?? D("devportal.applicationNotFound", "Application not found")
68
+ title: O("devportal.failedToLoadApplication", "Failed to load application"),
69
+ children: j?.message ?? O("devportal.applicationNotFound", "Application not found")
64
70
  })
65
71
  });
66
- let M = Array.isArray(j.screenshots) ? j.screenshots : [], N = j.status === "PUBLISHED";
67
- return /* @__PURE__ */ y(a, {
72
+ let N = Array.isArray(M.screenshots) ? M.screenshots : [], P = M.status === "PUBLISHED";
73
+ return /* @__PURE__ */ b(a, {
68
74
  permission: o.APP_READ,
69
- children: /* @__PURE__ */ b(t, {
70
- title: D("devportal.marketplacePreview", "Marketplace Preview"),
71
- description: D("devportal.marketplacePreviewDescription", "Preview how your app will appear in the marketplace"),
72
- backLink: `/apps/${C}`,
73
- backLabel: D("devportal.backToApplication", "Back to Application"),
74
- actions: N ? void 0 : /* @__PURE__ */ b("button", {
75
- onClick: () => w?.(`${T}/apps/${C}/publish`),
75
+ children: /* @__PURE__ */ x(t, {
76
+ title: O("devportal.marketplacePreview", "Marketplace Preview"),
77
+ description: O("devportal.marketplacePreviewDescription", "Preview how your app will appear in the marketplace"),
78
+ backLink: `/apps/${w}`,
79
+ backLabel: O("devportal.backToApplication", "Back to Application"),
80
+ actions: P ? void 0 : /* @__PURE__ */ x("button", {
81
+ onClick: () => T?.(`${E}/apps/${w}/publish`),
76
82
  className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90",
77
- children: [/* @__PURE__ */ y(d, { size: 16 }), D("devportal.submitForReview", "Submit for Review")]
83
+ children: [/* @__PURE__ */ b(f, { size: 16 }), O("devportal.submitForReview", "Submit for Review")]
78
84
  }),
79
85
  children: [
80
- /* @__PURE__ */ b("div", {
86
+ /* @__PURE__ */ x("div", {
81
87
  className: "flex items-center gap-2 rounded-lg border border-border-subtle bg-status-warning-bg-subtle px-4 py-3 text-sm text-status-warning-text",
82
- children: [/* @__PURE__ */ y(d, {
88
+ children: [/* @__PURE__ */ b(f, {
83
89
  size: 16,
84
90
  className: "flex-shrink-0"
85
- }), /* @__PURE__ */ y("span", { children: D("devportal.previewBannerText", "This is a preview of your marketplace listing. It shows how your app will appear to users after publication.") })]
91
+ }), /* @__PURE__ */ b("span", { children: O("devportal.previewBannerText", "This is a preview of your marketplace listing. It shows how your app will appear to users after publication.") })]
86
92
  }),
87
- /* @__PURE__ */ b("div", {
93
+ /* @__PURE__ */ x("div", {
88
94
  className: "rounded-xl border bg-card overflow-hidden",
89
95
  children: [
90
- j.bannerUrl ? /* @__PURE__ */ y("div", {
96
+ M.bannerUrl ? /* @__PURE__ */ b("div", {
91
97
  className: "h-48 w-full overflow-hidden",
92
- children: /* @__PURE__ */ y("img", {
93
- src: j.bannerUrl,
94
- alt: D("devportal.appBannerAlt", "App banner"),
98
+ children: /* @__PURE__ */ b("img", {
99
+ src: M.bannerUrl,
100
+ alt: O("devportal.appBannerAlt", "App banner"),
95
101
  className: "h-full w-full object-cover"
96
102
  })
97
- }) : /* @__PURE__ */ y("div", { className: "h-32 w-full bg-gradient-to-r from-primary/20 to-primary/5" }),
98
- /* @__PURE__ */ y("div", {
103
+ }) : /* @__PURE__ */ b("div", { className: "h-32 w-full bg-gradient-to-r from-primary/20 to-primary/5" }),
104
+ /* @__PURE__ */ b("div", {
99
105
  className: "p-6",
100
- children: /* @__PURE__ */ b("div", {
106
+ children: /* @__PURE__ */ x("div", {
101
107
  className: "flex items-start gap-5",
102
108
  children: [
103
- j.iconUrl ? /* @__PURE__ */ y("img", {
104
- src: j.iconUrl,
105
- alt: j.name,
109
+ M.iconUrl ? /* @__PURE__ */ b("img", {
110
+ src: M.iconUrl,
111
+ alt: M.name,
106
112
  className: "h-20 w-20 rounded-2xl border object-cover flex-shrink-0 shadow-sm"
107
- }) : /* @__PURE__ */ y("div", {
113
+ }) : /* @__PURE__ */ b("div", {
108
114
  className: "h-20 w-20 rounded-2xl border bg-muted flex items-center justify-center flex-shrink-0",
109
- children: /* @__PURE__ */ y("span", {
115
+ children: /* @__PURE__ */ b("span", {
110
116
  className: "text-3xl font-bold text-muted-foreground",
111
- "aria-label": D("devportal.appIconFallbackAriaLabel", "App icon"),
112
- children: j.name.charAt(0).toUpperCase()
117
+ "aria-label": O("devportal.appIconFallbackAriaLabel", "App icon"),
118
+ children: M.name.charAt(0).toUpperCase()
113
119
  })
114
120
  }),
115
- /* @__PURE__ */ b("div", {
121
+ /* @__PURE__ */ x("div", {
116
122
  className: "flex-1 min-w-0",
117
123
  children: [
118
- /* @__PURE__ */ b("div", {
124
+ /* @__PURE__ */ x("div", {
119
125
  className: "flex flex-wrap items-center gap-2",
120
126
  children: [
121
- /* @__PURE__ */ y("h1", {
127
+ /* @__PURE__ */ b("h1", {
122
128
  className: "text-2xl font-bold",
123
- children: j.name
129
+ children: M.name
124
130
  }),
125
- j.isVerified && /* @__PURE__ */ y(c, {
131
+ M.isVerified && /* @__PURE__ */ b(l, {
126
132
  size: 20,
127
133
  className: "text-primary"
128
134
  }),
129
- j.isFeatured && /* @__PURE__ */ y("span", {
135
+ M.isFeatured && /* @__PURE__ */ b("span", {
130
136
  className: "rounded-full bg-status-warning-bg-subtle px-2 py-0.5 text-xs font-medium text-status-warning-text",
131
- children: D("devportal.featured", "Featured")
137
+ children: O("devportal.featured", "Featured")
132
138
  })
133
139
  ]
134
140
  }),
135
- /* @__PURE__ */ y("p", {
141
+ /* @__PURE__ */ b("p", {
136
142
  className: "mt-1 text-muted-foreground",
137
- children: j.shortDescription ?? j.description ?? D("devportal.noDescription", "No description")
143
+ children: M.shortDescription ?? M.description ?? O("devportal.noDescription", "No description")
138
144
  }),
139
- /* @__PURE__ */ b("div", {
145
+ /* @__PURE__ */ x("div", {
140
146
  className: "mt-3 flex flex-wrap items-center gap-4 text-sm text-muted-foreground",
141
147
  children: [
142
- j.averageRating != null && /* @__PURE__ */ b("div", {
148
+ M.averageRating != null && /* @__PURE__ */ x("div", {
143
149
  className: "flex items-center gap-1",
144
150
  children: [
145
- /* @__PURE__ */ y(g, {
151
+ /* @__PURE__ */ b(_, {
146
152
  size: 14,
147
153
  className: "text-status-warning-text fill-status-warning-text"
148
154
  }),
149
- /* @__PURE__ */ y("span", {
155
+ /* @__PURE__ */ b("span", {
150
156
  className: "font-medium text-foreground",
151
- children: j.averageRating.toFixed(1)
157
+ children: M.averageRating.toFixed(1)
152
158
  }),
153
- /* @__PURE__ */ b("span", { children: [
159
+ /* @__PURE__ */ x("span", { children: [
154
160
  "(",
155
- j.reviewCount ?? 0,
161
+ M.reviewCount ?? 0,
156
162
  " ",
157
- D("devportal.reviews", "reviews"),
163
+ O("devportal.reviews", "reviews"),
158
164
  ")"
159
165
  ] })
160
166
  ]
161
167
  }),
162
- /* @__PURE__ */ b("div", {
168
+ /* @__PURE__ */ x("div", {
163
169
  className: "flex items-center gap-1",
164
- children: [/* @__PURE__ */ y(l, { size: 14 }), /* @__PURE__ */ b("span", { children: [
165
- (j.installCount ?? 0).toLocaleString(),
170
+ children: [/* @__PURE__ */ b(u, { size: 14 }), /* @__PURE__ */ x("span", { children: [
171
+ (M.installCount ?? 0).toLocaleString(),
166
172
  " ",
167
- D("devportal.installs", "installs")
173
+ O("devportal.installs", "installs")
168
174
  ] })]
169
175
  }),
170
- j.category && /* @__PURE__ */ y("span", {
176
+ M.category && /* @__PURE__ */ b("span", {
171
177
  className: "rounded-full border px-2 py-0.5 text-xs",
172
- children: j.category
178
+ children: M.category
173
179
  }),
174
- /* @__PURE__ */ y("span", {
180
+ /* @__PURE__ */ b("span", {
175
181
  className: "rounded-full border px-2 py-0.5 text-xs",
176
- children: S[j.appType] ?? j.appType
182
+ children: C[M.appType] ?? M.appType
177
183
  })
178
184
  ]
179
185
  })
180
186
  ]
181
187
  }),
182
- /* @__PURE__ */ b("div", {
188
+ /* @__PURE__ */ x("div", {
183
189
  className: "flex-shrink-0 text-right space-y-2",
184
190
  children: [
185
- /* @__PURE__ */ y("div", {
191
+ /* @__PURE__ */ b("div", {
186
192
  className: "text-lg font-semibold",
187
- children: x[j.pricingType ?? "FREE"] ?? "Free"
193
+ children: S[M.pricingType ?? "FREE"] ?? "Free"
188
194
  }),
189
- /* @__PURE__ */ y("button", {
195
+ /* @__PURE__ */ b("button", {
190
196
  disabled: !0,
191
197
  className: "w-full rounded-lg bg-primary px-6 py-2 text-sm font-semibold text-primary-foreground opacity-60 cursor-not-allowed",
192
- title: D("devportal.previewOnly", "Preview only"),
193
- children: D("devportal.install", "Install")
198
+ title: O("devportal.previewOnly", "Preview only"),
199
+ children: O("devportal.install", "Install")
194
200
  }),
195
- /* @__PURE__ */ y("p", {
201
+ /* @__PURE__ */ b("p", {
196
202
  className: "text-xs text-muted-foreground",
197
- children: D("devportal.previewOnly", "Preview only")
203
+ children: O("devportal.previewOnly", "Preview only")
198
204
  })
199
205
  ]
200
206
  })
201
207
  ]
202
208
  })
203
209
  }),
204
- M.length > 0 && /* @__PURE__ */ b("div", {
210
+ N.length > 0 && /* @__PURE__ */ x("div", {
205
211
  className: "border-t px-6 py-5",
206
- children: [/* @__PURE__ */ y("h2", {
212
+ children: [/* @__PURE__ */ b("h2", {
207
213
  className: "text-base font-semibold mb-3",
208
- children: D("devportal.screenshots", "Screenshots")
209
- }), /* @__PURE__ */ y("div", {
214
+ children: O("devportal.screenshots", "Screenshots")
215
+ }), /* @__PURE__ */ b("div", {
210
216
  className: "flex gap-3 overflow-x-auto pb-2",
211
- children: M.map((e, t) => /* @__PURE__ */ y("img", {
217
+ children: N.map((e, t) => /* @__PURE__ */ b("img", {
212
218
  src: e,
213
- alt: `${D("devportal.screenshotAlt", "Screenshot")} ${t + 1}`,
219
+ alt: `${O("devportal.screenshotAlt", "Screenshot")} ${t + 1}`,
214
220
  className: "h-44 w-auto rounded-lg border object-cover flex-shrink-0"
215
221
  }, t))
216
222
  })]
217
223
  }),
218
- /* @__PURE__ */ b("div", {
224
+ /* @__PURE__ */ x("div", {
219
225
  className: "border-t px-6 py-5",
220
- children: [/* @__PURE__ */ y("h2", {
226
+ children: [/* @__PURE__ */ b("h2", {
221
227
  className: "text-base font-semibold mb-2",
222
- children: D("devportal.about", "About")
223
- }), /* @__PURE__ */ y("p", {
228
+ children: O("devportal.about", "About")
229
+ }), /* @__PURE__ */ b("p", {
224
230
  className: "text-sm text-muted-foreground whitespace-pre-wrap",
225
- children: j.description ?? j.shortDescription ?? D("devportal.noDetailedDescription", "No detailed description provided.")
231
+ children: M.description ?? M.shortDescription ?? O("devportal.noDetailedDescription", "No detailed description provided.")
226
232
  })]
227
233
  }),
228
- Array.isArray(j.tags) && j.tags.length > 0 && /* @__PURE__ */ y("div", {
234
+ Array.isArray(M.tags) && M.tags.length > 0 && /* @__PURE__ */ b("div", {
229
235
  className: "border-t px-6 py-4",
230
- children: /* @__PURE__ */ y("div", {
236
+ children: /* @__PURE__ */ b("div", {
231
237
  className: "flex flex-wrap gap-2",
232
- children: j.tags.map((e) => /* @__PURE__ */ b("span", {
238
+ children: M.tags.map((e) => /* @__PURE__ */ x("span", {
233
239
  className: "inline-flex items-center gap-1 rounded-full border px-3 py-1 text-xs text-muted-foreground",
234
- children: [/* @__PURE__ */ y(_, { size: 10 }), e]
240
+ children: [/* @__PURE__ */ b(v, { size: 10 }), e]
235
241
  }, e))
236
242
  })
237
243
  }),
238
- /* @__PURE__ */ b("div", {
244
+ /* @__PURE__ */ x("div", {
239
245
  className: "border-t px-6 py-5 grid grid-cols-1 sm:grid-cols-2 gap-4 text-sm",
240
246
  children: [
241
- j.websiteUrl && /* @__PURE__ */ b("a", {
242
- href: j.websiteUrl,
247
+ M.websiteUrl && /* @__PURE__ */ x("a", {
248
+ href: M.websiteUrl,
243
249
  target: "_blank",
244
250
  rel: "noopener noreferrer",
245
251
  className: "flex items-center gap-2 text-primary hover:underline",
246
252
  children: [
247
- /* @__PURE__ */ y(p, { size: 14 }),
248
- D("devportal.website", "Website"),
249
- /* @__PURE__ */ y(u, { size: 12 })
253
+ /* @__PURE__ */ b(m, { size: 14 }),
254
+ O("devportal.website", "Website"),
255
+ /* @__PURE__ */ b(d, { size: 12 })
250
256
  ]
251
257
  }),
252
- j.documentationUrl && /* @__PURE__ */ b("a", {
253
- href: j.documentationUrl,
258
+ M.documentationUrl && /* @__PURE__ */ x("a", {
259
+ href: M.documentationUrl,
254
260
  target: "_blank",
255
261
  rel: "noopener noreferrer",
256
262
  className: "flex items-center gap-2 text-primary hover:underline",
257
263
  children: [
258
- /* @__PURE__ */ y(f, { size: 14 }),
259
- D("devportal.documentation", "Documentation"),
260
- /* @__PURE__ */ y(u, { size: 12 })
264
+ /* @__PURE__ */ b(p, { size: 14 }),
265
+ O("devportal.documentation", "Documentation"),
266
+ /* @__PURE__ */ b(d, { size: 12 })
261
267
  ]
262
268
  }),
263
- j.privacyPolicyUrl && /* @__PURE__ */ b("a", {
264
- href: j.privacyPolicyUrl,
269
+ M.privacyPolicyUrl && /* @__PURE__ */ x("a", {
270
+ href: M.privacyPolicyUrl,
265
271
  target: "_blank",
266
272
  rel: "noopener noreferrer",
267
273
  className: "flex items-center gap-2 text-primary hover:underline",
268
274
  children: [
269
- /* @__PURE__ */ y(h, { size: 14 }),
270
- D("devportal.privacyPolicy", "Privacy Policy"),
271
- /* @__PURE__ */ y(u, { size: 12 })
275
+ /* @__PURE__ */ b(g, { size: 14 }),
276
+ O("devportal.privacyPolicy", "Privacy Policy"),
277
+ /* @__PURE__ */ b(d, { size: 12 })
272
278
  ]
273
279
  }),
274
- j.termsOfServiceUrl && /* @__PURE__ */ b("a", {
275
- href: j.termsOfServiceUrl,
280
+ M.termsOfServiceUrl && /* @__PURE__ */ x("a", {
281
+ href: M.termsOfServiceUrl,
276
282
  target: "_blank",
277
283
  rel: "noopener noreferrer",
278
284
  className: "flex items-center gap-2 text-primary hover:underline",
279
285
  children: [
280
- /* @__PURE__ */ y(f, { size: 14 }),
281
- D("devportal.termsOfService", "Terms of Service"),
282
- /* @__PURE__ */ y(u, { size: 12 })
286
+ /* @__PURE__ */ b(p, { size: 14 }),
287
+ O("devportal.termsOfService", "Terms of Service"),
288
+ /* @__PURE__ */ b(d, { size: 12 })
283
289
  ]
284
290
  })
285
291
  ]
286
292
  })
287
293
  ]
288
294
  }),
289
- /* @__PURE__ */ b(n, {
290
- title: D("devportal.listingCompleteness", "Listing Completeness"),
291
- children: [/* @__PURE__ */ y("div", {
295
+ /* @__PURE__ */ x(n, {
296
+ title: O("devportal.listingCompleteness", "Listing Completeness"),
297
+ children: [/* @__PURE__ */ b("div", {
292
298
  className: "space-y-2",
293
299
  children: [
294
300
  {
295
- label: D("devportal.completenessAppIcon", "App icon"),
296
- ok: !!j.iconUrl
301
+ label: O("devportal.completenessAppIcon", "App icon"),
302
+ ok: !!M.iconUrl
297
303
  },
298
304
  {
299
- label: D("devportal.completenessBannerImage", "Banner image"),
300
- ok: !!j.bannerUrl
305
+ label: O("devportal.completenessBannerImage", "Banner image"),
306
+ ok: !!M.bannerUrl
301
307
  },
302
308
  {
303
- label: D("devportal.completenessShortDescription", "Short description"),
304
- ok: !!j.shortDescription
309
+ label: O("devportal.completenessShortDescription", "Short description"),
310
+ ok: !!M.shortDescription
305
311
  },
306
312
  {
307
- label: D("devportal.completenessFullDescription", "Full description"),
308
- ok: !!j.description
313
+ label: O("devportal.completenessFullDescription", "Full description"),
314
+ ok: !!M.description
309
315
  },
310
316
  {
311
- label: D("devportal.completenessScreenshots", "Screenshots (3+)"),
312
- ok: M.length >= 3
317
+ label: O("devportal.completenessScreenshots", "Screenshots (3+)"),
318
+ ok: N.length >= 3
313
319
  },
314
320
  {
315
- label: D("devportal.completenessCategory", "Category"),
316
- ok: !!j.category
321
+ label: O("devportal.completenessCategory", "Category"),
322
+ ok: !!M.category
317
323
  },
318
324
  {
319
- label: D("devportal.completenessTags", "Tags"),
320
- ok: Array.isArray(j.tags) && j.tags.length > 0
325
+ label: O("devportal.completenessTags", "Tags"),
326
+ ok: Array.isArray(M.tags) && M.tags.length > 0
321
327
  },
322
328
  {
323
- label: D("devportal.completenessPrivacyPolicy", "Privacy policy URL"),
324
- ok: !!j.privacyPolicyUrl
329
+ label: O("devportal.completenessPrivacyPolicy", "Privacy policy URL"),
330
+ ok: !!M.privacyPolicyUrl
325
331
  },
326
332
  {
327
- label: D("devportal.completenessTermsOfService", "Terms of service URL"),
328
- ok: !!j.termsOfServiceUrl
333
+ label: O("devportal.completenessTermsOfService", "Terms of service URL"),
334
+ ok: !!M.termsOfServiceUrl
329
335
  }
330
- ].map(({ label: e, ok: t }) => /* @__PURE__ */ b("div", {
336
+ ].map(({ label: e, ok: t }) => /* @__PURE__ */ x("div", {
331
337
  className: "flex items-center gap-3 text-sm",
332
- children: [t ? /* @__PURE__ */ y(c, {
338
+ children: [t ? /* @__PURE__ */ b(l, {
333
339
  size: 16,
334
340
  className: "text-status-success-text flex-shrink-0"
335
- }) : /* @__PURE__ */ y("div", { className: "h-4 w-4 rounded-full border-2 border-muted-foreground flex-shrink-0" }), /* @__PURE__ */ y("span", {
341
+ }) : /* @__PURE__ */ b("div", { className: "h-4 w-4 rounded-full border-2 border-muted-foreground flex-shrink-0" }), /* @__PURE__ */ b("span", {
336
342
  className: t ? "text-foreground" : "text-muted-foreground",
337
343
  children: e
338
344
  })]
339
345
  }, e))
340
- }), !N && /* @__PURE__ */ y("button", {
341
- onClick: () => w?.(`${T}/apps/${C}/edit`),
346
+ }), !P && /* @__PURE__ */ b("button", {
347
+ onClick: () => T?.(`${E}/apps/${w}/edit`),
342
348
  className: "mt-4 rounded-md border px-3 py-1.5 text-sm hover:bg-muted",
343
- children: D("devportal.editToImproveListing", "Edit to improve listing →")
349
+ children: O("devportal.editToImproveListing", "Edit to improve listing →")
344
350
  })]
345
351
  })
346
352
  ]
@@ -348,6 +354,6 @@ var x = {
348
354
  });
349
355
  };
350
356
  //#endregion
351
- export { C as ListingPreviewPage };
357
+ export { w as ListingPreviewPage };
352
358
 
353
359
  //# sourceMappingURL=ListingPreviewPage.js.map