@burdenoff/microfe-devportal 2026.1112.2 → 2026.1113.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 (31) hide show
  1. package/dist/devportal/components/AppCard.js +73 -70
  2. package/dist/devportal/components/AppCard.js.map +1 -1
  3. package/dist/devportal/components/ImageUploadField.js +82 -80
  4. package/dist/devportal/components/ImageUploadField.js.map +1 -1
  5. package/dist/devportal/components/StoreImage.d.ts +15 -0
  6. package/dist/devportal/components/StoreImage.js +30 -0
  7. package/dist/devportal/components/StoreImage.js.map +1 -0
  8. package/dist/devportal/components/index.d.ts +1 -0
  9. package/dist/devportal/components/index.js +17 -16
  10. package/dist/devportal/hooks/usePackageUpload.d.ts +46 -4
  11. package/dist/devportal/hooks/usePackageUpload.js +90 -36
  12. package/dist/devportal/hooks/usePackageUpload.js.map +1 -1
  13. package/dist/devportal/pages/AdminReviewPage.js +205 -202
  14. package/dist/devportal/pages/AdminReviewPage.js.map +1 -1
  15. package/dist/devportal/pages/ApplicationDetailPage.js +2 -2
  16. package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
  17. package/dist/devportal/pages/ApplicationsPage.js +201 -199
  18. package/dist/devportal/pages/ApplicationsPage.js.map +1 -1
  19. package/dist/devportal/pages/CreatePhysicalItemPage.js +2 -2
  20. package/dist/devportal/pages/CreatePhysicalItemPage.js.map +1 -1
  21. package/dist/devportal/pages/EditPhysicalItemPage.js +312 -307
  22. package/dist/devportal/pages/EditPhysicalItemPage.js.map +1 -1
  23. package/dist/devportal/pages/ListingPreviewPage.js +175 -171
  24. package/dist/devportal/pages/ListingPreviewPage.js.map +1 -1
  25. package/dist/devportal/pages/SellerDashboardPage.js +118 -116
  26. package/dist/devportal/pages/SellerDashboardPage.js.map +1 -1
  27. package/dist/devportal/pages/SellerItemsPage.js +202 -199
  28. package/dist/devportal/pages/SellerItemsPage.js.map +1 -1
  29. package/dist/devportal/pages/StoreSubmissionPage.js +133 -131
  30. package/dist/devportal/pages/StoreSubmissionPage.js.map +1 -1
  31. package/package.json +1 -1
@@ -1,28 +1,29 @@
1
1
  import { PageLayout as e } from "../components/PageLayout.js";
2
2
  import { AppCard as t } from "../components/AppCard.js";
3
3
  import { EmptyState as n } from "../components/EmptyState.js";
4
- import { useDeactivateApplicationMutation as r, useGetApplicationsQuery as i } from "../../generated/global-operations.js";
5
- import { getErrorMessage as a } from "../hooks/useGraphQL.js";
6
- import { ConfirmDialog as ee } from "../components/ConfirmDialog.js";
7
- import { SelectionCheckbox as o } from "../components/SelectionCheckbox.js";
8
- import { useDevportal as te } from "../providers/DevportalProvider.js";
4
+ import { useDeactivateApplicationMutation as r, useGetApplicationsQuery as ee } from "../../generated/global-operations.js";
5
+ import { getErrorMessage as te } from "../hooks/useGraphQL.js";
6
+ import { ConfirmDialog as ne } from "../components/ConfirmDialog.js";
7
+ import { SelectionCheckbox as i } from "../components/SelectionCheckbox.js";
8
+ import { useDevportal as re } from "../providers/DevportalProvider.js";
9
9
  import "../components/index.js";
10
- import { DEVPORTAL_PERMISSIONS as s } from "../constants/permissions.js";
11
- import { PermissionGuard as c } from "../components/PermissionGuard.js";
12
- import { useTr as ne } from "../utils/i18n.js";
13
- import { useDevportalPermission as l } from "../hooks/usePermission.js";
14
- import { APP_STATUS_COLORS as u, APP_TYPE_LABELS as d } from "../utils/constants.js";
10
+ import { DEVPORTAL_PERMISSIONS as a } from "../constants/permissions.js";
11
+ import { useTr as ie } from "../utils/i18n.js";
12
+ import { PermissionGuard as ae } from "../components/PermissionGuard.js";
13
+ import { APP_STATUS_COLORS as oe, APP_TYPE_LABELS as o } from "../utils/constants.js";
14
+ import { useDevportalPermission as s } from "../hooks/usePermission.js";
15
15
  import "../hooks/index.js";
16
- import { useMemo as f, useState as p } from "react";
17
- import { AlertCircle as re, AppWindow as m, Archive as ie, Grid as ae, List as h, Loader2 as oe, Plus as g, Search as _ } from "lucide-react";
18
- import { jsx as v, jsxs as y } from "react/jsx-runtime";
19
- import { EmphasisPanel as se, GlassCard as b } from "@burdenoff/fe-libs/ui";
16
+ import { StoreImage as c } from "../components/StoreImage.js";
17
+ import { useMemo as l, useState as u } from "react";
18
+ import { AlertCircle as se, AppWindow as d, Archive as ce, Grid as f, List as p, Loader2 as le, Plus as m, Search as h } from "lucide-react";
19
+ import { jsx as g, jsxs as _ } from "react/jsx-runtime";
20
+ import { EmphasisPanel as ue, GlassCard as v } from "@burdenoff/fe-libs/ui";
20
21
  // src/devportal/pages/ApplicationsPage.tsx
