@burdenoff/microfe-devportal 2026.609.3 → 2026.611.1

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 +233 -228
  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 +405 -0
  42. package/dist/devportal/pages/RevenueDashboardPage.js.map +1 -0
  43. package/dist/devportal/pages/SetupPage.js +170 -217
  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 +310 -225
  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
@@ -2,45 +2,17 @@ import { useDevportal as e } from "../providers/DevportalProvider.js";
2
2
  import { useDevportalEventBus as t } from "../events/index.js";
3
3
  import { APP_TYPE_LABELS as n } from "../utils/constants.js";
4
4
  import { InputField as r, SelectField as i, TextareaField as a } from "../components/FormField.js";
5
- import { useCreateApplicationMutation as ee, useCreateOrganizationMutation as te } from "../../generated/global-operations.js";
6
- import { useState as o } from "react";
7
- import { useI18n as s } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
- import { AppWindow as c, ArrowRight as ne, BookOpen as re, Building2 as l, Check as u, ChevronRight as d, Key as f, Rocket as p } from "lucide-react";
9
- import { jsx as m, jsxs as h } from "react/jsx-runtime";
5
+ import { useCreateApplicationMutation as ee, useCreateBillingAccountMutation as o, useCreateOrganizationMutation as s } from "../../generated/global-operations.js";
6
+ import "../hooks/index.js";
7
+ import { useState as c } from "react";
8
+ import { useI18n as te } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
9
+ import { AppWindow as l, ArrowRight as u, BookOpen as d, Building2 as f, Check as p, ChevronRight as m, Key as h, Rocket as g } from "lucide-react";
10
+ import { jsx as _, jsxs as v } from "react/jsx-runtime";
10
11
  //#region src/devportal/pages/SetupPage.tsx
