@burdenoff/microfe-devportal 2026.622.1 → 2026.623.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.
@@ -2,27 +2,27 @@ import { useDevportal as e } from "../providers/DevportalProvider.js";
2
2
  import { cn as t } from "../utils/cn.js";
3
3
  import { LoadingState as n } from "../components/LoadingState.js";
4
4
  import { EmptyState as r } from "../components/EmptyState.js";
5
- import { useCurrentUserDelegationsQuery as i, useDeactivateAppMutation as a, useGetApplicationAnalyticsQuery as o, useGetApplicationQuery as s, useGetWebhooksQuery as c, useInstallApplicationMutation as l, useRevokeDelegationMutation as u, useRotateAppSecretMutation as d, useSubmitApplicationMutation as f, useUpdateApplicationMutation as p } from "../../generated/global-operations.js";
6
- import { PageLayout as m, PageSection as h } from "../components/PageLayout.js";
7
- import { APP_TYPE_LABELS as g } from "../utils/constants.js";
8
- import { FeaturedBadge as _, StatusBadge as v, VerifiedBadge as y } from "../components/StatusBadge.js";
9
- import { SelectionCheckbox as b } from "../components/SelectionCheckbox.js";
10
- import { nativeNotify as x } from "../../utils/nativeBridge.js";
11
- import { NewSecretAlert as S } from "../components/SecretDisplay.js";
12
- import { DataTable as C, DetailList as ee } from "../components/DataTable.js";
13
- import { InputField as w, SelectField as T, TextareaField as E } from "../components/FormField.js";
5
+ import { useCurrentUserDelegationsQuery as i, useDeactivateAppMutation as a, useGetApplicationAnalyticsQuery as o, useGetApplicationQuery as s, useGetWebhooksQuery as c, useGetWorkspaceInstallationQuery as l, useInstallApplicationMutation as u, useRevokeDelegationMutation as d, useRotateAppSecretMutation as f, useSubmitApplicationMutation as p, useUninstallApplicationMutation as m, useUpdateApplicationMutation as h } from "../../generated/global-operations.js";
6
+ import { PageLayout as g, PageSection as _ } from "../components/PageLayout.js";
7
+ import { APP_TYPE_LABELS as v } from "../utils/constants.js";
8
+ import { FeaturedBadge as y, StatusBadge as b, VerifiedBadge as x } from "../components/StatusBadge.js";
9
+ import { SelectionCheckbox as S } from "../components/SelectionCheckbox.js";
10
+ import { nativeNotify as C } from "../../utils/nativeBridge.js";
11
+ import { NewSecretAlert as ee } from "../components/SecretDisplay.js";
12
+ import { DataTable as w, DetailList as T } from "../components/DataTable.js";
13
+ import { InputField as E, SelectField as D, TextareaField as O } from "../components/FormField.js";
14
14
  import { ConfirmDialog as te } from "../components/ConfirmDialog.js";
15
- import { GrantDelegationModal as D } from "../components/GrantDelegationModal.js";
16
- import { DEVPORTAL_PERMISSIONS as O } from "../constants/permissions.js";
17
- import { useDevportalPermission as k } from "../hooks/usePermission.js";
18
- import { usePackageUpload as A } from "../hooks/usePackageUpload.js";
19
- import { useCallback as j, useEffect as ne, useMemo as M, useRef as N, useState as P } from "react";
20
- import { useI18n as F } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
21
- import { AlertCircle as re, AppWindow as ie, BarChart3 as I, CheckCircle as L, Clock as ae, Download as oe, Edit as se, ExternalLink as R, FlaskConical as ce, Info as z, Key as B, Loader2 as V, MoreHorizontal as H, Plus as U, Power as le, RefreshCw as ue, Shield as W, Store as de, Upload as G, Users as fe, Webhook as pe, X as me, XCircle as K } from "lucide-react";
22
- import { useParams as he } from "react-router-dom";
15
+ import { GrantDelegationModal as k } from "../components/GrantDelegationModal.js";
16
+ import { DEVPORTAL_PERMISSIONS as A } from "../constants/permissions.js";
17
+ import { useDevportalPermission as ne } from "../hooks/usePermission.js";
18
+ import { usePackageUpload as j } from "../hooks/usePackageUpload.js";
19
+ import { useCallback as M, useEffect as re, useMemo as N, useRef as P, useState as F } from "react";
20
+ import { useI18n as I } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
21
+ import { AlertCircle as ie, AppWindow as ae, BarChart3 as L, CheckCircle as R, Clock as oe, Download as se, Edit as ce, ExternalLink as z, FlaskConical as le, Info as ue, Key as B, Loader2 as V, MoreHorizontal as de, Plus as H, Power as fe, RefreshCw as pe, Shield as U, Store as me, Upload as W, Users as G, Webhook as he, X as K, XCircle as ge } from "lucide-react";
22
+ import { useParams as _e } from "react-router-dom";
23
23
  import { Fragment as q, jsx as J, jsxs as Y } from "react/jsx-runtime";
24
24
  //#region src/devportal/pages/ApplicationDetailPage.tsx