21
- function ce(e, t, n) {
22
+ function de(e, t, n) {
22
23
  return `${e} ${t} application${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`;
23
24
  }
24
- function le({ status: e, tr: t }) {
25
- return /* @__PURE__ */ v("span", {
25
+ function y({ status: e, tr: t }) {
26
+ return /* @__PURE__ */ g("span", {
26
27
  className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${{
27
28
  ACTIVE: "bg-status-success-bg-subtle text-status-success-text",
28
29
  PUBLISHED: "bg-status-success-bg-subtle text-status-success-text",
@@ -40,7 +41,7 @@ function le({ status: e, tr: t }) {
40
41
  children: e === "INACTIVE" || e === "REVOKED" ? t("devportal.status.deactivated", "Deactivated") : e.replace(/_/g, " ")
41
42
  });
42
43
  }
43
- function x(e) {
44
+ function b(e) {
44
45
  let t = Array.isArray(e.screenshots) ? e.screenshots.length > 0 ? e.screenshots : void 0 : e.screenshots, n = e.pricingDetails && typeof e.pricingDetails == "object" ? e.pricingDetails : void 0;
45
46
  return {
46
47
  id: e.id,
@@ -86,191 +87,191 @@ function x(e) {
86
87
  updatedAt: e.updatedAt
87
88
  };
88
89
  }
89
- var S = () => {
90
- let { navigate: S, basePath: C, activeOrgId: w } = te(), T = ne(), E = l(s.APP_CREATE), D = l(s.APP_UPDATE), [O, k] = p("list"), [A, ue] = p(""), [j, de] = p(""), [M, fe] = p(""), [N, P] = p(/* @__PURE__ */ new Set()), [F, I] = p(null), [L, R] = p(null), { data: z, loading: B, error: V, refetch: H } = i({
90
+ var x = () => {
91
+ let { navigate: x, basePath: S, activeOrgId: C } = re(), w = ie(), T = s(a.APP_CREATE), E = s(a.APP_UPDATE), [D, O] = u("list"), [k, fe] = u(""), [A, j] = u(""), [M, N] = u(""), [P, F] = u(/* @__PURE__ */ new Set()), [I, L] = u(null), [R, z] = u(null), { data: B, loading: pe, error: V, refetch: H } = ee({
91
92
  variables: {
92
93
  limit: 50,
93
94
  offset: 0,
94
- status: j || void 0,
95
- organizationId: w ?? void 0
95
+ status: A || void 0,
96
+ organizationId: C ?? void 0
96
97
  },
97
98
  fetchPolicy: "cache-and-network"
98
- }), U = f(() => z?.applications?.edges?.map((e) => x(e.node)) ?? [], [z?.applications?.edges]), [pe] = r(), W = (e) => {
99
- S?.(`${C}${e}`);
99
+ }), U = l(() => B?.applications?.edges?.map((e) => b(e.node)) ?? [], [B?.applications?.edges]), [me] = r(), W = (e) => {
100
+ x?.(`${S}${e}`);
100
101
  }, G = U.filter((e) => {
101
- let t = !w || e.developerOrganizationId === w, n = !A || e.name.toLowerCase().includes(A.toLowerCase()) || e.shortDescription?.toLowerCase().includes(A.toLowerCase()), r = !M || e.appType === M;
102
+ let t = !C || e.developerOrganizationId === C, n = !k || e.name.toLowerCase().includes(k.toLowerCase()) || e.shortDescription?.toLowerCase().includes(k.toLowerCase()), r = !M || e.appType === M;
102
103
  return t && n && r;
103
- }), K = f(() => ({
104
- total: z?.applications?.totalCount ?? G.length,
104
+ }), K = l(() => ({
105
+ total: B?.applications?.totalCount ?? G.length,
105
106
  active: G.filter((e) => e.status === "ACTIVE").length,
106
107
  draft: G.filter((e) => e.status === "DRAFT").length,
107
108
  published: G.filter((e) => e.status === "PUBLISHED").length
108
- }), [G, z?.applications?.totalCount]), q = f(() => U.filter((e) => N.has(e.id)), [U, N]), J = f(() => q.filter((e) => e.status !== "INACTIVE" && e.status !== "REVOKED"), [q]), Y = G.length > 0 && G.every((e) => N.has(e.id)), X = G.some((e) => N.has(e.id)) && !Y, Z = (e, t) => {
109
- P((n) => {
109
+ }), [G, B?.applications?.totalCount]), q = l(() => U.filter((e) => P.has(e.id)), [U, P]), J = l(() => q.filter((e) => e.status !== "INACTIVE" && e.status !== "REVOKED"), [q]), Y = G.length > 0 && G.every((e) => P.has(e.id)), X = G.some((e) => P.has(e.id)) && !Y, Z = (e, t) => {
110
+ F((n) => {
110
111
  let r = new Set(n);
111
112
  return t ? r.add(e) : r.delete(e), r;
112
113
  });
113
114
  }, Q = (e) => {
114
- P((t) => {
115
+ F((t) => {
115
116
  let n = new Set(t);
116
117
  return G.forEach((t) => {
117
118
  e ? n.add(t.id) : n.delete(t.id);
118
119
  }), n;
119
120
  });
120
- }, $ = () => P(/* @__PURE__ */ new Set());
121
- return B && !z ? /* @__PURE__ */ v(e, {
122
- title: T("devportal.myApplications", "My Applications"),
123
- description: T("devportal.manageYourApps", "Manage your developer applications"),
124
- children: /* @__PURE__ */ y("div", {
121
+ }, $ = () => F(/* @__PURE__ */ new Set());
122
+ return pe && !B ? /* @__PURE__ */ g(e, {
123
+ title: w("devportal.myApplications", "My Applications"),
124
+ description: w("devportal.manageYourApps", "Manage your developer applications"),
125
+ children: /* @__PURE__ */ _("div", {
125
126
  className: "flex items-center justify-center py-12",
126
- children: [/* @__PURE__ */ v(oe, { className: "h-8 w-8 animate-spin text-text-secondary" }), /* @__PURE__ */ v("span", {
127
+ children: [/* @__PURE__ */ g(le, { className: "h-8 w-8 animate-spin text-text-secondary" }), /* @__PURE__ */ g("span", {
127
128
  className: "ml-2 text-text-secondary",
128
- children: T("devportal.loadingApplications", "Loading applications...")
129
+ children: w("devportal.loadingApplications", "Loading applications...")
129
130
  })]
130
131
  })
131
- }) : V ? /* @__PURE__ */ v(e, {
132
- title: T("devportal.myApplications", "My Applications"),
133
- description: T("devportal.manageYourApps", "Manage your developer applications"),
134
- children: /* @__PURE__ */ y("div", {
132
+ }) : V ? /* @__PURE__ */ g(e, {
133
+ title: w("devportal.myApplications", "My Applications"),
134
+ description: w("devportal.manageYourApps", "Manage your developer applications"),
135
+ children: /* @__PURE__ */ _("div", {
135
136
  className: "rounded-lg border border-status-error-border/50 bg-status-error-bg/10 p-6 text-center",
136
137
  children: [
137
- /* @__PURE__ */ v(re, { className: "mx-auto h-8 w-8 text-status-error-text" }),
138
- /* @__PURE__ */ v("h3", {
138
+ /* @__PURE__ */ g(se, { className: "mx-auto h-8 w-8 text-status-error-text" }),
139
+ /* @__PURE__ */ g("h3", {
139
140
  className: "mt-2 font-medium text-status-error-text",
140
- children: T("devportal.failedToLoadApplications", "Failed to load applications")
141
+ children: w("devportal.failedToLoadApplications", "Failed to load applications")
141
142
  }),
142
- /* @__PURE__ */ v("p", {
143
+ /* @__PURE__ */ g("p", {
143
144
  className: "mt-1 text-sm text-text-secondary",
144
- children: a(V)
145
+ children: te(V)
145
146
  }),
146
- /* @__PURE__ */ v("button", {
147
+ /* @__PURE__ */ g("button", {
147
148
  onClick: () => H(),
148
149
  className: "mt-4 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
149
- children: T("devportal.tryAgain", "Try Again")
150
+ children: w("devportal.tryAgain", "Try Again")
150
151
  })
151
152
  ]
152
153
  })
153
- }) : /* @__PURE__ */ v(c, {
154
+ }) : /* @__PURE__ */ g(ae, {
154
155
  authOnly: !0,
155
- children: /* @__PURE__ */ y(e, {
156
- title: T("devportal.myApplications", "My Applications"),
157
- description: T("devportal.manageYourApps", "Manage your developer applications"),
158
- purpose: T("devportal.applicationsPurpose", "Applications are the integrations you build on the platform — OAuth apps, store listings, and API consumers. Create one here to get client credentials, request scopes, and ship to the marketplace."),
159
- actions: /* @__PURE__ */ y("button", {
156
+ children: /* @__PURE__ */ _(e, {
157
+ title: w("devportal.myApplications", "My Applications"),
158
+ description: w("devportal.manageYourApps", "Manage your developer applications"),
159
+ purpose: w("devportal.applicationsPurpose", "Applications are the integrations you build on the platform — OAuth apps, store listings, and API consumers. Create one here to get client credentials, request scopes, and ship to the marketplace."),
160
+ actions: /* @__PURE__ */ _("button", {
160
161
  onClick: () => W("/apps/new"),
161
- disabled: !E.allowed,
162
- "aria-disabled": !E.allowed,
163
- title: E.allowed ? void 0 : T("devportal.common.noPermission", "You do not have permission to perform this action"),
162
+ disabled: !T.allowed,
163
+ "aria-disabled": !T.allowed,
164
+ title: T.allowed ? void 0 : w("devportal.common.noPermission", "You do not have permission to perform this action"),
164
165
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
165
- children: [/* @__PURE__ */ v(g, {
166
+ children: [/* @__PURE__ */ g(m, {
166
167
  size: 16,
167
168
  "aria-hidden": "true"
168
- }), T("devportal.createApp", "Create App")]
169
+ }), w("devportal.createApp", "Create App")]
169
170
  }),
170
171
  children: [
171
- /* @__PURE__ */ y("div", {
172
+ /* @__PURE__ */ _("div", {
172
173
  className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
173
- children: [/* @__PURE__ */ y("div", {
174
+ children: [/* @__PURE__ */ _("div", {
174
175
  className: "flex flex-1 items-center gap-4",
175
176
  children: [
176
- /* @__PURE__ */ y("div", {
177
+ /* @__PURE__ */ _("div", {
177
178
  className: "relative flex-1 max-w-md",
178
- children: [/* @__PURE__ */ v(_, {
179
+ children: [/* @__PURE__ */ g(h, {
179
180
  size: 16,
180
181
  className: "absolute left-3 top-1/2 -translate-y-1/2 text-text-secondary"
181
- }), /* @__PURE__ */ v("input", {
182
+ }), /* @__PURE__ */ g("input", {
182
183
  type: "text",
183
- placeholder: T("devportal.searchApplications", "Search applications..."),
184
- value: A,
185
- onChange: (e) => ue(e.target.value),
184
+ placeholder: w("devportal.searchApplications", "Search applications..."),
185
+ value: k,
186
+ onChange: (e) => fe(e.target.value),
186
187
  className: "w-full rounded-md border bg-bg-surface pl-9 pr-4 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary"
187
188
  })]
188
189
  }),
189
- /* @__PURE__ */ y("select", {
190
- value: j,
191
- onChange: (e) => de(e.target.value),
190
+ /* @__PURE__ */ _("select", {
191
+ value: A,
192
+ onChange: (e) => j(e.target.value),
192
193
  className: "rounded-md border bg-bg-surface px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary scheme-normal dark:scheme-dark [&_option]:bg-bg-surface [&_option]:text-text-primary",
193
- children: [/* @__PURE__ */ v("option", {
194
+ children: [/* @__PURE__ */ g("option", {
194
195
  value: "",
195
- children: T("devportal.allStatus", "All Status")
196
- }), Object.keys(u).map((e) => /* @__PURE__ */ v("option", {
196
+ children: w("devportal.allStatus", "All Status")
197
+ }), Object.keys(oe).map((e) => /* @__PURE__ */ g("option", {
197
198
  value: e,
198
- children: T(`devportal.appStatus.${e}`, e.replace(/_/g, " "))
199
+ children: w(`devportal.appStatus.${e}`, e.replace(/_/g, " "))
199
200
  }, e))]
200
201
  }),
201
- /* @__PURE__ */ y("select", {
202
+ /* @__PURE__ */ _("select", {
202
203
  value: M,
203
- onChange: (e) => fe(e.target.value),
204
+ onChange: (e) => N(e.target.value),
204
205
  className: "rounded-md border bg-bg-surface px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary scheme-normal dark:scheme-dark [&_option]:bg-bg-surface [&_option]:text-text-primary",
205
- children: [/* @__PURE__ */ v("option", {
206
+ children: [/* @__PURE__ */ g("option", {
206
207
  value: "",
207
- children: T("devportal.allTypes", "All Types")
208
- }), Object.entries(d).map(([e, t]) => /* @__PURE__ */ v("option", {
208
+ children: w("devportal.allTypes", "All Types")
209
+ }), Object.entries(o).map(([e, t]) => /* @__PURE__ */ g("option", {
209
210
  value: e,
210
211
  children: t
211
212
  }, e))]
212
213
  })
213
214
  ]
214
- }), /* @__PURE__ */ y("div", {
215
+ }), /* @__PURE__ */ _("div", {
215
216
  className: "flex items-center gap-1 rounded-md border p-1",
216
- children: [/* @__PURE__ */ v("button", {
217
- onClick: () => k("grid"),
218
- className: `rounded p-1.5 ${O === "grid" ? "bg-bg-sunken" : "hover:bg-bg-sunken/50"}`,
219
- title: T("devportal.gridView", "Grid view"),
220
- children: /* @__PURE__ */ v(ae, { size: 16 })
221
- }), /* @__PURE__ */ v("button", {
222
- onClick: () => k("list"),
223
- className: `rounded p-1.5 ${O === "list" ? "bg-bg-sunken" : "hover:bg-bg-sunken/50"}`,
224
- title: T("devportal.tableView", "Table view"),
225
- children: /* @__PURE__ */ v(h, { size: 16 })
217
+ children: [/* @__PURE__ */ g("button", {
218
+ onClick: () => O("grid"),
219
+ className: `rounded p-1.5 ${D === "grid" ? "bg-bg-sunken" : "hover:bg-bg-sunken/50"}`,
220
+ title: w("devportal.gridView", "Grid view"),
221
+ children: /* @__PURE__ */ g(f, { size: 16 })
222
+ }), /* @__PURE__ */ g("button", {
223
+ onClick: () => O("list"),
224
+ className: `rounded p-1.5 ${D === "list" ? "bg-bg-sunken" : "hover:bg-bg-sunken/50"}`,
225
+ title: w("devportal.tableView", "Table view"),
226
+ children: /* @__PURE__ */ g(p, { size: 16 })
226
227
  })]
227
228
  })]
228
229
  }),
229
- /* @__PURE__ */ v(se, {
230
+ /* @__PURE__ */ g(ue, {
230
231
  className: "mt-4",
231
- children: /* @__PURE__ */ y("div", {
232
+ children: /* @__PURE__ */ _("div", {
232
233
  className: "grid grid-cols-2 gap-4 sm:grid-cols-4",
233
234
  children: [
234
- /* @__PURE__ */ y(b, {
235
+ /* @__PURE__ */ _(v, {
235
236
  treatment: "metric",
236
237
  className: "p-4",
237
- children: [/* @__PURE__ */ v("p", {
238
+ children: [/* @__PURE__ */ g("p", {
238
239
  className: "text-sm text-text-secondary",
239
- children: T("devportal.totalApps", "Total Apps")
240
- }), /* @__PURE__ */ v("p", {
240
+ children: w("devportal.totalApps", "Total Apps")
241
+ }), /* @__PURE__ */ g("p", {
241
242
  className: "mt-1 text-2xl font-semibold tabular-nums",
242
243
  children: K.total
243
244
  })]
244
245
  }),
245
- /* @__PURE__ */ y(b, {
246
+ /* @__PURE__ */ _(v, {
246
247
  treatment: "metric",
247
248
  className: "p-4",
248
- children: [/* @__PURE__ */ v("p", {
249
+ children: [/* @__PURE__ */ g("p", {
249
250
  className: "text-sm text-status-success-text",
250
- children: T("devportal.active", "Active")
251
- }), /* @__PURE__ */ v("p", {
251
+ children: w("devportal.active", "Active")
252
+ }), /* @__PURE__ */ g("p", {
252
253
  className: "mt-1 text-2xl font-semibold tabular-nums",
253
254
  children: K.active
254
255
  })]
255
256
  }),
256
- /* @__PURE__ */ y(b, {
257
+ /* @__PURE__ */ _(v, {
257
258
  treatment: "metric",
258
259
  className: "p-4",
259
- children: [/* @__PURE__ */ v("p", {
260
+ children: [/* @__PURE__ */ g("p", {
260
261
  className: "text-sm text-text-secondary",
261
- children: T("devportal.published", "Published")
262
- }), /* @__PURE__ */ v("p", {
262
+ children: w("devportal.published", "Published")
263
+ }), /* @__PURE__ */ g("p", {
263
264
  className: "mt-1 text-2xl font-semibold tabular-nums",
264
265
  children: K.published
265
266
  })]
266
267
  }),
267
- /* @__PURE__ */ y(b, {
268
+ /* @__PURE__ */ _(v, {
268
269
  treatment: "metric",
269
270
  className: "p-4",
270
- children: [/* @__PURE__ */ v("p", {
271
+ children: [/* @__PURE__ */ g("p", {
271
272
  className: "text-sm text-text-secondary",
272
- children: T("devportal.draft", "Draft")
273
- }), /* @__PURE__ */ v("p", {
273
+ children: w("devportal.draft", "Draft")
274
+ }), /* @__PURE__ */ g("p", {
274
275
  className: "mt-1 text-2xl font-semibold tabular-nums",
275
276
  children: K.draft
276
277
  })]
@@ -278,210 +279,211 @@ var S = () => {
278
279
  ]
279
280
  })
280
281
  }),
281
- L && /* @__PURE__ */ v("div", {
282
- className: `rounded-lg border px-4 py-3 text-sm ${L.type === "success" ? "border-border-subtle bg-status-success-bg-subtle text-status-success-text" : "border-status-error-border/40 bg-status-error-bg/10 text-status-error-text"}`,
283
- children: /* @__PURE__ */ y("div", {
282
+ R && /* @__PURE__ */ g("div", {
283
+ className: `rounded-lg border px-4 py-3 text-sm ${R.type === "success" ? "border-border-subtle bg-status-success-bg-subtle text-status-success-text" : "border-status-error-border/40 bg-status-error-bg/10 text-status-error-text"}`,
284
+ children: /* @__PURE__ */ _("div", {
284
285
  className: "flex items-center justify-between gap-3",
285
- children: [/* @__PURE__ */ v("span", { children: L.message }), /* @__PURE__ */ v("button", {
286
- onClick: () => R(null),
286
+ children: [/* @__PURE__ */ g("span", { children: R.message }), /* @__PURE__ */ g("button", {
287
+ onClick: () => z(null),
287
288
  className: "text-xs font-medium underline underline-offset-2",
288
- children: T("devportal.dismiss", "Dismiss")
289
+ children: w("devportal.dismiss", "Dismiss")
289
290
  })]
290
291
  })
291
292
  }),
292
- G.length > 0 && /* @__PURE__ */ v("div", {
293
+ G.length > 0 && /* @__PURE__ */ g("div", {
293
294
  className: "rounded-card border border-border-seam bg-bg-surface p-4 shadow-[var(--shadow-pop)]",
294
- children: /* @__PURE__ */ y("div", {
295
+ children: /* @__PURE__ */ _("div", {
295
296
  className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
296
- children: [/* @__PURE__ */ y("div", {
297
+ children: [/* @__PURE__ */ _("div", {
297
298
  className: "flex flex-wrap items-center gap-3",
298
- children: [/* @__PURE__ */ y("div", {
299
+ children: [/* @__PURE__ */ _("div", {
299
300
  className: "flex items-center gap-2",
300
- children: [/* @__PURE__ */ v(o, {
301
+ children: [/* @__PURE__ */ g(i, {
301
302
  checked: Y,
302
303
  indeterminate: X,
303
304
  onChange: Q,
304
- ariaLabel: T("devportal.selectAllVisibleApplications", "Select all visible applications")
305
- }), /* @__PURE__ */ v("span", {
305
+ ariaLabel: w("devportal.selectAllVisibleApplications", "Select all visible applications")
306
+ }), /* @__PURE__ */ g("span", {
306
307
  className: "text-sm font-medium",
307
- children: T("devportal.selectAllVisible", "Select all visible")
308
+ children: w("devportal.selectAllVisible", "Select all visible")
308
309
  })]
309
- }), N.size > 0 && /* @__PURE__ */ v("button", {
310
+ }), P.size > 0 && /* @__PURE__ */ g("button", {
310
311
  onClick: $,
311
312
  className: "text-sm text-text-secondary hover:text-text-primary",
312
- children: T("devportal.clearSelection", "Clear selection")
313
+ children: w("devportal.clearSelection", "Clear selection")
313
314
  })]
314
- }), /* @__PURE__ */ y("div", {
315
+ }), /* @__PURE__ */ _("div", {
315
316
  className: "flex flex-wrap items-center gap-2",
316
- children: [/* @__PURE__ */ y("span", {
317
+ children: [/* @__PURE__ */ _("span", {
317
318
  className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
318
319
  children: [
319
- N.size,
320
+ P.size,
320
321
  " ",
321
- T("devportal.selectedLower", "selected")
322
+ w("devportal.selectedLower", "selected")
322
323
  ]
323
- }), /* @__PURE__ */ y("button", {
324
- onClick: () => I("deactivate"),
325
- disabled: J.length === 0 || !D.allowed,
326
- "aria-disabled": J.length === 0 || !D.allowed,
327
- title: D.allowed ? void 0 : T("devportal.common.noPermission", "You do not have permission to perform this action"),
324
+ }), /* @__PURE__ */ _("button", {
325
+ onClick: () => L("deactivate"),
326
+ disabled: J.length === 0 || !E.allowed,
327
+ "aria-disabled": J.length === 0 || !E.allowed,
328
+ title: E.allowed ? void 0 : w("devportal.common.noPermission", "You do not have permission to perform this action"),
328
329
  className: "inline-flex items-center gap-2 rounded-md border border-status-warning-bg px-3 py-2 text-sm font-medium text-status-warning-text transition-colors hover:bg-status-warning-bg-subtle disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
329
330
  children: [
330
- /* @__PURE__ */ v(ie, {
331
+ /* @__PURE__ */ g(ce, {
331
332
  size: 16,
332
333
  "aria-hidden": "true"
333
334
  }),
334
- T("devportal.deactivateSelected", "Deactivate Selected"),
335
+ w("devportal.deactivateSelected", "Deactivate Selected"),
335
336
  J.length > 0 ? ` (${J.length})` : ""
336
337
  ]
337
338
  })]
338
339
  })]
339
340
  })
340
341
  }),
341
- /* @__PURE__ */ y("p", {
342
+ /* @__PURE__ */ _("p", {
342
343
  className: "text-sm text-text-secondary",
343
344
  children: [
344
345
  G.length,
345
346
  " ",
346
- G.length === 1 ? T("devportal.applicationFound", "application found") : T("devportal.applicationsFound", "applications found")
347
+ G.length === 1 ? w("devportal.applicationFound", "application found") : w("devportal.applicationsFound", "applications found")
347
348
  ]
348
349
  }),
349
- G.length > 0 ? O === "grid" ? /* @__PURE__ */ v("div", {
350
+ G.length > 0 ? D === "grid" ? /* @__PURE__ */ g("div", {
350
351
  className: "grid gap-4 grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
351
- children: G.map((e) => /* @__PURE__ */ v(t, {
352
+ children: G.map((e) => /* @__PURE__ */ g(t, {
352
353
  app: e,
353
- selected: N.has(e.id),
354
+ selected: P.has(e.id),
354
355
  onToggleSelect: (t) => Z(e.id, t)
355
356
  }, e.id))
356
- }) : /* @__PURE__ */ v("div", {
357
+ }) : /* @__PURE__ */ g("div", {
357
358
  className: "overflow-x-auto rounded-lg border border-border-seam",
358
- children: /* @__PURE__ */ y("table", {
359
+ children: /* @__PURE__ */ _("table", {
359
360
  className: "w-full text-sm",
360
- children: [/* @__PURE__ */ v("thead", { children: /* @__PURE__ */ y("tr", {
361
+ children: [/* @__PURE__ */ g("thead", { children: /* @__PURE__ */ _("tr", {
361
362
  className: "border-b border-border-seam bg-bg-sunken text-left",
362
363
  children: [
363
- /* @__PURE__ */ v("th", {
364
+ /* @__PURE__ */ g("th", {
364
365
  className: "w-10 px-4 py-3",
365
- children: /* @__PURE__ */ v(o, {
366
+ children: /* @__PURE__ */ g(i, {
366
367
  checked: Y,
367
368
  indeterminate: X,
368
369
  onChange: Q,
369
- ariaLabel: T("devportal.selectAll", "Select all")
370
+ ariaLabel: w("devportal.selectAll", "Select all")
370
371
  })
371
372
  }),
372
- /* @__PURE__ */ v("th", {
373
+ /* @__PURE__ */ g("th", {
373
374
  className: "px-4 py-3 font-medium text-text-secondary",
374
- children: T("devportal.name", "Name")
375
+ children: w("devportal.name", "Name")
375
376
  }),
376
- /* @__PURE__ */ v("th", {
377
+ /* @__PURE__ */ g("th", {
377
378
  className: "px-4 py-3 font-medium text-text-secondary",
378
- children: T("devportal.status", "Status")
379
+ children: w("devportal.status", "Status")
379
380
  }),
380
- /* @__PURE__ */ v("th", {
381
+ /* @__PURE__ */ g("th", {
381
382
  className: "px-4 py-3 font-medium text-text-secondary",
382
- children: T("devportal.type", "Type")
383
+ children: w("devportal.type", "Type")
383
384
  }),
384
- /* @__PURE__ */ v("th", {
385
+ /* @__PURE__ */ g("th", {
385
386
  className: "px-4 py-3 font-medium text-text-secondary",
386
- children: T("devportal.created", "Created")
387
+ children: w("devportal.created", "Created")
387
388
  }),
388
- /* @__PURE__ */ v("th", { className: "px-4 py-3 font-medium text-text-secondary" })
389
+ /* @__PURE__ */ g("th", { className: "px-4 py-3 font-medium text-text-secondary" })
389
390
  ]
390
- }) }), /* @__PURE__ */ v("tbody", {
391
+ }) }), /* @__PURE__ */ g("tbody", {
391
392
  className: "divide-y divide-border-seam",
392
- children: G.map((e) => /* @__PURE__ */ y("tr", {
393
- className: `hover:bg-bg-surface-hover transition-colors ${N.has(e.id) ? "bg-action-primary-bg/5" : ""}`,
393
+ children: G.map((e) => /* @__PURE__ */ _("tr", {
394
+ className: `hover:bg-bg-surface-hover transition-colors ${P.has(e.id) ? "bg-action-primary-bg/5" : ""}`,
394
395
  children: [
395
- /* @__PURE__ */ v("td", {
396
+ /* @__PURE__ */ g("td", {
396
397
  className: "w-10 px-4 py-3",
397
- children: /* @__PURE__ */ v(o, {
398
- checked: N.has(e.id),
398
+ children: /* @__PURE__ */ g(i, {
399
+ checked: P.has(e.id),
399
400
  onChange: (t) => Z(e.id, t),
400
- ariaLabel: T("devportal.selectNamed", "Select {{name}}", { name: e.name })
401
+ ariaLabel: w("devportal.selectNamed", "Select {{name}}", { name: e.name })
401
402
  })
402
403
  }),
403
- /* @__PURE__ */ v("td", {
404
+ /* @__PURE__ */ g("td", {
404
405
  className: "px-4 py-3",
405
- children: /* @__PURE__ */ y("button", {
406
+ children: /* @__PURE__ */ _("button", {
406
407
  onClick: () => W(`/apps/${e.id}`),
407
408
  className: "group flex items-center gap-3 text-left",
408
- children: [e.iconUrl ? /* @__PURE__ */ v("img", {
409
+ children: [/* @__PURE__ */ g(c, {
409
410
  src: e.iconUrl,
410
411
  alt: "",
411
- className: "h-8 w-8 rounded object-cover"
412
- }) : /* @__PURE__ */ v("div", {
413
- className: "flex h-8 w-8 items-center justify-center rounded bg-bg-sunken text-text-secondary",
414
- children: /* @__PURE__ */ v(m, { size: 14 })
415
- }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
412
+ className: "h-8 w-8 rounded object-cover",
413
+ fallback: /* @__PURE__ */ g("div", {
414
+ className: "flex h-8 w-8 items-center justify-center rounded bg-bg-sunken text-text-secondary",
415
+ children: /* @__PURE__ */ g(d, { size: 14 })
416
+ })
417
+ }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
416
418
  className: "font-medium text-text-primary group-hover:text-action-primary-text transition-colors",
417
419
  children: e.name
418
- }), e.shortDescription && /* @__PURE__ */ v("p", {
420
+ }), e.shortDescription && /* @__PURE__ */ g("p", {
419
421
  className: "text-xs text-text-secondary line-clamp-1",
420
422
  children: e.shortDescription
421
423
  })] })]
422
424
  })
423
425
  }),
424
- /* @__PURE__ */ v("td", {
426
+ /* @__PURE__ */ g("td", {
425
427
  className: "px-4 py-3",
426
- children: /* @__PURE__ */ v(le, {
428
+ children: /* @__PURE__ */ g(y, {
427
429
  status: e.status,
428
- tr: T
430
+ tr: w
429
431
  })
430
432
  }),
431
- /* @__PURE__ */ v("td", {
433
+ /* @__PURE__ */ g("td", {
432
434
  className: "px-4 py-3 text-text-secondary",
433
- children: d[e.appType] || e.appType
435
+ children: o[e.appType] || e.appType
434
436
  }),
435
- /* @__PURE__ */ v("td", {
437
+ /* @__PURE__ */ g("td", {
436
438
  className: "px-4 py-3 text-text-secondary tabular-nums",
437
439
  children: new Date(e.createdAt).toLocaleDateString()
438
440
  }),
439
- /* @__PURE__ */ v("td", {
441
+ /* @__PURE__ */ g("td", {
440
442
  className: "px-4 py-3 text-right",
441
- children: /* @__PURE__ */ v("button", {
443
+ children: /* @__PURE__ */ g("button", {
442
444
  onClick: () => W(`/apps/${e.id}`),
443
445
  className: "rounded-md px-3 py-1.5 text-xs font-medium text-text-secondary hover:bg-bg-sunken hover:text-text-primary transition-colors",
444
- children: T("devportal.view", "View")
446
+ children: w("devportal.view", "View")
445
447
  })
446
448
  })
447
449
  ]
448
450
  }, e.id))
449
451
  })]
450
452
  })
451
- }) : /* @__PURE__ */ v(n, {
452
- illustration: A || j || M ? "empty-search" : "empty-data",
453
- icon: /* @__PURE__ */ v(m, { size: 32 }),
454
- title: T("devportal.noApplicationsFound", "No applications found"),
455
- description: A || j || M ? T("devportal.tryAdjustingFilters", "Try adjusting your filters") : T("devportal.createFirstApp", "Create your first application to get started"),
456
- action: !A && !j && !M ? /* @__PURE__ */ y("button", {
453
+ }) : /* @__PURE__ */ g(n, {
454
+ illustration: k || A || M ? "empty-search" : "empty-data",
455
+ icon: /* @__PURE__ */ g(d, { size: 32 }),
456
+ title: w("devportal.noApplicationsFound", "No applications found"),
457
+ description: k || A || M ? w("devportal.tryAdjustingFilters", "Try adjusting your filters") : w("devportal.createFirstApp", "Create your first application to get started"),
458
+ action: !k && !A && !M ? /* @__PURE__ */ _("button", {
457
459
  onClick: () => W("/apps/new"),
458
460
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
459
- children: [/* @__PURE__ */ v(g, { size: 16 }), T("devportal.createApp", "Create App")]
461
+ children: [/* @__PURE__ */ g(m, { size: 16 }), w("devportal.createApp", "Create App")]
460
462
  }) : void 0
461
463
  }),
462
- /* @__PURE__ */ v(ee, {
463
- open: F === "deactivate",
464
+ /* @__PURE__ */ g(ne, {
465
+ open: I === "deactivate",
464
466
  onOpenChange: (e) => {
465
- e || I(null);
467
+ e || L(null);
466
468
  },
467
469
  onConfirm: async () => {
468
470
  if (J.length === 0) return;
469
- let e = await Promise.allSettled(J.map((e) => pe({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
470
- R({
471
+ let e = await Promise.allSettled(J.map((e) => me({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
472
+ z({
471
473
  type: n === 0 ? "success" : "error",
472
- message: ce(T("devportal.deactivated", "Deactivated"), t, n)
473
- }), $(), I(null), await H();
474
+ message: de(w("devportal.deactivated", "Deactivated"), t, n)
475
+ }), $(), L(null), await H();
474
476
  },
475
- title: T("devportal.deactivateSelectedApplications", "Deactivate selected applications"),
476
- description: T("devportal.deactivateSelectedApplicationsDescription", "Deactivate {{count}} selected application(s)? Users and integrations may lose access until these apps are re-enabled.", { count: J.length }),
477
- confirmLabel: T("devportal.deactivate", "Deactivate"),
478
- cancelLabel: T("devportal.cancel", "Cancel"),
477
+ title: w("devportal.deactivateSelectedApplications", "Deactivate selected applications"),
478
+ description: w("devportal.deactivateSelectedApplicationsDescription", "Deactivate {{count}} selected application(s)? Users and integrations may lose access until these apps are re-enabled.", { count: J.length }),
479
+ confirmLabel: w("devportal.deactivate", "Deactivate"),
480
+ cancelLabel: w("devportal.cancel", "Cancel"),
479
481
  variant: "warning"
480
482
  })
481
483
  ]
482
484
  })
483
485
  });
484
486
  };
485
- export { S as ApplicationsPage };
487
+ export { x as ApplicationsPage };
486
488
 
487
489
  //# sourceMappingURL=ApplicationsPage.js.map