11
- var g = [
12
- {
13
- value: "FREE",
14
- label: "Free",
15
- price: "Free",
16
- apps: "1 app",
17
- calls: "100K calls/mo"
18
- },
19
- {
20
- value: "DEVELOPER",
21
- label: "Developer",
22
- price: "$29/mo",
23
- apps: "3 apps",
24
- calls: "1M calls/mo"
25
- },
26
- {
27
- value: "PROFESSIONAL",
28
- label: "Professional",
29
- price: "$99/mo",
30
- apps: "10 apps",
31
- calls: "10M calls/mo"
32
- }
33
- ], _ = [{
34
- value: "",
35
- label: "Select type…"
36
- }, ...Object.entries(n).map(([e, t]) => ({
12
+ var y = Object.entries(n).map(([e, t]) => ({
37
13
  value: e,
38
14
  label: t
39
- }))], v = [
40
- {
41
- value: "",
42
- label: "Select category…"
43
- },
15
+ })), b = [
44
16
  {
45
17
  value: "productivity",
46
18
  label: "Productivity"
@@ -90,15 +62,15 @@ var g = [
90
62
  label: "Other"
91
63
  }
92
64
  ];
93
- function y(e) {
65
+ function x(e) {
94
66
  return e.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
95
67
  }
96
- function b() {
68
+ function S() {
97
69
  try {
98
70
  localStorage.setItem("devportal_setup_dismissed", "1");
99
71
  } catch {}
100
72
  }
101
- var x = [
73
+ var C = [
102
74
  {
103
75
  key: "org",
104
76
  label: "Organization"
@@ -111,50 +83,58 @@ var x = [
111
83
  key: "done",
112
84
  label: "Done"
113
85
  }
114
- ], ie = ({ current: e }) => {
115
- let t = x.findIndex((t) => t.key === e);
116
- return /* @__PURE__ */ m("div", {
86
+ ], ne = ({ current: e }) => {
87
+ let t = C.findIndex((t) => t.key === e);
88
+ return /* @__PURE__ */ _("div", {
117
89
  className: "flex items-center gap-0",
118
- children: x.map((e, n) => {
90
+ children: C.map((e, n) => {
119
91
  let r = n < t, i = n === t;
120
- return /* @__PURE__ */ h("div", {
92
+ return /* @__PURE__ */ v("div", {
121
93
  className: "flex items-center",
122
- children: [/* @__PURE__ */ h("div", {
94
+ children: [/* @__PURE__ */ v("div", {
123
95
  className: "flex flex-col items-center gap-1.5",
124
- children: [/* @__PURE__ */ m("div", {
96
+ children: [/* @__PURE__ */ _("div", {
125
97
  className: ["flex h-8 w-8 items-center justify-center rounded-full text-sm font-semibold transition-colors", r ? "bg-primary text-primary-foreground" : i ? "bg-primary text-primary-foreground ring-4 ring-primary/20" : "bg-muted text-muted-foreground"].join(" "),
126
- children: r ? /* @__PURE__ */ m(u, { size: 14 }) : n + 1
127
- }), /* @__PURE__ */ m("span", {
98
+ children: r ? /* @__PURE__ */ _(p, { size: 14 }) : n + 1
99
+ }), /* @__PURE__ */ _("span", {
128
100
  className: ["text-xs font-medium whitespace-nowrap", i ? "text-foreground" : "text-muted-foreground"].join(" "),
129
101
  children: e.label
130
102
  })]
131
- }), n < x.length - 1 && /* @__PURE__ */ m("div", { className: ["mx-3 mb-5 h-px w-16 flex-shrink-0 transition-colors", n < t ? "bg-primary" : "bg-border"].join(" ") })]
103
+ }), n < C.length - 1 && /* @__PURE__ */ _("div", { className: ["mx-3 mb-5 h-px w-16 flex-shrink-0 transition-colors", n < t ? "bg-primary" : "bg-border"].join(" ") })]
132
104
  }, e.key);
133
105
  })
134
106
  });
135
- }, S = () => {
136
- let { navigate: n, basePath: u } = e(), { t: x } = s(), S = t(), w = (e, t) => {
137
- let n = x(e);
107
+ }, w = () => {
108
+ let { navigate: n, basePath: p, currentUser: C } = e(), { t: w } = te(), E = t(), D = (e, t) => {
109
+ let n = w(e);
138
110
  return n === e ? t : n;
139
- }, T = (e) => n?.(`${u}${e}`), [E, D] = o("org"), [O, k] = o(null), [A, ae] = o(null), [j, M] = o(""), [N, P] = o(""), [F, oe] = o(""), [I, L] = o("FREE"), [R, z] = o({}), [B, { loading: V }] = te(), H = () => {
111
+ }, O = (e) => n?.(`${p}${e}`), [k, A] = c("org"), [j, re] = c(null), [M, ie] = c(null), [N, ae] = c(""), [P, F] = c(""), [I, oe] = c(""), [L, R] = c({}), [z, { loading: B }] = s(), [V] = o(), H = () => {
140
112
  let e = {};
141
- return j.trim() ? j.length < 2 && (e.name = w("devportal.orgNameTooShort", "Name must be at least 2 characters")) : e.name = w("devportal.orgNameRequired", "Organization name is required"), N.trim() ? /^[a-z0-9-]+$/.test(N) || (e.slug = w("devportal.slugInvalid", "Lowercase letters, numbers, and hyphens only")) : e.slug = w("devportal.slugRequired", "Slug is required"), z(e), Object.keys(e).length === 0;
113
+ return N.trim() ? N.length < 2 && (e.name = D("devportal.orgNameTooShort", "Name must be at least 2 characters")) : e.name = D("devportal.orgNameRequired", "Organization name is required"), P.trim() ? /^[a-z0-9-]+$/.test(P) || (e.slug = D("devportal.slugInvalid", "Lowercase letters, numbers, and hyphens only")) : e.slug = D("devportal.slugRequired", "Slug is required"), R(e), Object.keys(e).length === 0;
142
114
  }, U = async () => {
143
115
  if (H()) try {
144
- let e = (await B({ variables: { input: {
145
- name: j,
146
- slug: N || void 0,
147
- description: F || void 0,
148
- metadata: I === "FREE" ? void 0 : { tier: I }
116
+ let e = (await z({ variables: { input: {
117
+ name: N,
118
+ slug: P || void 0,
119
+ description: I || void 0
149
120
  } } })).data?.createDeveloperOrganization?.id;
150
- e && (S.emit("devportal.org.created", {
151
- organizationId: e,
152
- name: j
153
- }), k(e), D("app"));
121
+ if (e) {
122
+ E.emit("devportal.org.created", {
123
+ organizationId: e,
124
+ name: N
125
+ }), re(e);
126
+ try {
127
+ V({ variables: { input: {
128
+ name: N,
129
+ email: C?.email ?? ""
130
+ } } }).catch(() => {});
131
+ } catch {}
132
+ A("app");
133
+ }
154
134
  } catch {}
155
- }, [W, G] = o(""), [K, se] = o(""), [q, ce] = o(""), [J, le] = o(""), [Y, ue] = o(""), [X, Z] = o({}), [de, { loading: Q }] = ee(), fe = () => {
135
+ }, [W, G] = c(""), [K, se] = c(""), [q, ce] = c(""), [J, le] = c(""), [Y, ue] = c(""), [X, Z] = c({}), [de, { loading: Q }] = ee(), fe = () => {
156
136
  let e = {};
157
- return W.trim() ? W.length < 3 && (e.name = w("devportal.nameTooShort", "Name must be at least 3 characters")) : e.name = w("devportal.appNameRequired", "Application name is required"), q || (e.appType = w("devportal.appTypeRequired", "Application type is required")), J || (e.category = w("devportal.categoryRequired", "Category is required")), Y.trim() || (e.shortDescription = w("devportal.shortDescriptionRequired", "Short description is required")), Z(e), Object.keys(e).length === 0;
137
+ return W.trim() ? W.length < 3 && (e.name = D("devportal.nameTooShort", "Name must be at least 3 characters")) : e.name = D("devportal.appNameRequired", "Application name is required"), q || (e.appType = D("devportal.appTypeRequired", "Application type is required")), J || (e.category = D("devportal.categoryRequired", "Category is required")), Y.trim() || (e.shortDescription = D("devportal.shortDescriptionRequired", "Short description is required")), Z(e), Object.keys(e).length === 0;
158
138
  }, pe = async () => {
159
139
  if (fe()) try {
160
140
  let e = (await de({ variables: { input: {
@@ -164,194 +144,165 @@ var x = [
164
144
  category: J || void 0,
165
145
  shortDescription: Y || void 0,
166
146
  visibility: "PRIVATE",
167
- developerOrganizationId: O || void 0
147
+ developerOrganizationId: j || void 0
168
148
  } } })).data?.createApplication?.id;
169
- e && (S.emit("devportal.app.created", {
149
+ e && (E.emit("devportal.app.created", {
170
150
  appId: e,
171
151
  name: W,
172
152
  appType: q,
173
- organizationId: O
174
- }), ae(e), b(), D("done"));
153
+ organizationId: j
154
+ }), ie(e), S(), A("done"));
175
155
  } catch {}
176
156
  }, $ = () => {
177
- b(), T("/");
157
+ S(), O("/");
178
158
  };
179
- return /* @__PURE__ */ h("main", {
159
+ return /* @__PURE__ */ v("main", {
180
160
  className: "min-h-screen bg-surface-default",
181
- children: [/* @__PURE__ */ m("div", {
161
+ children: [/* @__PURE__ */ _("div", {
182
162
  className: "border-b border-border-default bg-surface-raised",
183
- children: /* @__PURE__ */ m("div", {
163
+ children: /* @__PURE__ */ _("div", {
184
164
  className: "mx-auto max-w-2xl px-6 py-5",
185
- children: /* @__PURE__ */ h("div", {
165
+ children: /* @__PURE__ */ v("div", {
186
166
  className: "flex items-center justify-between",
187
- children: [/* @__PURE__ */ h("div", {
167
+ children: [/* @__PURE__ */ v("div", {
188
168
  className: "flex items-center gap-3",
189
- children: [/* @__PURE__ */ m("div", {
169
+ children: [/* @__PURE__ */ _("div", {
190
170
  className: "flex h-9 w-9 items-center justify-center rounded-lg bg-primary/10 text-primary",
191
- children: /* @__PURE__ */ m(p, { size: 20 })
192
- }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
171
+ children: /* @__PURE__ */ _(g, { size: 20 })
172
+ }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
193
173
  className: "text-xs font-medium text-muted-foreground",
194
- children: w("devportal.developerPortal", "Developer Portal")
195
- }), /* @__PURE__ */ m("h1", {
174
+ children: D("devportal.developerPortal", "Developer Portal")
175
+ }), /* @__PURE__ */ _("h1", {
196
176
  className: "text-base font-semibold text-foreground",
197
- children: w("devportal.setup.title", "Get set up")
177
+ children: D("devportal.setup.title", "Get set up")
198
178
  })] })]
199
- }), E !== "done" && /* @__PURE__ */ m("button", {
179
+ }), k !== "done" && /* @__PURE__ */ _("button", {
200
180
  type: "button",
201
181
  onClick: $,
202
182
  className: "text-sm text-muted-foreground hover:text-foreground transition-colors",
203
- children: w("devportal.setup.skipForNow", "Skip for now")
183
+ children: D("devportal.setup.skipForNow", "Skip for now")
204
184
  })]
205
185
  })
206
186
  })
207
- }), /* @__PURE__ */ h("div", {
187
+ }), /* @__PURE__ */ v("div", {
208
188
  className: "mx-auto max-w-2xl px-6 py-10",
209
189
  children: [
210
- /* @__PURE__ */ m("div", {
190
+ /* @__PURE__ */ _("div", {
211
191
  className: "mb-10 flex justify-center",
212
- children: /* @__PURE__ */ m(ie, { current: E })
192
+ children: /* @__PURE__ */ _(ne, { current: k })
213
193
  }),
214
- E === "org" && /* @__PURE__ */ h("div", {
194
+ k === "org" && /* @__PURE__ */ v("div", {
215
195
  className: "rounded-xl border border-border-default bg-surface-raised p-8 shadow-sm",
216
196
  children: [
217
- /* @__PURE__ */ h("div", {
197
+ /* @__PURE__ */ v("div", {
218
198
  className: "mb-6 flex items-center gap-3",
219
- children: [/* @__PURE__ */ m("div", {
199
+ children: [/* @__PURE__ */ _("div", {
220
200
  className: "flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 text-primary",
221
- children: /* @__PURE__ */ m(l, { size: 20 })
222
- }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h2", {
201
+ children: /* @__PURE__ */ _(f, { size: 20 })
202
+ }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("h2", {
223
203
  className: "text-lg font-semibold text-foreground",
224
- children: w("devportal.setup.orgTitle", "Set up your organization")
225
- }), /* @__PURE__ */ m("p", {
204
+ children: D("devportal.setup.orgTitle", "Set up your organization")
205
+ }), /* @__PURE__ */ _("p", {
226
206
  className: "text-sm text-muted-foreground",
227
- children: w("devportal.setup.orgSubtitle", "This groups your apps and teams under one publisher identity.")
207
+ children: D("devportal.setup.orgSubtitle", "This groups your apps and teams under one publisher identity.")
228
208
  })] })]
229
209
  }),
230
- /* @__PURE__ */ h("div", {
210
+ /* @__PURE__ */ v("div", {
231
211
  className: "space-y-5",
232
212
  children: [
233
- /* @__PURE__ */ m(r, {
234
- label: w("devportal.organizationName", "Organization Name"),
235
- value: j,
213
+ /* @__PURE__ */ _(r, {
214
+ label: D("devportal.organizationName", "Organization Name"),
215
+ value: N,
236
216
  onChange: (e) => {
237
- M(e.target.value), (!N || N === y(j)) && P(y(e.target.value)), z((e) => ({
217
+ ae(e.target.value), (!P || P === x(N)) && F(x(e.target.value)), R((e) => ({
238
218
  ...e,
239
219
  name: void 0
240
220
  }));
241
221
  },
242
- placeholder: w("devportal.organizationNamePlaceholder", "Acme Development"),
222
+ placeholder: D("devportal.organizationNamePlaceholder", "Acme Development"),
243
223
  required: !0,
244
- error: R.name
224
+ error: L.name
245
225
  }),
246
- /* @__PURE__ */ m(r, {
247
- label: w("devportal.slug", "Slug"),
248
- value: N,
226
+ /* @__PURE__ */ _(r, {
227
+ label: D("devportal.slug", "Slug"),
228
+ value: P,
249
229
  onChange: (e) => {
250
- P(e.target.value.toLowerCase()), z((e) => ({
230
+ F(e.target.value.toLowerCase()), R((e) => ({
251
231
  ...e,
252
232
  slug: void 0
253
233
  }));
254
234
  },
255
235
  placeholder: "acme-dev",
256
236
  required: !0,
257
- error: R.slug,
258
- hint: w("devportal.slugHint", "URL-friendly identifier — auto-generated from name")
237
+ error: L.slug,
238
+ hint: D("devportal.slugHint", "URL-friendly identifier — auto-generated from name")
259
239
  }),
260
- /* @__PURE__ */ m(a, {
261
- label: w("devportal.description", "Description"),
262
- value: F,
240
+ /* @__PURE__ */ _(a, {
241
+ label: D("devportal.description", "Description"),
242
+ value: I,
263
243
  onChange: (e) => oe(e.target.value),
264
- placeholder: w("devportal.orgDescriptionPlaceholder", "Tell us about your organization…"),
244
+ placeholder: D("devportal.orgDescriptionPlaceholder", "Tell us about your organization…"),
265
245
  rows: 2
266
- }),
267
- /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
268
- className: "mb-2 text-sm font-medium text-foreground",
269
- children: w("devportal.selectPlan", "Select Plan")
270
- }), /* @__PURE__ */ m("div", {
271
- className: "grid grid-cols-3 gap-3",
272
- children: g.map((e) => /* @__PURE__ */ h("button", {
273
- type: "button",
274
- onClick: () => L(e.value),
275
- className: ["rounded-lg border p-3 text-left text-sm transition-colors", I === e.value ? "border-primary bg-primary/5 ring-2 ring-primary" : "border-border-default hover:border-muted-foreground/50"].join(" "),
276
- children: [
277
- /* @__PURE__ */ m("p", {
278
- className: "font-semibold text-foreground",
279
- children: e.label
280
- }),
281
- /* @__PURE__ */ m("p", {
282
- className: "mt-0.5 text-xs text-primary",
283
- children: e.price
284
- }),
285
- /* @__PURE__ */ m("p", {
286
- className: "mt-1.5 text-xs text-muted-foreground",
287
- children: e.apps
288
- }),
289
- /* @__PURE__ */ m("p", {
290
- className: "text-xs text-muted-foreground",
291
- children: e.calls
292
- })
293
- ]
294
- }, e.value))
295
- })] })
246
+ })
296
247
  ]
297
248
  }),
298
- /* @__PURE__ */ h("div", {
249
+ /* @__PURE__ */ v("div", {
299
250
  className: "mt-8 flex items-center justify-between border-t border-border-default pt-6",
300
- children: [/* @__PURE__ */ m("button", {
251
+ children: [/* @__PURE__ */ _("button", {
301
252
  type: "button",
302
253
  onClick: $,
303
254
  className: "text-sm text-muted-foreground hover:text-foreground transition-colors",
304
- children: w("devportal.setup.skipForNow", "Skip for now")
305
- }), /* @__PURE__ */ h("button", {
255
+ children: D("devportal.setup.skipForNow", "Skip for now")
256
+ }), /* @__PURE__ */ v("button", {
306
257
  type: "button",
307
258
  onClick: () => void U(),
308
- disabled: V,
259
+ disabled: B,
309
260
  className: "inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-semibold text-primary-foreground hover:bg-primary/90 disabled:opacity-60 transition-colors",
310
261
  children: [
311
- V ? /* @__PURE__ */ m("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }) : null,
312
- w("devportal.setup.createAndContinue", "Create & Continue"),
313
- !V && /* @__PURE__ */ m(d, { size: 16 })
262
+ B ? /* @__PURE__ */ _("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }) : null,
263
+ D("devportal.setup.createAndContinue", "Create & Continue"),
264
+ !B && /* @__PURE__ */ _(m, { size: 16 })
314
265
  ]
315
266
  })]
316
267
  })
317
268
  ]
318
269
  }),
319
- E === "app" && /* @__PURE__ */ h("div", {
270
+ k === "app" && /* @__PURE__ */ v("div", {
320
271
  className: "rounded-xl border border-border-default bg-surface-raised p-8 shadow-sm",
321
272
  children: [
322
- /* @__PURE__ */ h("div", {
273
+ /* @__PURE__ */ v("div", {
323
274
  className: "mb-6 flex items-center gap-3",
324
- children: [/* @__PURE__ */ m("div", {
275
+ children: [/* @__PURE__ */ _("div", {
325
276
  className: "flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 text-primary",
326
- children: /* @__PURE__ */ m(c, { size: 20 })
327
- }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h2", {
277
+ children: /* @__PURE__ */ _(l, { size: 20 })
278
+ }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("h2", {
328
279
  className: "text-lg font-semibold text-foreground",
329
- children: w("devportal.setup.appTitle", "Create your first app")
330
- }), /* @__PURE__ */ m("p", {
280
+ children: D("devportal.setup.appTitle", "Create your first app")
281
+ }), /* @__PURE__ */ _("p", {
331
282
  className: "text-sm text-muted-foreground",
332
- children: w("devportal.setup.appSubtitle", "Register the app you want to publish or integrate.")
283
+ children: D("devportal.setup.appSubtitle", "Register the app you want to publish or integrate.")
333
284
  })] })]
334
285
  }),
335
- /* @__PURE__ */ h("div", {
286
+ /* @__PURE__ */ v("div", {
336
287
  className: "space-y-5",
337
288
  children: [
338
- /* @__PURE__ */ m(r, {
339
- label: w("devportal.applicationName", "Application Name"),
289
+ /* @__PURE__ */ _(r, {
290
+ label: D("devportal.applicationName", "Application Name"),
340
291
  value: W,
341
292
  onChange: (e) => {
342
- G(e.target.value), (!K || K === y(W)) && se(y(e.target.value)), Z((e) => ({
293
+ G(e.target.value), (!K || K === x(W)) && se(x(e.target.value)), Z((e) => ({
343
294
  ...e,
344
295
  name: void 0
345
296
  }));
346
297
  },
347
- placeholder: w("devportal.applicationNamePlaceholder", "My Awesome App"),
298
+ placeholder: D("devportal.applicationNamePlaceholder", "My Awesome App"),
348
299
  required: !0,
349
300
  error: X.name
350
301
  }),
351
- /* @__PURE__ */ h("div", {
302
+ /* @__PURE__ */ v("div", {
352
303
  className: "grid grid-cols-2 gap-4",
353
- children: [/* @__PURE__ */ m(i, {
354
- label: w("devportal.applicationType", "Application Type"),
304
+ children: [/* @__PURE__ */ _(i, {
305
+ label: D("devportal.applicationType", "Application Type"),
355
306
  value: q,
356
307
  onChange: (e) => {
357
308
  ce(e.target.value), Z((e) => ({
@@ -359,11 +310,12 @@ var x = [
359
310
  appType: void 0
360
311
  }));
361
312
  },
362
- options: _,
313
+ options: y,
314
+ placeholder: D("devportal.selectType", "Select type…"),
363
315
  required: !0,
364
316
  error: X.appType
365
- }), /* @__PURE__ */ m(i, {
366
- label: w("devportal.category", "Category"),
317
+ }), /* @__PURE__ */ _(i, {
318
+ label: D("devportal.category", "Category"),
367
319
  value: J,
368
320
  onChange: (e) => {
369
321
  le(e.target.value), Z((e) => ({
@@ -371,13 +323,14 @@ var x = [
371
323
  category: void 0
372
324
  }));
373
325
  },
374
- options: v,
326
+ options: b,
327
+ placeholder: D("devportal.selectCategory", "Select category…"),
375
328
  required: !0,
376
329
  error: X.category
377
330
  })]
378
331
  }),
379
- /* @__PURE__ */ m(a, {
380
- label: w("devportal.shortDescription", "Short Description"),
332
+ /* @__PURE__ */ _(a, {
333
+ label: D("devportal.shortDescription", "Short Description"),
381
334
  value: Y,
382
335
  onChange: (e) => {
383
336
  ue(e.target.value), Z((e) => ({
@@ -385,7 +338,7 @@ var x = [
385
338
  shortDescription: void 0
386
339
  }));
387
340
  },
388
- placeholder: w("devportal.shortDescriptionPlaceholder", "A brief description of what your app does"),
341
+ placeholder: D("devportal.shortDescriptionPlaceholder", "A brief description of what your app does"),
389
342
  required: !0,
390
343
  error: X.shortDescription,
391
344
  rows: 2,
@@ -393,109 +346,109 @@ var x = [
393
346
  })
394
347
  ]
395
348
  }),
396
- /* @__PURE__ */ h("div", {
349
+ /* @__PURE__ */ v("div", {
397
350
  className: "mt-8 flex items-center justify-between border-t border-border-default pt-6",
398
- children: [/* @__PURE__ */ m("button", {
351
+ children: [/* @__PURE__ */ _("button", {
399
352
  type: "button",
400
353
  onClick: $,
401
354
  className: "text-sm text-muted-foreground hover:text-foreground transition-colors",
402
- children: w("devportal.setup.skipForNow", "Skip for now")
403
- }), /* @__PURE__ */ h("button", {
355
+ children: D("devportal.setup.skipForNow", "Skip for now")
356
+ }), /* @__PURE__ */ v("button", {
404
357
  type: "button",
405
358
  onClick: () => void pe(),
406
359
  disabled: Q,
407
360
  className: "inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-semibold text-primary-foreground hover:bg-primary/90 disabled:opacity-60 transition-colors",
408
361
  children: [
409
- Q ? /* @__PURE__ */ m("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }) : null,
410
- w("devportal.setup.createApp", "Create App"),
411
- !Q && /* @__PURE__ */ m(d, { size: 16 })
362
+ Q ? /* @__PURE__ */ _("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }) : null,
363
+ D("devportal.setup.createApp", "Create App"),
364
+ !Q && /* @__PURE__ */ _(m, { size: 16 })
412
365
  ]
413
366
  })]
414
367
  })
415
368
  ]
416
369
  }),
417
- E === "done" && /* @__PURE__ */ h("div", {
370
+ k === "done" && /* @__PURE__ */ v("div", {
418
371
  className: "text-center",
419
372
  children: [
420
- /* @__PURE__ */ m("div", {
373
+ /* @__PURE__ */ _("div", {
421
374
  className: "mx-auto mb-6 flex h-16 w-16 items-center justify-center rounded-full bg-primary/10 text-primary",
422
- children: /* @__PURE__ */ m(p, { size: 32 })
375
+ children: /* @__PURE__ */ _(g, { size: 32 })
423
376
  }),
424
- /* @__PURE__ */ m("h2", {
377
+ /* @__PURE__ */ _("h2", {
425
378
  className: "text-2xl font-bold text-foreground",
426
- children: w("devportal.setup.doneTitle", "You're all set!")
379
+ children: D("devportal.setup.doneTitle", "You're all set!")
427
380
  }),
428
- /* @__PURE__ */ m("p", {
381
+ /* @__PURE__ */ _("p", {
429
382
  className: "mt-2 text-muted-foreground",
430
- children: w("devportal.setup.doneSubtitle", "Your organization and first app are ready. Here's what to do next.")
383
+ children: D("devportal.setup.doneSubtitle", "Your organization and first app are ready. Here's what to do next.")
431
384
  }),
432
- /* @__PURE__ */ h("div", {
385
+ /* @__PURE__ */ v("div", {
433
386
  className: "mt-8 grid gap-3 sm:grid-cols-2",
434
387
  children: [
435
- A && /* @__PURE__ */ m(C, {
436
- icon: /* @__PURE__ */ m(c, { size: 20 }),
437
- title: w("devportal.setup.viewApp", "View your app"),
438
- description: w("devportal.setup.viewAppDesc", "Configure OAuth, webhooks, and versioning"),
439
- onClick: () => T(`/apps/${A}`),
388
+ M && /* @__PURE__ */ _(T, {
389
+ icon: /* @__PURE__ */ _(l, { size: 20 }),
390
+ title: D("devportal.setup.viewApp", "View your app"),
391
+ description: D("devportal.setup.viewAppDesc", "Configure OAuth, webhooks, and versioning"),
392
+ onClick: () => O(`/apps/${M}`),
440
393
  primary: !0
441
394
  }),
442
- /* @__PURE__ */ m(C, {
443
- icon: /* @__PURE__ */ m(f, { size: 20 }),
444
- title: w("devportal.setup.generateApiKey", "Generate API key"),
445
- description: w("devportal.setup.generateApiKeyDesc", "Create credentials to start calling APIs"),
446
- onClick: () => T("/api-keys/new")
395
+ /* @__PURE__ */ _(T, {
396
+ icon: /* @__PURE__ */ _(h, { size: 20 }),
397
+ title: D("devportal.setup.generateApiKey", "Generate API key"),
398
+ description: D("devportal.setup.generateApiKeyDesc", "Create credentials to start calling APIs"),
399
+ onClick: () => O("/api-keys/new")
447
400
  }),
448
- /* @__PURE__ */ m(C, {
449
- icon: /* @__PURE__ */ m(re, { size: 20 }),
450
- title: w("devportal.setup.browseDocs", "Browse docs"),
451
- description: w("devportal.setup.browseDocsDesc", "Learn about publishing, SDKs, and webhooks"),
452
- onClick: () => T("/docs")
401
+ /* @__PURE__ */ _(T, {
402
+ icon: /* @__PURE__ */ _(d, { size: 20 }),
403
+ title: D("devportal.setup.browseDocs", "Browse docs"),
404
+ description: D("devportal.setup.browseDocsDesc", "Learn about publishing, SDKs, and webhooks"),
405
+ onClick: () => O("/docs")
453
406
  }),
454
- O && /* @__PURE__ */ m(C, {
455
- icon: /* @__PURE__ */ m(l, { size: 20 }),
456
- title: w("devportal.setup.inviteTeam", "Invite your team"),
457
- description: w("devportal.setup.inviteTeamDesc", "Add members to collaborate on your apps"),
458
- onClick: () => T(`/organizations/${O}/members`)
407
+ j && /* @__PURE__ */ _(T, {
408
+ icon: /* @__PURE__ */ _(f, { size: 20 }),
409
+ title: D("devportal.setup.inviteTeam", "Invite your team"),
410
+ description: D("devportal.setup.inviteTeamDesc", "Add members to collaborate on your apps"),
411
+ onClick: () => O(`/organizations/${j}/members`)
459
412
  })
460
413
  ]
461
414
  }),
462
- /* @__PURE__ */ h("button", {
415
+ /* @__PURE__ */ v("button", {
463
416
  type: "button",
464
- onClick: () => T("/"),
417
+ onClick: () => O("/"),
465
418
  className: "mt-8 inline-flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors",
466
- children: [w("devportal.setup.goToDashboard", "Go to dashboard"), /* @__PURE__ */ m(ne, { size: 14 })]
419
+ children: [D("devportal.setup.goToDashboard", "Go to dashboard"), /* @__PURE__ */ _(u, { size: 14 })]
467
420
  })
468
421
  ]
469
422
  })
470
423
  ]
471
424
  })]
472
425
  });
473
- }, C = ({ icon: e, title: t, description: n, onClick: r, primary: i }) => /* @__PURE__ */ h("button", {
426
+ }, T = ({ icon: e, title: t, description: n, onClick: r, primary: i }) => /* @__PURE__ */ v("button", {
474
427
  type: "button",
475
428
  onClick: r,
476
429
  className: ["flex items-start gap-4 rounded-xl border p-5 text-left transition-colors", i ? "border-primary bg-primary/5 hover:bg-primary/10" : "border-border-default bg-surface-raised hover:bg-surface-hover"].join(" "),
477
430
  children: [
478
- /* @__PURE__ */ m("div", {
431
+ /* @__PURE__ */ _("div", {
479
432
  className: ["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg", i ? "bg-primary/20 text-primary" : "bg-muted text-muted-foreground"].join(" "),
480
433
  children: e
481
434
  }),
482
- /* @__PURE__ */ h("div", {
435
+ /* @__PURE__ */ v("div", {
483
436
  className: "min-w-0 flex-1",
484
- children: [/* @__PURE__ */ m("p", {
437
+ children: [/* @__PURE__ */ _("p", {
485
438
  className: "font-semibold text-foreground",
486
439
  children: t
487
- }), /* @__PURE__ */ m("p", {
440
+ }), /* @__PURE__ */ _("p", {
488
441
  className: "mt-0.5 text-sm text-muted-foreground",
489
442
  children: n
490
443
  })]
491
444
  }),
492
- /* @__PURE__ */ m(d, {
445
+ /* @__PURE__ */ _(m, {
493
446
  size: 16,
494
447
  className: "mt-0.5 flex-shrink-0 text-muted-foreground"
495
448
  })
496
449
  ]
497
450
  });
498
451
  //#endregion
499
- export { S as SetupPage };
452
+ export { w as SetupPage };
500
453
 
501
454
  //# sourceMappingURL=SetupPage.js.map