25
- function ge(e) {
25
+ function ve(e) {
26
26
  return e ? {
27
27
  id: e.id,
28
28
  name: e.name,
@@ -62,7 +62,7 @@ function ge(e) {
62
62
  updatedAt: e.updatedAt
63
63
  } : null;
64
64
  }
65
- function _e(e) {
65
+ function X(e) {
66
66
  return {
67
67
  id: e.id,
68
68
  applicationId: e.applicationId,
@@ -86,7 +86,7 @@ function _e(e) {
86
86
  updatedAt: e.updatedAt
87
87
  };
88
88
  }
89
- function ve(e) {
89
+ function ye(e) {
90
90
  return {
91
91
  id: e.id,
92
92
  applicationId: e.applicationId,
@@ -102,7 +102,7 @@ function ve(e) {
102
102
  createdAt: e.createdAt
103
103
  };
104
104
  }
105
- function ye(e) {
105
+ function be(e) {
106
106
  return {
107
107
  id: e.id,
108
108
  appId: e.appId,
@@ -124,16 +124,16 @@ function ye(e) {
124
124
  revokedBy: e.revokedBy || void 0
125
125
  };
126
126
  }
127
- var be = [
127
+ var xe = [
128
128
  {
129
129
  id: "overview",
130
130
  label: "Overview",
131
- icon: ie
131
+ icon: ae
132
132
  },
133
133
  {
134
134
  id: "oauth",
135
135
  label: "OAuth Clients",
136
- icon: W
136
+ icon: U
137
137
  },
138
138
  {
139
139
  id: "api-keys",
@@ -143,33 +143,33 @@ var be = [
143
143
  {
144
144
  id: "webhooks",
145
145
  label: "Webhooks",
146
- icon: pe
146
+ icon: he
147
147
  },
148
148
  {
149
149
  id: "delegations",
150
150
  label: "Delegations",
151
- icon: fe
151
+ icon: G
152
152
  },
153
153
  {
154
154
  id: "analytics",
155
155
  label: "Analytics",
156
- icon: I
156
+ icon: L
157
157
  },
158
158
  {
159
159
  id: "playground",
160
160
  label: "API Playground",
161
- icon: R
161
+ icon: z
162
162
  },
163
163
  {
164
164
  id: "store-listing",
165
165
  label: "Store Listing",
166
- icon: de
166
+ icon: me
167
167
  }
168
- ], xe = {
168
+ ], Se = {
169
169
  ACTIVE: "bg-status-success-bg-subtle text-status-success-text",
170
170
  REVOKED: "bg-status-error-bg-subtle text-status-error-text",
171
171
  EXPIRED: "bg-bg-sunken text-text-secondary"
172
- }, X = ({ message: e = "Loading..." }) => /* @__PURE__ */ Y("div", {
172
+ }, Ce = ({ message: e = "Loading..." }) => /* @__PURE__ */ Y("div", {
173
173
  className: "flex items-center justify-center gap-3 py-12",
174
174
  children: [/* @__PURE__ */ J(V, {
175
175
  size: 20,
@@ -180,146 +180,169 @@ var be = [
180
180
  })]
181
181
  }), Z = ({ message: e }) => /* @__PURE__ */ Y("div", {
182
182
  className: "flex flex-col items-center justify-center gap-2 py-12 text-center",
183
- children: [/* @__PURE__ */ J(re, {
183
+ children: [/* @__PURE__ */ J(ie, {
184
184
  size: 32,
185
185
  className: "text-destructive"
186
186
  }), /* @__PURE__ */ J("p", {
187
187
  className: "text-sm text-muted-foreground",
188
188
  children: e
189
189
  })]
190
- }), Se = () => {
191
- let { navigate: i, basePath: o, workspaceId: c } = e(), { t: u } = F(), f = (e, t) => {
192
- let n = u(e);
190
+ }), we = () => {
191
+ let { navigate: i, basePath: o, workspaceId: c } = e(), { t: d } = I(), p = (e, t) => {
192
+ let n = d(e);
193
193
  return n === e ? t : n;
194
- }, { allowed: p } = k(O.APP_UPDATE), { allowed: h } = k(O.APP_DELETE), { appId: b } = he(), [C, ee] = P("overview"), [w, T] = P(!1), [E, A] = P(!1), [ne, M] = P(null), [N, I] = P(!1), { data: L, loading: oe, error: R } = s({
195
- variables: { id: b },
196
- skip: !b
197
- }), [z, { loading: B }] = d(), [H, { loading: U }] = a(), [W, { loading: de }] = l(), G = j((e) => {
194
+ }, { allowed: h } = ne(A.APP_UPDATE), { allowed: _ } = ne(A.APP_DELETE), { appId: S } = _e(), [w, T] = F("overview"), [E, D] = F(!1), [O, j] = F(!1), [re, N] = F(null), [P, L] = F(!1), { data: R, loading: se, error: z } = s({
195
+ variables: { id: S },
196
+ skip: !S
197
+ }), [ue, { loading: B }] = f(), [de, { loading: H }] = a(), [U, { loading: me }] = u(), [W, { loading: G }] = m(), { data: he, refetch: K } = l({
198
+ variables: {
199
+ applicationId: S,
200
+ workspaceId: c ?? void 0
201
+ },
202
+ skip: !c || !S,
203
+ fetchPolicy: "cache-and-network"
204
+ }), q = he?.appInstallations?.edges?.[0]?.node ?? null, X = M((e) => {
198
205
  i?.(`${o}${e}`);
199
- }, [i, o]), fe = j(async () => {
200
- let e = L?.application?.appId;
206
+ }, [i, o]), ye = M(async () => {
207
+ let e = R?.application?.appId;
201
208
  if (e) try {
202
- let t = (await z({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
203
- t && M(t), T(!1);
209
+ let t = (await ue({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
210
+ t && N(t), D(!1);
204
211
  } catch {}
205
- }, [L?.application?.appId, z]), pe = j(async () => {
206
- if (b) try {
207
- await H({ variables: { id: b } }), A(!1), G("/apps");
212
+ }, [R?.application?.appId, ue]), be = M(async () => {
213
+ if (S) try {
214
+ await de({ variables: { id: S } }), j(!1), X("/apps");
208
215
  } catch {}
209
216
  }, [
210
- b,
211
- H,
212
- G
213
- ]), me = j(async () => {
214
- if (!(!b || !c)) try {
215
- await W({ variables: { input: {
216
- applicationId: b,
217
+ S,
218
+ de,
219
+ X
220
+ ]), Se = M(async () => {
221
+ if (!(!S || !c)) try {
222
+ await U({ variables: { input: {
223
+ applicationId: S,
217
224
  scope: "WORKSPACE",
218
225
  workspaceId: c,
219
226
  autoUpdate: !1
220
- } } }), x("success");
227
+ } } }), K(), C("success");
221
228
  } catch {
222
- x("error");
229
+ C("error");
223
230
  }
224
231
  }, [
225
- b,
232
+ S,
226
233
  c,
227
- W
228
- ]);
229
- if (oe && !L) return /* @__PURE__ */ J(n, { message: f("devportal.loadingApplication", "Loading application...") });
230
- if (R) return /* @__PURE__ */ J(m, {
231
- title: f("devportal.error", "Error"),
234
+ U,
235
+ K
236
+ ]), Ce = M(async (e) => {
237
+ try {
238
+ await W({ variables: { id: e } }), K(), C("success");
239
+ } catch {
240
+ C("error");
241
+ }
242
+ }, [W, K]);
243
+ if (se && !R) return /* @__PURE__ */ J(n, { message: p("devportal.loadingApplication", "Loading application...") });
244
+ if (z) return /* @__PURE__ */ J(g, {
245
+ title: p("devportal.error", "Error"),
232
246
  backLink: `${o}/apps`,
233
- backLabel: f("devportal.backToApplications", "Back to Applications"),
247
+ backLabel: p("devportal.backToApplications", "Back to Applications"),
234
248
  children: /* @__PURE__ */ Y("div", {
235
249
  className: "flex flex-col items-center justify-center py-12 text-center",
236
250
  children: [
237
- /* @__PURE__ */ J(re, {
251
+ /* @__PURE__ */ J(ie, {
238
252
  size: 48,
239
253
  className: "text-destructive mb-4"
240
254
  }),
241
255
  /* @__PURE__ */ J("h3", {
242
256
  className: "text-lg font-semibold mb-2",
243
- children: f("devportal.failedToLoadApplication", "Failed to load application")
257
+ children: p("devportal.failedToLoadApplication", "Failed to load application")
244
258
  }),
245
259
  /* @__PURE__ */ J("p", {
246
260
  className: "text-sm text-muted-foreground",
247
- children: R.message
261
+ children: z.message
248
262
  })
249
263
  ]
250
264
  })
251
265
  });
252
- let K = ge(L?.application);
253
- return K ? /* @__PURE__ */ Y(m, {
254
- title: K.name,
255
- description: K.shortDescription,
266
+ let Z = ve(R?.application);
267
+ return Z ? /* @__PURE__ */ Y(g, {
268
+ title: Z.name,
269
+ description: Z.shortDescription,
256
270
  backLink: `${o}/apps`,
257
- backLabel: f("devportal.backToApplications", "Back to Applications"),
271
+ backLabel: p("devportal.backToApplications", "Back to Applications"),
258
272
  actions: /* @__PURE__ */ Y("div", {
259
273
  className: "flex items-center gap-2",
260
274
  children: [
261
275
  /* @__PURE__ */ Y("button", {
262
- onClick: () => T(!0),
263
- disabled: !K.appId,
264
- title: K.appId ? f("devportal.rotateSecretHint", "Generate a new client secret") : f("devportal.rotateSecretNoClient", "Create an OAuth client first to enable secret rotation"),
276
+ onClick: () => D(!0),
277
+ disabled: !Z.appId,
278
+ title: Z.appId ? p("devportal.rotateSecretHint", "Generate a new client secret") : p("devportal.rotateSecretNoClient", "Create an OAuth client first to enable secret rotation"),
265
279
  className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-muted transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
266
- children: [/* @__PURE__ */ J(ue, { size: 16 }), f("devportal.rotateSecret", "Rotate Secret")]
280
+ children: [/* @__PURE__ */ J(pe, { size: 16 }), p("devportal.rotateSecret", "Rotate Secret")]
267
281
  }),
268
282
  /* @__PURE__ */ Y("button", {
269
- onClick: () => G(`/apps/${K.id}/versions`),
283
+ onClick: () => X(`/apps/${Z.id}/versions`),
270
284
  className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-muted transition-colors",
271
- children: [/* @__PURE__ */ J(ae, { size: 16 }), f("devportal.versions", "Versions")]
285
+ children: [/* @__PURE__ */ J(oe, { size: 16 }), p("devportal.versions", "Versions")]
272
286
  }),
273
- /* @__PURE__ */ Y("button", {
274
- onClick: () => void me(),
275
- disabled: de || !c,
287
+ q ? /* @__PURE__ */ Y("button", {
288
+ onClick: () => void Ce(q.id),
289
+ disabled: G || !c,
290
+ title: p("devportal.uninstallFromWorkspace", "Uninstall this app from your current workspace"),
291
+ className: "inline-flex items-center gap-2 rounded-md border border-destructive/50 px-4 py-2 text-sm font-medium text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-50",
292
+ children: [G ? /* @__PURE__ */ J(V, {
293
+ size: 16,
294
+ className: "animate-spin"
295
+ }) : /* @__PURE__ */ J(ge, { size: 16 }), p("devportal.uninstallFromWorkspace", "Uninstall from Workspace")]
296
+ }) : /* @__PURE__ */ Y("button", {
297
+ onClick: () => void Se(),
298
+ disabled: me || !c,
276
299
  "aria-disabled": !c,
277
- title: c ? f("devportal.testInWorkspaceHint", "Install this app into your current workspace to test it") : f("devportal.noWorkspaceContext", "No workspace context available"),
300
+ title: c ? p("devportal.testInWorkspaceHint", "Install this app into your current workspace to test it") : p("devportal.noWorkspaceContext", "No workspace context available"),
278
301
  className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-muted transition-colors disabled:opacity-50",
279
- children: [de ? /* @__PURE__ */ J(V, {
302
+ children: [me ? /* @__PURE__ */ J(V, {
280
303
  size: 16,
281
304
  className: "animate-spin"
282
- }) : /* @__PURE__ */ J(ce, { size: 16 }), f("devportal.testInWorkspace", "Test in Workspace")]
305
+ }) : /* @__PURE__ */ J(le, { size: 16 }), p("devportal.testInWorkspace", "Test in Workspace")]
283
306
  }),
284
307
  /* @__PURE__ */ Y("button", {
285
- onClick: () => G(`/apps/${K.id}/edit`),
286
- disabled: !p,
287
- "aria-disabled": !p,
308
+ onClick: () => X(`/apps/${Z.id}/edit`),
309
+ disabled: !h,
310
+ "aria-disabled": !h,
288
311
  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 transition-colors disabled:opacity-50",
289
- children: [/* @__PURE__ */ J(se, { size: 16 }), f("devportal.editApp", "Edit App")]
312
+ children: [/* @__PURE__ */ J(ce, { size: 16 }), p("devportal.editApp", "Edit App")]
290
313
  }),
291
314
  /* @__PURE__ */ Y("button", {
292
- onClick: () => A(!0),
293
- disabled: !h,
294
- "aria-disabled": !h,
315
+ onClick: () => j(!0),
316
+ disabled: !_,
317
+ "aria-disabled": !_,
295
318
  className: "inline-flex items-center gap-2 rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle transition-colors disabled:opacity-50",
296
- children: [/* @__PURE__ */ J(le, { size: 16 }), f("devportal.deactivate", "Deactivate")]
319
+ children: [/* @__PURE__ */ J(fe, { size: 16 }), p("devportal.deactivate", "Deactivate")]
297
320
  })
298
321
  ]
299
322
  }),
300
323
  children: [
301
- ne && /* @__PURE__ */ J(S, {
302
- title: f("devportal.newAppSecretGenerated", "New App Secret Generated"),
303
- secret: ne,
304
- description: f("devportal.appSecretRotatedDescription", "Your app secret has been rotated. The old secret is no longer valid."),
305
- onDismiss: () => M(null)
324
+ re && /* @__PURE__ */ J(ee, {
325
+ title: p("devportal.newAppSecretGenerated", "New App Secret Generated"),
326
+ secret: re,
327
+ description: p("devportal.appSecretRotatedDescription", "Your app secret has been rotated. The old secret is no longer valid."),
328
+ onDismiss: () => N(null)
306
329
  }),
307
330
  /* @__PURE__ */ Y("div", {
308
331
  className: "flex flex-wrap items-center gap-2",
309
332
  children: [
310
- /* @__PURE__ */ J(v, {
311
- status: K.status,
333
+ /* @__PURE__ */ J(b, {
334
+ status: Z.status,
312
335
  type: "app"
313
336
  }),
314
- /* @__PURE__ */ J(v, {
315
- status: K.visibility,
337
+ /* @__PURE__ */ J(b, {
338
+ status: Z.visibility,
316
339
  type: "app"
317
340
  }),
318
- K.isVerified && /* @__PURE__ */ J(y, { verified: !0 }),
319
- K.isFeatured && /* @__PURE__ */ J(_, {}),
341
+ Z.isVerified && /* @__PURE__ */ J(x, { verified: !0 }),
342
+ Z.isFeatured && /* @__PURE__ */ J(y, {}),
320
343
  /* @__PURE__ */ J("span", {
321
344
  className: "text-sm text-muted-foreground",
322
- children: g[K.appType] || K.appType
345
+ children: v[Z.appType] || Z.appType
323
346
  })
324
347
  ]
325
348
  }),
@@ -328,16 +351,16 @@ var be = [
328
351
  children: /* @__PURE__ */ J("nav", {
329
352
  className: "-mb-px flex gap-4 overflow-x-auto",
330
353
  role: "tablist",
331
- "aria-label": f("devportal.applicationSections", "Application sections"),
332
- children: be.map((e) => {
354
+ "aria-label": p("devportal.applicationSections", "Application sections"),
355
+ children: xe.map((e) => {
333
356
  let n = e.icon;
334
357
  return /* @__PURE__ */ Y("button", {
335
358
  id: `application-tab-${e.id}`,
336
359
  role: "tab",
337
- "aria-selected": C === e.id,
360
+ "aria-selected": w === e.id,
338
361
  "aria-controls": `application-panel-${e.id}`,
339
- onClick: () => ee(e.id),
340
- className: t("flex items-center gap-2 border-b-2 px-1 py-3 text-sm font-medium transition-colors", C === e.id ? "border-primary text-primary" : "border-transparent text-muted-foreground hover:text-foreground hover:border-muted-foreground"),
362
+ onClick: () => T(e.id),
363
+ className: t("flex items-center gap-2 border-b-2 px-1 py-3 text-sm font-medium transition-colors", w === e.id ? "border-primary text-primary" : "border-transparent text-muted-foreground hover:text-foreground hover:border-muted-foreground"),
341
364
  children: [/* @__PURE__ */ J(n, { size: 16 }), e.label]
342
365
  }, e.id);
343
366
  })
@@ -345,87 +368,87 @@ var be = [
345
368
  }),
346
369
  /* @__PURE__ */ Y("div", {
347
370
  className: "mt-6",
348
- id: `application-panel-${C}`,
371
+ id: `application-panel-${w}`,
349
372
  role: "tabpanel",
350
- "aria-labelledby": `application-tab-${C}`,
373
+ "aria-labelledby": `application-tab-${w}`,
351
374
  tabIndex: 0,
352
375
  children: [
353
- C === "overview" && /* @__PURE__ */ J(Oe, { app: K }),
354
- C === "oauth" && /* @__PURE__ */ J(Ce, {
355
- appId: K.appId || K.id,
356
- onNavigate: G
376
+ w === "overview" && /* @__PURE__ */ J(Ae, { app: Z }),
377
+ w === "oauth" && /* @__PURE__ */ J(Te, {
378
+ appId: Z.appId || Z.id,
379
+ onNavigate: X
357
380
  }),
358
- C === "api-keys" && /* @__PURE__ */ J(we, {
359
- appId: K.appId || K.id,
360
- onNavigate: G
381
+ w === "api-keys" && /* @__PURE__ */ J(Ee, {
382
+ appId: Z.appId || Z.id,
383
+ onNavigate: X
361
384
  }),
362
- C === "webhooks" && /* @__PURE__ */ J(Te, {
363
- appId: K.id,
364
- onNavigate: G
385
+ w === "webhooks" && /* @__PURE__ */ J(De, {
386
+ appId: Z.id,
387
+ onNavigate: X
365
388
  }),
366
- C === "delegations" && /* @__PURE__ */ J(Ee, {
367
- authAppId: K.appId || void 0,
368
- appName: K.name,
369
- onGrantDelegation: () => I(!0),
370
- onNavigate: G
389
+ w === "delegations" && /* @__PURE__ */ J(Oe, {
390
+ authAppId: Z.appId || void 0,
391
+ appName: Z.name,
392
+ onGrantDelegation: () => L(!0),
393
+ onNavigate: X
371
394
  }),
372
- C === "analytics" && /* @__PURE__ */ J(De, { appId: K.id }),
373
- C === "playground" && /* @__PURE__ */ J(Ne, { app: K }),
374
- C === "store-listing" && /* @__PURE__ */ J(Be, { app: K })
395
+ w === "analytics" && /* @__PURE__ */ J(ke, { appId: Z.id }),
396
+ w === "playground" && /* @__PURE__ */ J(Fe, { app: Z }),
397
+ w === "store-listing" && /* @__PURE__ */ J(He, { app: Z })
375
398
  ]
376
399
  }),
377
400
  /* @__PURE__ */ J(te, {
378
- open: w,
379
- onOpenChange: T,
380
- onConfirm: fe,
381
- title: f("devportal.rotateAppSecret", "Rotate App Secret"),
382
- description: f("devportal.rotateAppSecretDescription", "This will generate a new client secret and invalidate the current one. All existing integrations using the old secret will stop working immediately."),
383
- confirmLabel: f("devportal.rotateSecret", "Rotate Secret"),
384
- cancelLabel: f("devportal.cancel", "Cancel"),
401
+ open: E,
402
+ onOpenChange: D,
403
+ onConfirm: ye,
404
+ title: p("devportal.rotateAppSecret", "Rotate App Secret"),
405
+ description: p("devportal.rotateAppSecretDescription", "This will generate a new client secret and invalidate the current one. All existing integrations using the old secret will stop working immediately."),
406
+ confirmLabel: p("devportal.rotateSecret", "Rotate Secret"),
407
+ cancelLabel: p("devportal.cancel", "Cancel"),
385
408
  variant: "warning",
386
409
  loading: B
387
410
  }),
388
411
  /* @__PURE__ */ J(te, {
389
- open: E,
390
- onOpenChange: A,
391
- onConfirm: pe,
392
- title: f("devportal.deactivateApplication", "Deactivate Application"),
393
- description: f("devportal.deactivateApplicationDescription", "This will deactivate the application. All OAuth clients, API keys, and webhooks associated with this app will stop functioning. This action can be reversed by reactivating the app."),
394
- confirmLabel: f("devportal.deactivate", "Deactivate"),
395
- cancelLabel: f("devportal.cancel", "Cancel"),
412
+ open: O,
413
+ onOpenChange: j,
414
+ onConfirm: be,
415
+ title: p("devportal.deactivateApplication", "Deactivate Application"),
416
+ description: p("devportal.deactivateApplicationDescription", "This will deactivate the application. All OAuth clients, API keys, and webhooks associated with this app will stop functioning. This action can be reversed by reactivating the app."),
417
+ confirmLabel: p("devportal.deactivate", "Deactivate"),
418
+ cancelLabel: p("devportal.cancel", "Cancel"),
396
419
  variant: "destructive",
397
- loading: U
420
+ loading: H
398
421
  }),
399
- /* @__PURE__ */ J(D, {
400
- open: N,
401
- onOpenChange: I,
402
- appId: K.appId || "",
403
- appName: K.name,
404
- appScopes: K.scopes?.map((e) => e.scope) ?? [],
422
+ /* @__PURE__ */ J(k, {
423
+ open: P,
424
+ onOpenChange: L,
425
+ appId: Z.appId || "",
426
+ appName: Z.name,
427
+ appScopes: Z.scopes?.map((e) => e.scope) ?? [],
405
428
  onSuccess: () => {
406
- I(!1);
429
+ L(!1);
407
430
  }
408
431
  })
409
432
  ]
410
- }) : /* @__PURE__ */ J(m, {
411
- title: f("devportal.notFound", "Not Found"),
433
+ }) : /* @__PURE__ */ J(g, {
434
+ title: p("devportal.notFound", "Not Found"),
412
435
  backLink: `${o}/apps`,
413
- backLabel: f("devportal.backToApplications", "Back to Applications"),
436
+ backLabel: p("devportal.backToApplications", "Back to Applications"),
414
437
  children: /* @__PURE__ */ J(r, {
415
- icon: /* @__PURE__ */ J(ie, { size: 48 }),
416
- title: f("devportal.applicationNotFound", "Application not found"),
417
- description: f("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
438
+ icon: /* @__PURE__ */ J(ae, { size: 48 }),
439
+ title: p("devportal.applicationNotFound", "Application not found"),
440
+ description: p("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
418
441
  })
419
442
  });
420
- }, Ce = ({ onNavigate: e }) => {
421
- let { t } = F(), n = (e, n) => {
443
+ }, Te = ({ onNavigate: e }) => {
444
+ let { t } = I(), n = (e, n) => {
422
445
  let r = t(e);
423
446
  return r === e ? n : r;
424
447
  };
425
448
  return /* @__PURE__ */ Y("div", {
426
449
  className: "space-y-4 py-4 text-center",
427
450
  children: [
428
- /* @__PURE__ */ J(W, { className: "mx-auto h-10 w-10 text-muted-foreground" }),
451
+ /* @__PURE__ */ J(U, { className: "mx-auto h-10 w-10 text-muted-foreground" }),
429
452
  /* @__PURE__ */ J("h3", {
430
453
  className: "font-medium",
431
454
  children: n("devportal.oauthApps", "OAuth Apps")
@@ -437,12 +460,12 @@ var be = [
437
460
  /* @__PURE__ */ Y("button", {
438
461
  onClick: () => e("/oauth"),
439
462
  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 transition-colors",
440
- children: [/* @__PURE__ */ J(R, { size: 16 }), n("devportal.manageOAuthApps", "Manage OAuth Apps")]
463
+ children: [/* @__PURE__ */ J(z, { size: 16 }), n("devportal.manageOAuthApps", "Manage OAuth Apps")]
441
464
  })
442
465
  ]
443
466
  });
444
- }, we = ({ onNavigate: e }) => {
445
- let { t } = F(), n = (e, n) => {
467
+ }, Ee = ({ onNavigate: e }) => {
468
+ let { t } = I(), n = (e, n) => {
446
469
  let r = t(e);
447
470
  return r === e ? n : r;
448
471
  };
@@ -461,39 +484,39 @@ var be = [
461
484
  /* @__PURE__ */ Y("button", {
462
485
  onClick: () => e("/api-keys"),
463
486
  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 transition-colors",
464
- children: [/* @__PURE__ */ J(R, { size: 16 }), n("devportal.manageApiKeys", "Manage API Keys")]
487
+ children: [/* @__PURE__ */ J(z, { size: 16 }), n("devportal.manageApiKeys", "Manage API Keys")]
465
488
  })
466
489
  ]
467
490
  });
468
- }, Te = ({ appId: e, onNavigate: t }) => {
469
- let { t: n } = F(), r = (e, t) => {
491
+ }, De = ({ appId: e, onNavigate: t }) => {
492
+ let { t: n } = I(), r = (e, t) => {
470
493
  let r = n(e);
471
494
  return r === e ? t : r;
472
495
  }, { data: i, loading: a, error: o } = c({ variables: { applicationId: e } });
473
- return a ? /* @__PURE__ */ J(X, { message: r("devportal.loadingWebhooks", "Loading webhooks...") }) : o ? /* @__PURE__ */ J(Z, { message: o.message }) : /* @__PURE__ */ J(ke, {
496
+ return a ? /* @__PURE__ */ J(Ce, { message: r("devportal.loadingWebhooks", "Loading webhooks...") }) : o ? /* @__PURE__ */ J(Z, { message: o.message }) : /* @__PURE__ */ J(je, {
474
497
  appId: e,
475
- webhooks: (i?.webhooks ?? []).map(_e),
498
+ webhooks: (i?.webhooks ?? []).map(X),
476
499
  onNavigate: t
477
500
  });
478
- }, Ee = ({ authAppId: e, appName: t, onGrantDelegation: n, onNavigate: a }) => {
479
- let { t: o } = F(), s = (e, t) => {
501
+ }, Oe = ({ authAppId: e, appName: t, onGrantDelegation: n, onNavigate: a }) => {
502
+ let { t: o } = I(), s = (e, t) => {
480
503
  let n = o(e);
481
504
  return n === e ? t : n;
482
- }, { data: c, loading: l, error: d, refetch: f } = i(), [p] = u(), [m, h] = P([]), [g, _] = P(!1), [v, y] = P(/* @__PURE__ */ new Set()), [b, x] = P(null), S = M(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(ye) : [], [e, c]), C = M(() => S.filter((e) => e.status === "ACTIVE"), [S]), ee = M(() => C.filter((e) => v.has(e.id)), [C, v]), w = C.length > 0 && C.every((e) => v.has(e.id)), T = C.some((e) => v.has(e.id)) && !w, E = j((e, t) => {
505
+ }, { data: c, loading: l, error: u, refetch: f } = i(), [p] = d(), [m, h] = F([]), [g, _] = F(!1), [v, y] = F(/* @__PURE__ */ new Set()), [b, x] = F(null), S = N(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(be) : [], [e, c]), C = N(() => S.filter((e) => e.status === "ACTIVE"), [S]), ee = N(() => C.filter((e) => v.has(e.id)), [C, v]), w = C.length > 0 && C.every((e) => v.has(e.id)), T = C.some((e) => v.has(e.id)) && !w, E = M((e, t) => {
483
506
  y((n) => {
484
507
  let r = new Set(n);
485
508
  return t ? r.add(e) : r.delete(e), r;
486
509
  });
487
- }, []), D = j((e) => {
510
+ }, []), D = M((e) => {
488
511
  y((t) => {
489
512
  let n = new Set(t);
490
513
  return C.forEach((t) => {
491
514
  e ? n.add(t.id) : n.delete(t.id);
492
515
  }), n;
493
516
  });
494
- }, [C]), O = j(() => {
517
+ }, [C]), O = M(() => {
495
518
  y(/* @__PURE__ */ new Set());
496
- }, []), k = j(async (e) => {
519
+ }, []), k = M(async (e) => {
497
520
  _(!0);
498
521
  try {
499
522
  let t = await Promise.allSettled(e.map((e) => p({ variables: { id: e } }))), n = t.filter((e) => e.status === "fulfilled").length, r = t.length - n;
@@ -505,7 +528,7 @@ var be = [
505
528
  _(!1);
506
529
  }
507
530
  }, [p, f]);
508
- return e ? l ? /* @__PURE__ */ J(X, { message: s("devportal.loadingDelegations", "Loading delegations...") }) : d ? /* @__PURE__ */ J(Z, { message: d.message }) : /* @__PURE__ */ Y(q, { children: [
531
+ return e ? l ? /* @__PURE__ */ J(Ce, { message: s("devportal.loadingDelegations", "Loading delegations...") }) : u ? /* @__PURE__ */ J(Z, { message: u.message }) : /* @__PURE__ */ Y(q, { children: [
509
532
  b && /* @__PURE__ */ J("div", {
510
533
  className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 text-sm text-status-success-text",
511
534
  children: /* @__PURE__ */ Y("div", {
@@ -517,7 +540,7 @@ var be = [
517
540
  })]
518
541
  })
519
542
  }),
520
- /* @__PURE__ */ J(Ae, {
543
+ /* @__PURE__ */ J(Me, {
521
544
  appName: t,
522
545
  delegations: S,
523
546
  onGrantDelegation: n,
@@ -546,31 +569,31 @@ var be = [
546
569
  loading: g
547
570
  })
548
571
  ] }) : /* @__PURE__ */ J(r, {
549
- icon: /* @__PURE__ */ J(W, { size: 32 }),
572
+ icon: /* @__PURE__ */ J(U, { size: 32 }),
550
573
  title: s("devportal.linkAuthAppFirst", "Link an auth app first"),
551
574
  description: s("devportal.linkAuthAppFirstDescription", "Delegations are managed through auth apps. Create or link an auth app before granting app-as-user access."),
552
575
  action: /* @__PURE__ */ Y("button", {
553
576
  onClick: () => a("/oauth"),
554
577
  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",
555
- children: [/* @__PURE__ */ J(R, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
578
+ children: [/* @__PURE__ */ J(z, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
556
579
  })
557
580
  });
558
- }, De = ({ appId: e }) => {
559
- let { t } = F(), n = (e, n) => {
581
+ }, ke = ({ appId: e }) => {
582
+ let { t } = I(), n = (e, n) => {
560
583
  let r = t(e);
561
584
  return r === e ? n : r;
562
- }, r = M(() => /* @__PURE__ */ new Date(), []), { data: i, loading: a, error: s } = o({ variables: {
585
+ }, r = N(() => /* @__PURE__ */ new Date(), []), { data: i, loading: a, error: s } = o({ variables: {
563
586
  applicationId: e,
564
587
  period: "daily",
565
- startDate: M(() => {
588
+ startDate: N(() => {
566
589
  let e = new Date(r);
567
590
  return e.setDate(e.getDate() - 30), e;
568
591
  }, [r]).toISOString(),
569
592
  endDate: r.toISOString()
570
593
  } });
571
- return a ? /* @__PURE__ */ J(X, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : s ? /* @__PURE__ */ J(Z, { message: s.message }) : /* @__PURE__ */ J(je, { analytics: (i?.applicationAnalytics ?? []).map(ve) });
572
- }, Oe = ({ app: e }) => {
573
- let { t } = F(), n = (e, n) => {
594
+ return a ? /* @__PURE__ */ J(Ce, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : s ? /* @__PURE__ */ J(Z, { message: s.message }) : /* @__PURE__ */ J(Ne, { analytics: (i?.applicationAnalytics ?? []).map(ye) });
595
+ }, Ae = ({ app: e }) => {
596
+ let { t } = I(), n = (e, n) => {
574
597
  let r = t(e);
575
598
  return r === e ? n : r;
576
599
  };
@@ -600,7 +623,7 @@ var be = [
600
623
  })
601
624
  ]
602
625
  }),
603
- /* @__PURE__ */ J(h, {
626
+ /* @__PURE__ */ J(_, {
604
627
  title: n("devportal.description", "Description"),
605
628
  children: /* @__PURE__ */ J("div", {
606
629
  className: "prose prose-sm max-w-none",
@@ -610,7 +633,7 @@ var be = [
610
633
  })
611
634
  })
612
635
  }),
613
- /* @__PURE__ */ J(h, {
636
+ /* @__PURE__ */ J(_, {
614
637
  title: n("devportal.tagsAndKeywords", "Tags & Keywords"),
615
638
  children: /* @__PURE__ */ Y("div", {
616
639
  className: "space-y-3",
@@ -638,9 +661,9 @@ var be = [
638
661
  ]
639
662
  }), /* @__PURE__ */ Y("div", {
640
663
  className: "space-y-6",
641
- children: [/* @__PURE__ */ J(h, {
664
+ children: [/* @__PURE__ */ J(_, {
642
665
  title: n("devportal.details", "Details"),
643
- children: /* @__PURE__ */ J(ee, { items: [
666
+ children: /* @__PURE__ */ J(T, { items: [
644
667
  {
645
668
  label: n("devportal.appId", "App ID"),
646
669
  value: /* @__PURE__ */ J("code", {
@@ -673,7 +696,7 @@ var be = [
673
696
  value: e.publishedAt ? new Date(e.publishedAt).toLocaleDateString() : n("devportal.notPublished", "Not published")
674
697
  }
675
698
  ] })
676
- }), /* @__PURE__ */ J(h, {
699
+ }), /* @__PURE__ */ J(_, {
677
700
  title: n("devportal.links", "Links"),
678
701
  children: /* @__PURE__ */ Y("div", {
679
702
  className: "space-y-2",
@@ -707,8 +730,8 @@ var be = [
707
730
  })]
708
731
  })]
709
732
  });
710
- }, ke = ({ appId: e, webhooks: t, onNavigate: n }) => {
711
- let { t: i } = F(), a = (e, t) => {
733
+ }, je = ({ appId: e, webhooks: t, onNavigate: n }) => {
734
+ let { t: i } = I(), a = (e, t) => {
712
735
  let n = i(e);
713
736
  return n === e ? t : n;
714
737
  };
@@ -728,7 +751,7 @@ var be = [
728
751
  }), /* @__PURE__ */ Y("button", {
729
752
  onClick: () => n(`/apps/${e}/webhooks/new`),
730
753
  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 transition-colors",
731
- children: [/* @__PURE__ */ J(U, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
754
+ children: [/* @__PURE__ */ J(H, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
732
755
  })]
733
756
  }), t.length > 0 ? /* @__PURE__ */ J("div", {
734
757
  className: "space-y-4",
@@ -742,7 +765,7 @@ var be = [
742
765
  children: [/* @__PURE__ */ J("h3", {
743
766
  className: "font-medium",
744
767
  children: t.name
745
- }), /* @__PURE__ */ J(v, {
768
+ }), /* @__PURE__ */ J(b, {
746
769
  status: t.status,
747
770
  type: "webhook"
748
771
  })]
@@ -752,7 +775,7 @@ var be = [
752
775
  })] }), /* @__PURE__ */ J("button", {
753
776
  onClick: () => n(`/apps/${e}/webhooks/${t.id}`),
754
777
  className: "rounded-md p-1 hover:bg-muted",
755
- children: /* @__PURE__ */ J(H, { size: 20 })
778
+ children: /* @__PURE__ */ J(de, { size: 20 })
756
779
  })]
757
780
  }),
758
781
  /* @__PURE__ */ Y("div", { children: [/* @__PURE__ */ J("p", {
@@ -808,18 +831,18 @@ var be = [
808
831
  ]
809
832
  }, t.id))
810
833
  }) : /* @__PURE__ */ J(r, {
811
- icon: /* @__PURE__ */ J(pe, { size: 32 }),
834
+ icon: /* @__PURE__ */ J(he, { size: 32 }),
812
835
  title: a("devportal.noWebhooks", "No webhooks"),
813
836
  description: a("devportal.noWebhooksDescription", "Add a webhook to receive event notifications"),
814
837
  action: /* @__PURE__ */ Y("button", {
815
838
  onClick: () => n(`/apps/${e}/webhooks/new`),
816
839
  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",
817
- children: [/* @__PURE__ */ J(U, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
840
+ children: [/* @__PURE__ */ J(H, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
818
841
  })
819
842
  })]
820
843
  });
821
- }, Ae = ({ appName: e, delegations: n, onGrantDelegation: i, onRevokeDelegation: a, selectedDelegationIds: o, onToggleSelectDelegation: s, onToggleAllDelegations: c, onClearSelection: l, onRevokeSelected: u, allVisibleSelected: d, partiallySelected: f }) => {
822
- let { t: p } = F(), m = (e, t) => {
844
+ }, Me = ({ appName: e, delegations: n, onGrantDelegation: i, onRevokeDelegation: a, selectedDelegationIds: o, onToggleSelectDelegation: s, onToggleAllDelegations: c, onClearSelection: l, onRevokeSelected: u, allVisibleSelected: d, partiallySelected: f }) => {
845
+ let { t: p } = I(), m = (e, t) => {
823
846
  let n = p(e);
824
847
  return n === e ? t : n;
825
848
  }, h = n.filter((e) => e.status === "ACTIVE"), g = n.filter((e) => e.status !== "ACTIVE");
@@ -854,7 +877,7 @@ var be = [
854
877
  })] }), /* @__PURE__ */ Y("button", {
855
878
  onClick: i,
856
879
  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 transition-colors",
857
- children: [/* @__PURE__ */ J(U, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
880
+ children: [/* @__PURE__ */ J(H, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
858
881
  })]
859
882
  }),
860
883
  h.length > 0 && /* @__PURE__ */ J("div", {
@@ -865,7 +888,7 @@ var be = [
865
888
  className: "flex flex-wrap items-center gap-3",
866
889
  children: [/* @__PURE__ */ Y("div", {
867
890
  className: "flex items-center gap-2",
868
- children: [/* @__PURE__ */ J(b, {
891
+ children: [/* @__PURE__ */ J(S, {
869
892
  checked: d,
870
893
  indeterminate: f,
871
894
  onChange: c,
@@ -908,7 +931,7 @@ var be = [
908
931
  className: "flex items-start gap-3",
909
932
  children: [e.status === "ACTIVE" && /* @__PURE__ */ J("div", {
910
933
  onClick: (e) => e.stopPropagation(),
911
- children: /* @__PURE__ */ J(b, {
934
+ children: /* @__PURE__ */ J(S, {
912
935
  checked: o.has(e.id),
913
936
  onChange: (t) => s(e.id, t),
914
937
  ariaLabel: `Select delegation ${e.id}`,
@@ -920,7 +943,7 @@ var be = [
920
943
  className: "font-medium",
921
944
  children: ["Delegation #", e.id.slice(0, 8)]
922
945
  }), /* @__PURE__ */ J("span", {
923
- className: t("rounded-full px-2 py-0.5 text-xs font-medium", xe[e.status]),
946
+ className: t("rounded-full px-2 py-0.5 text-xs font-medium", Se[e.status]),
924
947
  children: e.status
925
948
  })]
926
949
  }), /* @__PURE__ */ Y("p", {
@@ -938,7 +961,7 @@ var be = [
938
961
  }), e.status === "ACTIVE" && /* @__PURE__ */ Y("button", {
939
962
  onClick: () => a(e.id),
940
963
  className: "inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-3 py-1.5 text-xs font-medium text-status-error-text hover:bg-status-error-bg-subtle transition-colors",
941
- children: [/* @__PURE__ */ J(K, { size: 14 }), m("devportal.revoke", "Revoke")]
964
+ children: [/* @__PURE__ */ J(ge, { size: 14 }), m("devportal.revoke", "Revoke")]
942
965
  })]
943
966
  }),
944
967
  /* @__PURE__ */ Y("div", { children: [/* @__PURE__ */ J("p", {
@@ -967,7 +990,7 @@ var be = [
967
990
  e.expiresAt && /* @__PURE__ */ Y("span", {
968
991
  className: "flex items-center gap-1",
969
992
  children: [
970
- /* @__PURE__ */ J(ae, { size: 12 }),
993
+ /* @__PURE__ */ J(oe, { size: 12 }),
971
994
  m("devportal.expires", "Expires"),
972
995
  " ",
973
996
  new Date(e.expiresAt).toLocaleDateString()
@@ -975,7 +998,7 @@ var be = [
975
998
  }),
976
999
  !e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ Y("span", {
977
1000
  className: "flex items-center gap-1",
978
- children: [/* @__PURE__ */ J(L, {
1001
+ children: [/* @__PURE__ */ J(R, {
979
1002
  size: 12,
980
1003
  className: "text-status-success-text"
981
1004
  }), m("devportal.noExpiration", "No expiration")]
@@ -983,7 +1006,7 @@ var be = [
983
1006
  e.revokedAt && /* @__PURE__ */ Y("span", {
984
1007
  className: "flex items-center gap-1",
985
1008
  children: [
986
- /* @__PURE__ */ J(K, {
1009
+ /* @__PURE__ */ J(ge, {
987
1010
  size: 12,
988
1011
  className: "text-status-error-text"
989
1012
  }),
@@ -997,19 +1020,19 @@ var be = [
997
1020
  ]
998
1021
  }, e.id))
999
1022
  }) : /* @__PURE__ */ J(r, {
1000
- icon: /* @__PURE__ */ J(fe, { size: 32 }),
1023
+ icon: /* @__PURE__ */ J(G, { size: 32 }),
1001
1024
  title: m("devportal.noDelegations", "No delegations"),
1002
1025
  description: m("devportal.noDelegationsDescription", "Grant a delegation to allow this app to act on your behalf"),
1003
1026
  action: /* @__PURE__ */ Y("button", {
1004
1027
  onClick: i,
1005
1028
  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",
1006
- children: [/* @__PURE__ */ J(U, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1029
+ children: [/* @__PURE__ */ J(H, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
1007
1030
  })
1008
1031
  })
1009
1032
  ]
1010
1033
  });
1011
- }, je = ({ analytics: e }) => {
1012
- let { t } = F(), n = (e, n) => {
1034
+ }, Ne = ({ analytics: e }) => {
1035
+ let { t } = I(), n = (e, n) => {
1013
1036
  let r = t(e);
1014
1037
  return r === e ? n : r;
1015
1038
  }, i = e[0], a = e[1], o = (e, t) => t ? (e - t) / t * 100 : 0;
@@ -1039,9 +1062,9 @@ var be = [
1039
1062
  trend: a && i && i.apiCalls > 0 && a.apiCalls > 0 ? -o(i.errors / i.apiCalls, a.errors / a.apiCalls) : void 0
1040
1063
  })
1041
1064
  ]
1042
- }), /* @__PURE__ */ J(h, {
1065
+ }), /* @__PURE__ */ J(_, {
1043
1066
  title: n("devportal.dailyBreakdown", "Daily Breakdown"),
1044
- children: e.length > 0 ? /* @__PURE__ */ J(C, {
1067
+ children: e.length > 0 ? /* @__PURE__ */ J(w, {
1045
1068
  data: e,
1046
1069
  keyField: "id",
1047
1070
  columns: [
@@ -1082,17 +1105,17 @@ var be = [
1082
1105
  }
1083
1106
  ]
1084
1107
  }) : /* @__PURE__ */ J(r, {
1085
- icon: /* @__PURE__ */ J(I, { size: 32 }),
1108
+ icon: /* @__PURE__ */ J(L, { size: 32 }),
1086
1109
  title: n("devportal.noAnalyticsData", "No analytics data"),
1087
1110
  description: n("devportal.noAnalyticsDataDescription", "Analytics data will appear here once the application starts receiving traffic.")
1088
1111
  })
1089
1112
  })]
1090
1113
  });
1091
- }, Me = "# Sample query - modify as needed\nquery IntrospectSchema {\n __schema {\n queryType { name }\n mutationType { name }\n types {\n name\n kind\n }\n }\n}", Ne = ({ app: t }) => {
1092
- let { apiGatewayUrl: n, workspacesGatewayUrl: r, authToken: i } = e(), { t: a } = F(), o = (e, t) => {
1114
+ }, Pe = "# Sample query - modify as needed\nquery IntrospectSchema {\n __schema {\n queryType { name }\n mutationType { name }\n types {\n name\n kind\n }\n }\n}", Fe = ({ app: t }) => {
1115
+ let { apiGatewayUrl: n, workspacesGatewayUrl: r, authToken: i } = e(), { t: a } = I(), o = (e, t) => {
1093
1116
  let n = a(e);
1094
1117
  return n === e ? t : n;
1095
- }, [s, c] = P(Me), [l, u] = P("{}"), [d, f] = P(""), [p, m] = P(!1), [h, g] = P(`${n || "http://localhost:4000"}/global/graphql`), [_, v] = P(i || ""), [y, b] = P(!1), x = j(async () => {
1118
+ }, [s, c] = F(Pe), [l, u] = F("{}"), [d, f] = F(""), [p, m] = F(!1), [h, g] = F(`${n || "http://localhost:4000"}/global/graphql`), [_, v] = F(i || ""), [y, b] = F(!1), x = M(async () => {
1096
1119
  m(!0), f("");
1097
1120
  try {
1098
1121
  let e = {};
@@ -1123,7 +1146,7 @@ var be = [
1123
1146
  l,
1124
1147
  h,
1125
1148
  _
1126
- ]), S = j(() => {
1149
+ ]), S = M(() => {
1127
1150
  i && v(i), b(!0);
1128
1151
  }, [i]);
1129
1152
  return /* @__PURE__ */ Y("div", {
@@ -1256,7 +1279,7 @@ var be = [
1256
1279
  children: [p ? /* @__PURE__ */ J(V, {
1257
1280
  size: 16,
1258
1281
  className: "animate-spin"
1259
- }) : /* @__PURE__ */ J(R, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
1282
+ }) : /* @__PURE__ */ J(z, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
1260
1283
  }),
1261
1284
  d && /* @__PURE__ */ Y("div", { children: [/* @__PURE__ */ J("label", {
1262
1285
  className: "block text-sm font-medium mb-1",
@@ -1267,8 +1290,8 @@ var be = [
1267
1290
  })] })
1268
1291
  ]
1269
1292
  });
1270
- }, Pe = ({ label: e, value: n, onChange: r, hint: i, accept: a = "image/png,image/jpeg,image/webp,image/gif,image/svg+xml", aspectClass: o = "aspect-square", upload: s, uploading: c, progress: l, error: u }) => {
1271
- let d = N(null), f = j(async (e) => {
1293
+ }, Ie = ({ label: e, value: n, onChange: r, hint: i, accept: a = "image/png,image/jpeg,image/webp,image/gif,image/svg+xml", aspectClass: o = "aspect-square", upload: s, uploading: c, progress: l, error: u }) => {
1294
+ let d = P(null), f = M(async (e) => {
1272
1295
  try {
1273
1296
  r((await s(e)).downloadUrl);
1274
1297
  } catch {}
@@ -1288,7 +1311,7 @@ var be = [
1288
1311
  src: n,
1289
1312
  alt: e,
1290
1313
  className: "w-full h-full object-cover"
1291
- }) : /* @__PURE__ */ J(G, {
1314
+ }) : /* @__PURE__ */ J(W, {
1292
1315
  size: 18,
1293
1316
  className: "text-text-secondary opacity-40"
1294
1317
  }), c && /* @__PURE__ */ Y("div", {
@@ -1326,7 +1349,7 @@ var be = [
1326
1349
  disabled: c,
1327
1350
  onClick: () => d.current?.click(),
1328
1351
  className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium hover:bg-muted transition-colors disabled:opacity-50",
1329
- children: [/* @__PURE__ */ J(G, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
1352
+ children: [/* @__PURE__ */ J(W, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
1330
1353
  }),
1331
1354
  u && /* @__PURE__ */ J("p", {
1332
1355
  className: "text-xs text-status-error-text",
@@ -1341,8 +1364,8 @@ var be = [
1341
1364
  })
1342
1365
  ]
1343
1366
  });
1344
- }, Fe = ({ urls: e, onChange: n, upload: r, uploading: i, progress: a, error: o }) => {
1345
- let s = N(null), c = j(async (t) => {
1367
+ }, Le = ({ urls: e, onChange: n, upload: r, uploading: i, progress: a, error: o }) => {
1368
+ let s = P(null), c = M(async (t) => {
1346
1369
  try {
1347
1370
  let i = await r(t);
1348
1371
  n([...e, i.downloadUrl]);
@@ -1373,7 +1396,7 @@ var be = [
1373
1396
  type: "button",
1374
1397
  onClick: () => l(t),
1375
1398
  className: "absolute top-1 right-1 rounded-full bg-black/60 text-white p-0.5 opacity-0 group-hover:opacity-100 transition-opacity",
1376
- children: /* @__PURE__ */ J(me, { size: 12 })
1399
+ children: /* @__PURE__ */ J(K, { size: 12 })
1377
1400
  })]
1378
1401
  }, t)), /* @__PURE__ */ J("button", {
1379
1402
  type: "button",
@@ -1386,7 +1409,7 @@ var be = [
1386
1409
  }), /* @__PURE__ */ Y("span", {
1387
1410
  className: "text-xs",
1388
1411
  children: [a, "%"]
1389
- })] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(G, { size: 18 }), /* @__PURE__ */ J("span", {
1412
+ })] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(W, { size: 18 }), /* @__PURE__ */ J("span", {
1390
1413
  className: "text-xs",
1391
1414
  children: "Add screenshot"
1392
1415
  })] })
@@ -1408,13 +1431,13 @@ var be = [
1408
1431
  })
1409
1432
  ]
1410
1433
  });
1411
- }, Ie = new Set(["workflow", "template"]), Le = [{
1434
+ }, Re = new Set(["workflow", "template"]), ze = [{
1412
1435
  value: "FREE",
1413
1436
  label: "Free"
1414
1437
  }, {
1415
1438
  value: "PAID",
1416
1439
  label: "Paid"
1417
- }], Re = [
1440
+ }], Be = [
1418
1441
  {
1419
1442
  value: "agent",
1420
1443
  label: "Agent"
@@ -1484,7 +1507,7 @@ var be = [
1484
1507
  label: "Component"
1485
1508
  }
1486
1509
  ];
1487
- function ze(e) {
1510
+ function Ve(e) {
1488
1511
  let t = e.manifest ?? {}, n = t.identity ?? {}, r = (t.digital ?? {}).install ?? {}, i = t.compatibility ?? {}, a = Array.isArray(t.permissions) ? t.permissions : [], o = e.pricingDetails ?? {}, s = Array.isArray(e.screenshots) ? e.screenshots.join("\n") : "";
1489
1512
  return {
1490
1513
  iconUrl: e.iconUrl ?? "",
@@ -1513,25 +1536,25 @@ function ze(e) {
1513
1536
  manifestJsonContent: typeof t.jsonContent == "string" ? t.jsonContent : typeof t.content == "string" ? t.content : ""
1514
1537
  };
1515
1538
  }
1516
- var Be = ({ app: n }) => {
1517
- let { workspacesGatewayUrl: r, authToken: i, workspaceId: a, getWorkspaceToken: o } = e(), { t: s } = F(), c = (e, t) => {
1539
+ var He = ({ app: n }) => {
1540
+ let { workspacesGatewayUrl: r, authToken: i, workspaceId: a, getWorkspaceToken: o } = e(), { t: s } = I(), c = (e, t) => {
1518
1541
  let n = s(e);
1519
1542
  return n === e ? t : n;
1520
- }, [l, u] = P(() => ze(n)), [d, m] = P(!1), [g, _] = P(!1), v = N(n);
1543
+ }, [l, u] = F(() => Ve(n)), [d, f] = F(!1), [m, g] = F(!1), v = P(n);
1521
1544
  v.current = n;
1522
- let [y] = p(), [b, { loading: S }] = f();
1523
- ne(() => {
1524
- u(ze(v.current));
1545
+ let [y] = h(), [b, { loading: x }] = p();
1546
+ re(() => {
1547
+ u(Ve(v.current));
1525
1548
  }, [n.id]);
1526
- let C = (e, t) => {
1549
+ let S = (e, t) => {
1527
1550
  u((n) => ({
1528
1551
  ...n,
1529
1552
  [e]: t
1530
1553
  }));
1531
1554
  }, ee = async () => {
1532
- m(!0);
1555
+ f(!0);
1533
1556
  try {
1534
- let e = l.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean), t = l.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), r = Ie.has(l.manifestItemType), i = n.manifest ?? {}, a = {
1557
+ let e = l.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean), t = l.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), r = Re.has(l.manifestItemType), i = n.manifest ?? {}, a = {
1535
1558
  manifestVersion: typeof i.manifestVersion == "string" ? i.manifestVersion : "1.0",
1536
1559
  itemType: l.manifestItemType || void 0,
1537
1560
  identity: {
@@ -1568,19 +1591,19 @@ var Be = ({ app: n }) => {
1568
1591
  pricingDetails: Object.keys(o).length > 0 ? o : null,
1569
1592
  manifest: a
1570
1593
  }
1571
- } }), x("success");
1594
+ } }), C("success");
1572
1595
  } catch {
1573
- x("error");
1596
+ C("error");
1574
1597
  } finally {
1575
- m(!1);
1598
+ f(!1);
1576
1599
  }
1577
- }, te = async () => {
1600
+ }, w = async () => {
1578
1601
  try {
1579
- await b({ variables: { id: n.id } }), x("success");
1602
+ await b({ variables: { id: n.id } }), C("success");
1580
1603
  } catch {
1581
- x("error");
1604
+ C("error");
1582
1605
  }
1583
- }, D = N(null), O = N(null), { upload: k, uploading: M, progress: ie, error: I } = A(r, i, a, o), { upload: se, uploading: R, progress: ce, error: B } = A(r, i, a, o, "/DevPortal/Assets"), { upload: H, uploading: U, progress: le, error: ue } = A(r, i, a, o, "/DevPortal/Assets"), { upload: W, uploading: fe, progress: pe, error: me } = A(r, i, a, o, "/DevPortal/Assets"), K = j(async (e) => {
1606
+ }, T = P(null), te = P(null), { upload: k, uploading: A, progress: ne, error: N } = j(r, i, a, o), { upload: ae, uploading: L, progress: ce, error: z } = j(r, i, a, o, "/DevPortal/Assets"), { upload: le, uploading: B, progress: de, error: H } = j(r, i, a, o, "/DevPortal/Assets"), { upload: fe, uploading: pe, progress: U, error: G } = j(r, i, a, o, "/DevPortal/Assets"), he = M(async (e) => {
1584
1607
  let t = e.target.files?.[0];
1585
1608
  if (t) {
1586
1609
  e.target.value = "";
@@ -1592,8 +1615,8 @@ var Be = ({ app: n }) => {
1592
1615
  }));
1593
1616
  } catch {}
1594
1617
  }
1595
- }, [k]), he = j(async (e) => {
1596
- e.preventDefault(), _(!1);
1618
+ }, [k]), K = M(async (e) => {
1619
+ e.preventDefault(), g(!1);
1597
1620
  let t = e.dataTransfer.files?.[0];
1598
1621
  if (t) try {
1599
1622
  let e = await k(t);
@@ -1602,7 +1625,7 @@ var Be = ({ app: n }) => {
1602
1625
  manifestRegistryUrl: e.downloadUrl
1603
1626
  }));
1604
1627
  } catch {}
1605
- }, [k]), ge = j((e) => {
1628
+ }, [k]), ge = M((e) => {
1606
1629
  let t = e.target.files?.[0];
1607
1630
  if (!t) return;
1608
1631
  let n = new FileReader();
@@ -1621,8 +1644,8 @@ var Be = ({ app: n }) => {
1621
1644
  }));
1622
1645
  } catch {}
1623
1646
  }, n.readAsText(t), e.target.value = "";
1624
- }, []), _e = j(() => {
1625
- let e = l.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), t = Ie.has(l.manifestItemType), r = {
1647
+ }, []), _e = M(() => {
1648
+ let e = l.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), t = Re.has(l.manifestItemType), r = {
1626
1649
  manifestVersion: "1.0",
1627
1650
  itemType: l.manifestItemType || void 0,
1628
1651
  identity: {
@@ -1637,15 +1660,15 @@ var Be = ({ app: n }) => {
1637
1660
  compatibility: { minPlatformVersion: l.manifestMinPlatformVersion }
1638
1661
  }, i = new Blob([JSON.stringify(r, null, 2)], { type: "application/json" }), a = URL.createObjectURL(i), o = document.createElement("a");
1639
1662
  o.href = a, o.download = `${n.slug}-manifest.json`, o.click(), URL.revokeObjectURL(a);
1640
- }, [n.slug, l]), ve = Ie.has(l.manifestItemType), ye = l.manifestInstallType === "builtin", be = l.pricingType !== "FREE", xe = l.manifestRegistryUrl ? l.manifestRegistryUrl.split("/").pop()?.split("?")[0] ?? "" : "";
1663
+ }, [n.slug, l]), ve = Re.has(l.manifestItemType), X = l.manifestInstallType === "builtin", ye = l.pricingType !== "FREE", be = l.manifestRegistryUrl ? l.manifestRegistryUrl.split("/").pop()?.split("?")[0] ?? "" : "";
1641
1664
  n.status;
1642
- let X = n.status === "SUBMITTED", Z = n.status === "PUBLISHED";
1665
+ let xe = n.status === "SUBMITTED", Se = n.status === "PUBLISHED";
1643
1666
  return /* @__PURE__ */ Y("div", {
1644
1667
  className: "space-y-8 max-w-3xl",
1645
1668
  children: [
1646
- Z ? /* @__PURE__ */ Y("div", {
1669
+ Se ? /* @__PURE__ */ Y("div", {
1647
1670
  className: "flex items-start gap-3 rounded-lg border border-success/30 bg-success/10 px-4 py-3",
1648
- children: [/* @__PURE__ */ J(L, {
1671
+ children: [/* @__PURE__ */ J(R, {
1649
1672
  size: 16,
1650
1673
  className: "text-success mt-0.5 shrink-0"
1651
1674
  }), /* @__PURE__ */ Y("div", {
@@ -1662,9 +1685,9 @@ var Be = ({ app: n }) => {
1662
1685
  ]
1663
1686
  })]
1664
1687
  })]
1665
- }) : X ? /* @__PURE__ */ Y("div", {
1688
+ }) : xe ? /* @__PURE__ */ Y("div", {
1666
1689
  className: "flex items-start gap-3 rounded-lg border border-primary/30 bg-primary/5 px-4 py-3",
1667
- children: [/* @__PURE__ */ J(ae, {
1690
+ children: [/* @__PURE__ */ J(oe, {
1668
1691
  size: 16,
1669
1692
  className: "text-primary mt-0.5 shrink-0"
1670
1693
  }), /* @__PURE__ */ Y("div", {
@@ -1686,7 +1709,7 @@ var Be = ({ app: n }) => {
1686
1709
  })]
1687
1710
  }) : /* @__PURE__ */ Y("div", {
1688
1711
  className: "flex items-start gap-3 rounded-lg border border-warning/30 bg-warning/5 px-4 py-3",
1689
- children: [/* @__PURE__ */ J(re, {
1712
+ children: [/* @__PURE__ */ J(ie, {
1690
1713
  size: 16,
1691
1714
  className: "text-warning mt-0.5 shrink-0"
1692
1715
  }), /* @__PURE__ */ Y("div", {
@@ -1700,42 +1723,42 @@ var Be = ({ app: n }) => {
1700
1723
  })]
1701
1724
  })]
1702
1725
  }),
1703
- /* @__PURE__ */ J(h, {
1726
+ /* @__PURE__ */ J(_, {
1704
1727
  title: c("devportal.package", "Package"),
1705
1728
  description: c("devportal.packageDescription", "Technical configuration — how FluidGrid installs and runs this item"),
1706
1729
  children: /* @__PURE__ */ Y("div", {
1707
1730
  className: "space-y-6",
1708
1731
  children: [
1709
- /* @__PURE__ */ J(T, {
1732
+ /* @__PURE__ */ J(D, {
1710
1733
  label: c("devportal.storeItemType", "Item Type"),
1711
1734
  value: l.manifestItemType,
1712
1735
  onChange: (e) => {
1713
1736
  let t = e.target.value;
1714
- C("manifestItemType", t), Ie.has(t) ? C("manifestInstallType", "json") : l.manifestInstallType === "json" && C("manifestInstallType", "zip");
1737
+ S("manifestItemType", t), Re.has(t) ? S("manifestInstallType", "json") : l.manifestInstallType === "json" && S("manifestInstallType", "zip");
1715
1738
  },
1716
- options: Re,
1739
+ options: Be,
1717
1740
  placeholder: c("devportal.selectItemType", "Select item type…"),
1718
1741
  hint: c("devportal.storeItemTypeHint", "Determines how this item is categorised and how the platform runs it")
1719
1742
  }),
1720
1743
  /* @__PURE__ */ Y("div", {
1721
1744
  className: "grid gap-4 sm:grid-cols-2",
1722
- children: [/* @__PURE__ */ J(w, {
1745
+ children: [/* @__PURE__ */ J(E, {
1723
1746
  label: c("devportal.manifestDisplayName", "Display Name"),
1724
1747
  value: l.manifestDisplayName,
1725
- onChange: (e) => C("manifestDisplayName", e.target.value),
1748
+ onChange: (e) => S("manifestDisplayName", e.target.value),
1726
1749
  placeholder: "My Awesome Node"
1727
- }), /* @__PURE__ */ J(w, {
1750
+ }), /* @__PURE__ */ J(E, {
1728
1751
  label: c("devportal.manifestVersion", "Version"),
1729
1752
  value: l.manifestVersion,
1730
- onChange: (e) => C("manifestVersion", e.target.value),
1753
+ onChange: (e) => S("manifestVersion", e.target.value),
1731
1754
  placeholder: "1.0.0",
1732
1755
  hint: c("devportal.semverHint", "Semantic version (MAJOR.MINOR.PATCH)")
1733
1756
  })]
1734
1757
  }),
1735
- ve && /* @__PURE__ */ J(E, {
1758
+ ve && /* @__PURE__ */ J(O, {
1736
1759
  label: c("devportal.jsonContent", l.manifestItemType === "workflow" ? "Workflow Definition (JSON)" : "Template Definition (JSON)"),
1737
1760
  value: l.manifestJsonContent,
1738
- onChange: (e) => C("manifestJsonContent", e.target.value),
1761
+ onChange: (e) => S("manifestJsonContent", e.target.value),
1739
1762
  rows: 12,
1740
1763
  placeholder: "{\n \"nodes\": [],\n \"edges\": []\n}",
1741
1764
  hint: c("devportal.jsonContentHint", "Paste the full JSON definition. Stored and applied directly — no zip needed.")
@@ -1752,8 +1775,8 @@ var Be = ({ app: n }) => {
1752
1775
  className: "flex items-center gap-2 text-sm cursor-pointer select-none",
1753
1776
  children: [/* @__PURE__ */ J("input", {
1754
1777
  type: "checkbox",
1755
- checked: ye,
1756
- onChange: (e) => C("manifestInstallType", e.target.checked ? "builtin" : "zip"),
1778
+ checked: X,
1779
+ onChange: (e) => S("manifestInstallType", e.target.checked ? "builtin" : "zip"),
1757
1780
  className: "h-4 w-4 rounded border-border accent-primary"
1758
1781
  }), /* @__PURE__ */ J("span", {
1759
1782
  className: "text-text-secondary",
@@ -1761,10 +1784,10 @@ var Be = ({ app: n }) => {
1761
1784
  })]
1762
1785
  })]
1763
1786
  }),
1764
- !ye && /* @__PURE__ */ Y(q, { children: [
1787
+ !X && /* @__PURE__ */ Y(q, { children: [
1765
1788
  /* @__PURE__ */ Y("div", {
1766
1789
  className: "flex gap-3 rounded-lg border border-border-subtle bg-bg-sunken p-3 text-sm text-text-secondary",
1767
- children: [/* @__PURE__ */ J(z, {
1790
+ children: [/* @__PURE__ */ J(ue, {
1768
1791
  size: 15,
1769
1792
  className: "mt-0.5 shrink-0"
1770
1793
  }), /* @__PURE__ */ Y("span", { children: [
@@ -1778,19 +1801,19 @@ var Be = ({ app: n }) => {
1778
1801
  }),
1779
1802
  /* @__PURE__ */ Y("div", {
1780
1803
  onDragOver: (e) => {
1781
- e.preventDefault(), _(!0);
1804
+ e.preventDefault(), g(!0);
1782
1805
  },
1783
- onDragLeave: () => _(!1),
1784
- onDrop: (e) => void he(e),
1785
- onClick: () => !M && O.current?.click(),
1786
- className: t("relative flex flex-col items-center justify-center gap-3 rounded-xl border-2 border-dashed px-6 py-10 text-center transition-colors cursor-pointer", g ? "border-primary bg-primary/5" : "border-border hover:border-border-strong hover:bg-bg-sunken", M && "pointer-events-none opacity-75"),
1806
+ onDragLeave: () => g(!1),
1807
+ onDrop: (e) => void K(e),
1808
+ onClick: () => !A && te.current?.click(),
1809
+ className: t("relative flex flex-col items-center justify-center gap-3 rounded-xl border-2 border-dashed px-6 py-10 text-center transition-colors cursor-pointer", m ? "border-primary bg-primary/5" : "border-border hover:border-border-strong hover:bg-bg-sunken", A && "pointer-events-none opacity-75"),
1787
1810
  children: [/* @__PURE__ */ J("input", {
1788
- ref: O,
1811
+ ref: te,
1789
1812
  type: "file",
1790
1813
  accept: ".zip,application/zip,application/x-zip-compressed",
1791
1814
  className: "hidden",
1792
- onChange: (e) => void K(e)
1793
- }), M ? /* @__PURE__ */ Y(q, { children: [
1815
+ onChange: (e) => void he(e)
1816
+ }), A ? /* @__PURE__ */ Y(q, { children: [
1794
1817
  /* @__PURE__ */ J(V, {
1795
1818
  size: 28,
1796
1819
  className: "animate-spin text-primary"
@@ -1800,7 +1823,7 @@ var Be = ({ app: n }) => {
1800
1823
  children: [
1801
1824
  c("devportal.uploading", "Uploading…"),
1802
1825
  " ",
1803
- ie,
1826
+ ne,
1804
1827
  "%"
1805
1828
  ]
1806
1829
  }), /* @__PURE__ */ J("p", {
@@ -1811,19 +1834,19 @@ var Be = ({ app: n }) => {
1811
1834
  className: "w-48 h-1.5 rounded-full bg-muted overflow-hidden",
1812
1835
  children: /* @__PURE__ */ J("div", {
1813
1836
  className: "h-full bg-primary transition-all",
1814
- style: { width: `${ie}%` }
1837
+ style: { width: `${ne}%` }
1815
1838
  })
1816
1839
  })
1817
- ] }) : xe ? /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(L, {
1840
+ ] }) : be ? /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(R, {
1818
1841
  size: 28,
1819
1842
  className: "text-status-success-text"
1820
1843
  }), /* @__PURE__ */ Y("div", { children: [/* @__PURE__ */ J("p", {
1821
1844
  className: "text-sm font-medium",
1822
- children: xe
1845
+ children: be
1823
1846
  }), /* @__PURE__ */ J("p", {
1824
1847
  className: "text-xs text-text-secondary mt-0.5",
1825
1848
  children: c("devportal.clickToReplace", "Click or drag to replace")
1826
- })] })] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(G, {
1849
+ })] })] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(W, {
1827
1850
  size: 28,
1828
1851
  className: "text-text-secondary"
1829
1852
  }), /* @__PURE__ */ Y("div", { children: [/* @__PURE__ */ J("p", {
@@ -1834,14 +1857,14 @@ var Be = ({ app: n }) => {
1834
1857
  children: c("devportal.orClickToBrowse", "or click to browse")
1835
1858
  })] })] })]
1836
1859
  }),
1837
- I && /* @__PURE__ */ J("p", {
1860
+ N && /* @__PURE__ */ J("p", {
1838
1861
  className: "text-xs text-status-error-text",
1839
- children: I
1862
+ children: N
1840
1863
  })
1841
1864
  ] }),
1842
- ye && /* @__PURE__ */ Y("div", {
1865
+ X && /* @__PURE__ */ Y("div", {
1843
1866
  className: "flex gap-3 rounded-lg border border-border-subtle bg-bg-sunken p-3 text-sm text-text-secondary",
1844
- children: [/* @__PURE__ */ J(z, {
1867
+ children: [/* @__PURE__ */ J(ue, {
1845
1868
  size: 15,
1846
1869
  className: "mt-0.5 shrink-0"
1847
1870
  }), /* @__PURE__ */ J("span", { children: c("devportal.builtinHint", "Built-in items are pre-installed by the platform. No package upload is needed.") })]
@@ -1852,7 +1875,7 @@ var Be = ({ app: n }) => {
1852
1875
  className: "flex flex-wrap items-center gap-2 border-t pt-4",
1853
1876
  children: [
1854
1877
  /* @__PURE__ */ J("input", {
1855
- ref: D,
1878
+ ref: T,
1856
1879
  type: "file",
1857
1880
  accept: ".json,application/json",
1858
1881
  className: "hidden",
@@ -1864,15 +1887,15 @@ var Be = ({ app: n }) => {
1864
1887
  }),
1865
1888
  /* @__PURE__ */ Y("button", {
1866
1889
  type: "button",
1867
- onClick: () => D.current?.click(),
1890
+ onClick: () => T.current?.click(),
1868
1891
  className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium hover:bg-muted transition-colors",
1869
- children: [/* @__PURE__ */ J(G, { size: 12 }), c("devportal.importManifest", "Import")]
1892
+ children: [/* @__PURE__ */ J(W, { size: 12 }), c("devportal.importManifest", "Import")]
1870
1893
  }),
1871
1894
  /* @__PURE__ */ Y("button", {
1872
1895
  type: "button",
1873
1896
  onClick: _e,
1874
1897
  className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium hover:bg-muted transition-colors",
1875
- children: [/* @__PURE__ */ J(oe, { size: 12 }), c("devportal.exportManifest", "Export")]
1898
+ children: [/* @__PURE__ */ J(se, { size: 12 }), c("devportal.exportManifest", "Export")]
1876
1899
  }),
1877
1900
  /* @__PURE__ */ J("span", {
1878
1901
  className: "text-xs text-text-secondary",
@@ -1883,7 +1906,7 @@ var Be = ({ app: n }) => {
1883
1906
  ]
1884
1907
  })
1885
1908
  }),
1886
- /* @__PURE__ */ J(h, {
1909
+ /* @__PURE__ */ J(_, {
1887
1910
  title: c("devportal.storePresentation", "Store Presence"),
1888
1911
  description: c("devportal.storePresentationDescription", "Visual assets and copy shown to users browsing the marketplace"),
1889
1912
  children: /* @__PURE__ */ Y("div", {
@@ -1891,109 +1914,109 @@ var Be = ({ app: n }) => {
1891
1914
  children: [
1892
1915
  /* @__PURE__ */ Y("div", {
1893
1916
  className: "grid gap-5 sm:grid-cols-2",
1894
- children: [/* @__PURE__ */ J(Pe, {
1917
+ children: [/* @__PURE__ */ J(Ie, {
1895
1918
  label: c("devportal.iconUrl", "Icon"),
1896
1919
  value: l.iconUrl,
1897
- onChange: (e) => C("iconUrl", e),
1920
+ onChange: (e) => S("iconUrl", e),
1898
1921
  hint: c("devportal.iconUrlHint", "Square, 256×256 px recommended"),
1899
1922
  aspectClass: "aspect-square",
1900
- upload: se,
1901
- uploading: R,
1923
+ upload: ae,
1924
+ uploading: L,
1902
1925
  progress: ce,
1903
- error: B
1904
- }), /* @__PURE__ */ J(Pe, {
1926
+ error: z
1927
+ }), /* @__PURE__ */ J(Ie, {
1905
1928
  label: c("devportal.bannerUrl", "Banner"),
1906
1929
  value: l.bannerUrl,
1907
- onChange: (e) => C("bannerUrl", e),
1930
+ onChange: (e) => S("bannerUrl", e),
1908
1931
  hint: c("devportal.bannerUrlHint", "1280×640 px recommended"),
1909
1932
  aspectClass: "aspect-video",
1910
- upload: H,
1911
- uploading: U,
1912
- progress: le,
1913
- error: ue
1933
+ upload: le,
1934
+ uploading: B,
1935
+ progress: de,
1936
+ error: H
1914
1937
  })]
1915
1938
  }),
1916
- /* @__PURE__ */ J(w, {
1939
+ /* @__PURE__ */ J(E, {
1917
1940
  label: c("devportal.videoUrl", "Demo Video URL"),
1918
1941
  value: l.videoUrl,
1919
- onChange: (e) => C("videoUrl", e.target.value),
1942
+ onChange: (e) => S("videoUrl", e.target.value),
1920
1943
  placeholder: "https://...",
1921
1944
  hint: c("devportal.videoUrlHint", "YouTube or Vimeo embed URL")
1922
1945
  }),
1923
- /* @__PURE__ */ J(E, {
1946
+ /* @__PURE__ */ J(O, {
1924
1947
  label: c("devportal.shortDescription", "Short Description"),
1925
1948
  value: l.shortDescription,
1926
- onChange: (e) => C("shortDescription", e.target.value),
1949
+ onChange: (e) => S("shortDescription", e.target.value),
1927
1950
  maxLength: 200,
1928
1951
  rows: 2,
1929
1952
  hint: `${l.shortDescription.length}/200 · ${c("devportal.shortDescHint", "Shown in search results and cards")}`
1930
1953
  }),
1931
- /* @__PURE__ */ J(E, {
1954
+ /* @__PURE__ */ J(O, {
1932
1955
  label: c("devportal.longDescription", "Full Description"),
1933
1956
  value: l.description,
1934
- onChange: (e) => C("description", e.target.value),
1957
+ onChange: (e) => S("description", e.target.value),
1935
1958
  rows: 5,
1936
1959
  hint: c("devportal.fullDescHint", "Markdown supported")
1937
1960
  }),
1938
- /* @__PURE__ */ J(Fe, {
1961
+ /* @__PURE__ */ J(Le, {
1939
1962
  urls: l.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean),
1940
- onChange: (e) => C("screenshotsText", e.join("\n")),
1941
- upload: W,
1942
- uploading: fe,
1943
- progress: pe,
1944
- error: me
1963
+ onChange: (e) => S("screenshotsText", e.join("\n")),
1964
+ upload: fe,
1965
+ uploading: pe,
1966
+ progress: U,
1967
+ error: G
1945
1968
  })
1946
1969
  ]
1947
1970
  })
1948
1971
  }),
1949
- /* @__PURE__ */ J(h, {
1972
+ /* @__PURE__ */ J(_, {
1950
1973
  title: c("devportal.linksPolicies", "Links & Policies"),
1951
1974
  description: c("devportal.linksPoliciesDescription", "External resources and legal documents — privacy policy and terms are required for store submission"),
1952
1975
  children: /* @__PURE__ */ Y("div", {
1953
1976
  className: "grid gap-4 sm:grid-cols-2",
1954
1977
  children: [
1955
- /* @__PURE__ */ J(w, {
1978
+ /* @__PURE__ */ J(E, {
1956
1979
  label: c("devportal.websiteUrl", "Website"),
1957
1980
  value: l.websiteUrl,
1958
- onChange: (e) => C("websiteUrl", e.target.value),
1981
+ onChange: (e) => S("websiteUrl", e.target.value),
1959
1982
  placeholder: "https://..."
1960
1983
  }),
1961
- /* @__PURE__ */ J(w, {
1984
+ /* @__PURE__ */ J(E, {
1962
1985
  label: c("devportal.documentationUrl", "Documentation"),
1963
1986
  value: l.documentationUrl,
1964
- onChange: (e) => C("documentationUrl", e.target.value),
1987
+ onChange: (e) => S("documentationUrl", e.target.value),
1965
1988
  placeholder: "https://..."
1966
1989
  }),
1967
- /* @__PURE__ */ J(w, {
1990
+ /* @__PURE__ */ J(E, {
1968
1991
  label: c("devportal.githubUrl", "GitHub"),
1969
1992
  value: l.githubUrl,
1970
- onChange: (e) => C("githubUrl", e.target.value),
1993
+ onChange: (e) => S("githubUrl", e.target.value),
1971
1994
  placeholder: "https://github.com/..."
1972
1995
  }),
1973
- /* @__PURE__ */ J(w, {
1996
+ /* @__PURE__ */ J(E, {
1974
1997
  label: c("devportal.supportUrl", "Support"),
1975
1998
  value: l.supportUrl,
1976
- onChange: (e) => C("supportUrl", e.target.value),
1999
+ onChange: (e) => S("supportUrl", e.target.value),
1977
2000
  placeholder: "https://..."
1978
2001
  }),
1979
- /* @__PURE__ */ J(w, {
2002
+ /* @__PURE__ */ J(E, {
1980
2003
  label: `${c("devportal.privacyPolicyUrl", "Privacy Policy")} *`,
1981
2004
  value: l.privacyPolicyUrl,
1982
- onChange: (e) => C("privacyPolicyUrl", e.target.value),
2005
+ onChange: (e) => S("privacyPolicyUrl", e.target.value),
1983
2006
  placeholder: "https://...",
1984
2007
  hint: c("devportal.requiredForStore", "Required for store submission")
1985
2008
  }),
1986
- /* @__PURE__ */ J(w, {
2009
+ /* @__PURE__ */ J(E, {
1987
2010
  label: `${c("devportal.termsOfServiceUrl", "Terms of Service")} *`,
1988
2011
  value: l.termsOfServiceUrl,
1989
- onChange: (e) => C("termsOfServiceUrl", e.target.value),
2012
+ onChange: (e) => S("termsOfServiceUrl", e.target.value),
1990
2013
  placeholder: "https://...",
1991
2014
  hint: c("devportal.requiredForStore", "Required for store submission")
1992
2015
  })
1993
2016
  ]
1994
2017
  })
1995
2018
  }),
1996
- /* @__PURE__ */ J(h, {
2019
+ /* @__PURE__ */ J(_, {
1997
2020
  title: c("devportal.pricing", "Pricing"),
1998
2021
  description: c("devportal.pricingDescription", "How this item is priced in the marketplace"),
1999
2022
  children: /* @__PURE__ */ Y("div", {
@@ -2003,24 +2026,24 @@ var Be = ({ app: n }) => {
2003
2026
  children: c("devportal.pricingType", "Pricing Type")
2004
2027
  }), /* @__PURE__ */ J("div", {
2005
2028
  className: "flex flex-wrap gap-2",
2006
- children: Le.map((e) => /* @__PURE__ */ J("button", {
2029
+ children: ze.map((e) => /* @__PURE__ */ J("button", {
2007
2030
  type: "button",
2008
- onClick: () => C("pricingType", e.value),
2031
+ onClick: () => S("pricingType", e.value),
2009
2032
  className: t("rounded-md border px-3 py-1.5 text-sm font-medium transition-colors", l.pricingType === e.value ? "bg-primary text-primary-foreground border-primary" : "hover:bg-muted"),
2010
2033
  children: e.label
2011
2034
  }, e.value))
2012
- })] }), be && /* @__PURE__ */ Y("div", {
2035
+ })] }), ye && /* @__PURE__ */ Y("div", {
2013
2036
  className: "grid gap-4 sm:grid-cols-2",
2014
- children: [/* @__PURE__ */ J(w, {
2037
+ children: [/* @__PURE__ */ J(E, {
2015
2038
  label: c("devportal.price", "Price"),
2016
2039
  type: "number",
2017
2040
  value: l.price,
2018
- onChange: (e) => C("price", e.target.value),
2041
+ onChange: (e) => S("price", e.target.value),
2019
2042
  placeholder: "0.00"
2020
- }), /* @__PURE__ */ J(w, {
2043
+ }), /* @__PURE__ */ J(E, {
2021
2044
  label: c("devportal.currency", "Currency"),
2022
2045
  value: l.currency,
2023
- onChange: (e) => C("currency", e.target.value),
2046
+ onChange: (e) => S("currency", e.target.value),
2024
2047
  placeholder: "USD"
2025
2048
  })]
2026
2049
  })]
@@ -2036,22 +2059,22 @@ var Be = ({ app: n }) => {
2036
2059
  children: d ? /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(V, {
2037
2060
  size: 16,
2038
2061
  className: "animate-spin"
2039
- }), c("devportal.saving", "Saving…")] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(de, { size: 16 }), c("devportal.saveStoreListing", "Save Store Listing")] })
2040
- }), !Z && /* @__PURE__ */ J("button", {
2062
+ }), c("devportal.saving", "Saving…")] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(me, { size: 16 }), c("devportal.saveStoreListing", "Save Store Listing")] })
2063
+ }), !Se && /* @__PURE__ */ J("button", {
2041
2064
  type: "button",
2042
- onClick: () => void te(),
2043
- disabled: S || d,
2065
+ onClick: () => void w(),
2066
+ disabled: x || d,
2044
2067
  className: "inline-flex items-center gap-2 rounded-md border border-primary px-4 py-2 text-sm font-medium text-primary hover:bg-primary/5 transition-colors disabled:opacity-50",
2045
- children: S ? /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(V, {
2068
+ children: x ? /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(V, {
2046
2069
  size: 16,
2047
2070
  className: "animate-spin"
2048
- }), c("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(L, { size: 16 }), X ? c("devportal.resubmitForReview", "Resubmit for Review") : c("devportal.submitForReview", "Submit for Review")] })
2071
+ }), c("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ Y(q, { children: [/* @__PURE__ */ J(R, { size: 16 }), xe ? c("devportal.resubmitForReview", "Resubmit for Review") : c("devportal.submitForReview", "Submit for Review")] })
2049
2072
  })]
2050
2073
  })
2051
2074
  ]
2052
2075
  });
2053
2076
  }, Q = ({ label: e, value: n, trend: r }) => {
2054
- let { t: i } = F();
2077
+ let { t: i } = I();
2055
2078
  return /* @__PURE__ */ Y("div", {
2056
2079
  className: "rounded-lg border bg-card p-4",
2057
2080
  children: [
@@ -2082,9 +2105,9 @@ var Be = ({ app: n }) => {
2082
2105
  target: "_blank",
2083
2106
  rel: "noopener noreferrer",
2084
2107
  className: "flex items-center gap-2 text-sm text-primary hover:underline",
2085
- children: [/* @__PURE__ */ J(R, { size: 14 }), e]
2108
+ children: [/* @__PURE__ */ J(z, { size: 14 }), e]
2086
2109
  });
2087
2110
  //#endregion
2088
- export { Se as ApplicationDetailPage };
2111
+ export { we as ApplicationDetailPage };
2089
2112
 
2090
2113
  //# sourceMappingURL=ApplicationDetailPage.js.map