@burdenoff/microfe-export 2026.1023.2 → 2026.1107.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.
@@ -1,19 +1,20 @@
1
- import { useExport as e } from "../providers/ExportProvider.js";
2
- import { useTr as t } from "../hooks/useTr.js";
3
- import { useCancelExportJob as n, useDeleteExportJob as r, useExportJob as ee, useExportJobProgress as i, useRetryExportJob as a } from "../hooks/useExportQueries.js";
4
- import { cn as o } from "../utils/cn.js";
5
- import { getArchiveFormatDisplayName as s, getFormatDisplayName as c } from "../constants/enums.js";
6
- import { ExportStatusBadge as te } from "../components/ExportStatusBadge.js";
7
- import { ExportProgressBar as ne } from "../components/ExportProgressBar.js";
8
- import { PageLayout as l, PageSection as re } from "../components/PageLayout.js";
9
- import { nativeImpact as ie, nativeNotify as u } from "../../utils/nativeBridge.js";
10
- import { useState as ae } from "react";
11
- import { AlertCircle as oe, ArrowLeft as d, CheckCircle2 as f, Clock as p, Download as m, FileDown as h, FileText as g, HardDrive as se, Loader2 as _, RotateCcw as v, Trash2 as y, XCircle as ce } from "lucide-react";
12
- import { useNavigate as le, useParams as ue } from "react-router";
13
- import { jsx as b, jsxs as x } from "react/jsx-runtime";
14
- import { CTAOverflowMenu as S, GlassCard as C, IllustratedEmptyState as w, NextSteps as T } from "@burdenoff/fe-libs/ui";
1
+ import { exportArchiveDownload as e } from "../utils/exportAuthority.js";
2
+ import { useExport as t } from "../providers/ExportProvider.js";
3
+ import { useTr as n } from "../hooks/useTr.js";
4
+ import { useCancelExportJob as r, useDeleteExportJob as i, useExportJob as a, useExportJobProgress as o, useRetryExportJob as s } from "../hooks/useExportQueries.js";
5
+ import { cn as ee } from "../utils/cn.js";
6
+ import { getArchiveFormatDisplayName as te, getFormatDisplayName as ne } from "../constants/enums.js";
7
+ import { ExportStatusBadge as re } from "../components/ExportStatusBadge.js";
8
+ import { ExportProgressBar as ie } from "../components/ExportProgressBar.js";
9
+ import { PageLayout as c, PageSection as l } from "../components/PageLayout.js";
10
+ import { nativeImpact as u, nativeNotify as d } from "../../utils/nativeBridge.js";
11
+ import { useState as f } from "react";
12
+ import { AlertCircle as p, ArrowLeft as m, CheckCircle2 as h, Clock as g, Download as _, FileDown as v, FileText as y, HardDrive as ae, Loader2 as b, RotateCcw as x, Trash2 as oe, XCircle as se } from "lucide-react";
13
+ import { useNavigate as ce, useParams as le } from "react-router";
14
+ import { jsx as S, jsxs as C } from "react/jsx-runtime";
15
+ import { CTAOverflowMenu as w, GlassCard as T, IllustratedEmptyState as E, NextSteps as D } from "@burdenoff/fe-libs/ui";
15
16
  //#region src/export/pages/ExportDetailPage.tsx
16
- function E(e) {
17
+ function O(e) {
17
18
  if (e === 0) return "0 B";
18
19
  let t = 1024, n = [
19
20
  "B",
@@ -24,170 +25,170 @@ function E(e) {
24
25
  ], r = Math.floor(Math.log(e) / Math.log(t));
25
26
  return `${parseFloat((e / t ** +r).toFixed(2))} ${n[r]}`;
26
27
  }
27
- var D = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
28
- function O() {
29
- let { jobId: O } = ue(), { basePath: k = "/", navigate: A } = e(), j = le(), M = t(), N = () => {
30
- window.history.length > 1 ? j(-1) : A?.(k);
31
- }, { data: P, isLoading: F } = ee(O), { data: I } = i(O), [L, R] = ae(null), { cancelJob: z, isPending: B } = n(), { deleteJob: V, isPending: H } = r(), { retryJob: U, isPending: W } = a(), G = I ?? P ?? null, K = G?.status === "CREATED" || G?.status === "QUEUED" || G?.status === "RUNNING", q = G?.status === "COMPLETED", J = G?.status === "FAILED", Y = G?.status === "FAILED" || G?.status === "CANCELLED" || G?.status === "EXPIRED", de = async () => {
32
- O && R("cancel");
33
- }, fe = async () => {
34
- O && (ie("medium"), R("delete"));
28
+ var k = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
29
+ function A() {
30
+ let { jobId: A } = le(), { basePath: j = "/", navigate: M } = t(), N = ce(), P = n(), F = () => {
31
+ window.history.length > 1 ? N(-1) : M?.(j);
32
+ }, { data: I, isLoading: L } = a(A), { data: R } = o(A), [z, B] = f(null), { cancelJob: V, isPending: H } = r(), { deleteJob: U, isPending: W } = i(), { retryJob: ue, isPending: G } = s(I?.exportScope ?? "INDIVIDUAL"), K = R ?? I ?? null, q = K?.status === "CREATED" || K?.status === "QUEUED" || K?.status === "RUNNING", J = K?.status === "COMPLETED", de = K?.status === "FAILED", Y = K?.status === "FAILED" || K?.status === "CANCELLED" || K?.status === "EXPIRED", fe = async () => {
33
+ A && B("cancel");
35
34
  }, pe = async () => {
36
- if (!(!O || !L)) {
35
+ A && (u("medium"), B("delete"));
36
+ }, me = async () => {
37
+ if (!(!A || !z)) {
37
38
  try {
38
- L === "cancel" ? await z(O) : (await V(O), A?.(k)), u("success");
39
+ z === "cancel" ? await V(A) : (await U(A), M?.(j)), d("success");
39
40
  } catch {
40
- u("error");
41
+ d("error");
41
42
  }
42
- R(null);
43
+ B(null);
43
44
  }
44
45
  }, X = async () => {
45
- if (!O) return;
46
- let e = await U(O);
47
- e?.id && A?.(D(k, e.id));
48
- }, Z = G?.parts.find((e) => e.downloadUrl);
49
- if (F) return /* @__PURE__ */ x("div", {
46
+ if (!A) return;
47
+ let e = await ue(A);
48
+ e?.id && M?.(k(j, e.id));
49
+ }, Z = e(K);
50
+ if (L) return /* @__PURE__ */ C("div", {
50
51
  className: "flex flex-col items-center justify-center py-20",
51
- children: [/* @__PURE__ */ b(_, {
52
+ children: [/* @__PURE__ */ S(b, {
52
53
  size: 48,
53
54
  className: "animate-spin text-primary"
54
- }), /* @__PURE__ */ b("span", {
55
+ }), /* @__PURE__ */ S("span", {
55
56
  className: "mt-6 text-sm font-medium text-text-secondary",
56
- children: M("export.detail.loading", "Loading export details…")
57
+ children: P("export.detail.loading", "Loading export details…")
57
58
  })]
58
59
  });
59
- if (!G) return /* @__PURE__ */ x(l, {
60
+ if (!K) return /* @__PURE__ */ C(c, {
60
61
  showHeader: !1,
61
- children: [/* @__PURE__ */ x("div", {
62
+ children: [/* @__PURE__ */ C("div", {
62
63
  className: "flex items-center gap-3 mb-6",
63
- children: [/* @__PURE__ */ b("button", {
64
+ children: [/* @__PURE__ */ S("button", {
64
65
  type: "button",
65
- onClick: N,
66
- "aria-label": M("export.detail.actions.back", "Go back"),
66
+ onClick: F,
67
+ "aria-label": P("export.detail.actions.back", "Go back"),
67
68
  className: "p-2.5 hover:bg-accent rounded-lg transition-all duration-200",
68
- children: /* @__PURE__ */ b(d, { size: 20 })
69
- }), /* @__PURE__ */ b("h1", {
69
+ children: /* @__PURE__ */ S(m, { size: 20 })
70
+ }), /* @__PURE__ */ S("h1", {
70
71
  className: "text-xl font-bold",
71
- children: M("export.detail.notFound.title", "Export Not Found")
72
+ children: P("export.detail.notFound.title", "Export Not Found")
72
73
  })]
73
- }), /* @__PURE__ */ b(w, {
74
+ }), /* @__PURE__ */ S(E, {
74
75
  illustration: "empty-data",
75
- title: M("export.detail.notFound.heading", "Export not found"),
76
- description: M("export.detail.notFound.description", "The export job you are looking for does not exist or has been deleted."),
77
- action: /* @__PURE__ */ x("button", {
76
+ title: P("export.detail.notFound.heading", "Export not found"),
77
+ description: P("export.detail.notFound.description", "The export job you are looking for does not exist or has been deleted."),
78
+ action: /* @__PURE__ */ C("button", {
78
79
  type: "button",
79
- onClick: N,
80
+ onClick: F,
80
81
  className: "inline-flex items-center gap-2 px-6 py-3 bg-action-primary-bg text-action-primary-text rounded-lg hover:bg-action-primary-bg/90 transition-colors font-medium",
81
- children: [/* @__PURE__ */ b(d, { size: 18 }), M("export.detail.actions.backToDashboard", "Back to Dashboard")]
82
+ children: [/* @__PURE__ */ S(m, { size: 18 }), P("export.detail.actions.backToDashboard", "Back to Dashboard")]
82
83
  })
83
84
  })]
84
85
  });
85
86
  let Q = Z ? {
86
- label: M("export.detail.actions.download", "Download"),
87
- icon: /* @__PURE__ */ b(m, { size: 16 }),
87
+ label: P("export.detail.actions.downloadArchive", "Download Archive"),
88
+ icon: /* @__PURE__ */ S(_, { size: 16 }),
88
89
  onSelect: () => {
89
- Z.downloadUrl && window.location.assign(Z.downloadUrl);
90
+ Z && window.location.assign(Z);
90
91
  }
91
92
  } : Y ? {
92
- label: M("export.detail.actions.retry", "Retry Export"),
93
- icon: /* @__PURE__ */ b(v, { size: 16 }),
94
- disabled: W,
93
+ label: P("export.detail.actions.retry", "Retry Export"),
94
+ icon: /* @__PURE__ */ S(x, { size: 16 }),
95
+ disabled: G,
95
96
  onSelect: () => {
96
97
  X();
97
98
  }
98
99
  } : void 0, $ = [];
99
100
  Y && Z && $.push({
100
- label: M("export.detail.actions.retry", "Retry Export"),
101
- icon: /* @__PURE__ */ b(v, { size: 16 }),
102
- disabled: W,
101
+ label: P("export.detail.actions.retry", "Retry Export"),
102
+ icon: /* @__PURE__ */ S(x, { size: 16 }),
103
+ disabled: G,
103
104
  onSelect: () => {
104
105
  X();
105
106
  }
106
- }), K && $.push({
107
- label: M("export.detail.actions.cancel", "Cancel Export"),
108
- icon: /* @__PURE__ */ b(ce, { size: 16 }),
109
- disabled: B,
107
+ }), q && $.push({
108
+ label: P("export.detail.actions.cancel", "Cancel Export"),
109
+ icon: /* @__PURE__ */ S(se, { size: 16 }),
110
+ disabled: H,
110
111
  onSelect: () => {
111
- de();
112
+ fe();
112
113
  }
113
- }), K || $.push({
114
- label: M("export.detail.actions.delete", "Delete Export"),
115
- icon: /* @__PURE__ */ b(y, { size: 16 }),
114
+ }), q || $.push({
115
+ label: P("export.detail.actions.delete", "Delete Export"),
116
+ icon: /* @__PURE__ */ S(oe, { size: 16 }),
116
117
  intent: "destructive",
117
- disabled: H,
118
+ disabled: W,
118
119
  onSelect: () => {
119
- fe();
120
+ pe();
120
121
  }
121
122
  });
122
- let me = [
123
+ let he = [
123
124
  {
124
125
  id: "download",
125
- label: M("export.detail.nextSteps.download.label", "Download your export"),
126
- description: M("export.detail.nextSteps.download.description", "Grab the generated files below before their download links expire."),
127
- icon: /* @__PURE__ */ b(m, { size: 16 }),
126
+ label: P("export.detail.nextSteps.download.label", "Download your export"),
127
+ description: P("export.detail.nextSteps.download.description", "Grab the generated files below before their download links expire."),
128
+ icon: /* @__PURE__ */ S(_, { size: 16 }),
128
129
  onClick: () => {
129
- Z?.downloadUrl && window.location.assign(Z.downloadUrl);
130
+ Z && window.location.assign(Z);
130
131
  },
131
- done: q
132
+ done: J
132
133
  },
133
134
  ...Y ? [{
134
135
  id: "retry",
135
- label: M("export.detail.nextSteps.retry.label", "Retry this export"),
136
- description: M("export.detail.nextSteps.retry.description", "This export didn't finish — start a fresh run with the same settings."),
137
- icon: /* @__PURE__ */ b(v, { size: 16 }),
136
+ label: P("export.detail.nextSteps.retry.label", "Retry this export"),
137
+ description: P("export.detail.nextSteps.retry.description", "This export didn't finish — start a fresh run with the same settings."),
138
+ icon: /* @__PURE__ */ S(x, { size: 16 }),
138
139
  onClick: () => {
139
140
  X();
140
141
  }
141
142
  }] : [],
142
143
  {
143
144
  id: "history",
144
- label: M("export.detail.nextSteps.history.label", "Back to History"),
145
- description: M("export.detail.nextSteps.history.description", "See all your exports and track other jobs in progress."),
146
- icon: /* @__PURE__ */ b(p, { size: 16 }),
147
- onClick: () => A?.(k)
145
+ label: P("export.detail.nextSteps.history.label", "Back to History"),
146
+ description: P("export.detail.nextSteps.history.description", "See all your exports and track other jobs in progress."),
147
+ icon: /* @__PURE__ */ S(g, { size: 16 }),
148
+ onClick: () => M?.(j)
148
149
  }
149
150
  ];
150
- return /* @__PURE__ */ x(l, {
151
+ return /* @__PURE__ */ C(c, {
151
152
  showHeader: !1,
152
153
  children: [
153
- /* @__PURE__ */ b("div", {
154
+ /* @__PURE__ */ S("div", {
154
155
  className: "relative overflow-hidden rounded-xl bg-accent-wash border border-border-seam p-6 shadow-[var(--shadow-pop)]",
155
- children: /* @__PURE__ */ x("div", {
156
+ children: /* @__PURE__ */ C("div", {
156
157
  className: "relative z-10 flex flex-col sm:flex-row sm:items-center gap-4",
157
158
  children: [
158
- /* @__PURE__ */ b("button", {
159
+ /* @__PURE__ */ S("button", {
159
160
  type: "button",
160
- onClick: N,
161
- "aria-label": M("export.detail.actions.back", "Go back"),
161
+ onClick: F,
162
+ "aria-label": P("export.detail.actions.back", "Go back"),
162
163
  className: "p-2.5 hover:bg-accent rounded-lg transition-colors duration-200 self-start focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",
163
- children: /* @__PURE__ */ b(d, { size: 20 })
164
+ children: /* @__PURE__ */ S(m, { size: 20 })
164
165
  }),
165
- /* @__PURE__ */ x("div", {
166
+ /* @__PURE__ */ C("div", {
166
167
  className: "flex items-center gap-3 flex-1 min-w-0",
167
168
  children: [
168
- /* @__PURE__ */ b("div", {
169
+ /* @__PURE__ */ S("div", {
169
170
  className: "p-2.5 rounded-lg bg-action-primary-bg/10",
170
- children: /* @__PURE__ */ b(m, {
171
+ children: /* @__PURE__ */ S(_, {
171
172
  size: 24,
172
173
  className: "text-primary"
173
174
  })
174
175
  }),
175
- /* @__PURE__ */ x("div", {
176
+ /* @__PURE__ */ C("div", {
176
177
  className: "flex-1 min-w-0",
177
- children: [/* @__PURE__ */ b("h1", {
178
+ children: [/* @__PURE__ */ S("h1", {
178
179
  className: "text-xl sm:text-2xl font-bold truncate",
179
- children: G.name
180
- }), /* @__PURE__ */ b("p", {
180
+ children: K.name
181
+ }), /* @__PURE__ */ S("p", {
181
182
  className: "text-sm text-text-secondary mt-1",
182
- children: G.entityTypes.join(", ")
183
+ children: K.entityTypes.join(", ")
183
184
  })]
184
185
  }),
185
- /* @__PURE__ */ b(te, { status: G.status })
186
+ /* @__PURE__ */ S(re, { status: K.status })
186
187
  ]
187
188
  }),
188
- (Q || $.length > 0) && /* @__PURE__ */ b("div", {
189
+ (Q || $.length > 0) && /* @__PURE__ */ S("div", {
189
190
  className: "flex-shrink-0",
190
- children: /* @__PURE__ */ b(S, {
191
+ children: /* @__PURE__ */ S(w, {
191
192
  primary: Q,
192
193
  actions: $
193
194
  })
@@ -195,167 +196,167 @@ function O() {
195
196
  ]
196
197
  })
197
198
  }),
198
- (G.status === "RUNNING" || G.status === "QUEUED") && /* @__PURE__ */ x("div", {
199
+ (K.status === "RUNNING" || K.status === "QUEUED") && /* @__PURE__ */ C("div", {
199
200
  className: "border border-border-seam rounded-xl bg-status-info-bg-subtle p-6",
200
- children: [/* @__PURE__ */ b(ne, {
201
- progress: G.progress,
201
+ children: [/* @__PURE__ */ S(ie, {
202
+ progress: K.progress,
202
203
  size: "lg"
203
- }), G.processedEntities != null && G.totalEntities != null && /* @__PURE__ */ b("p", {
204
+ }), K.processedEntities != null && K.totalEntities != null && /* @__PURE__ */ S("p", {
204
205
  className: "text-sm text-text-secondary mt-2",
205
- children: M("export.detail.progress.entitiesProcessed", "{{processed}} / {{total}} entities processed", {
206
- processed: G.processedEntities.toLocaleString(),
207
- total: G.totalEntities.toLocaleString()
206
+ children: P("export.detail.progress.entitiesProcessed", "{{processed}} / {{total}} entities processed", {
207
+ processed: K.processedEntities.toLocaleString(),
208
+ total: K.totalEntities.toLocaleString()
208
209
  })
209
210
  })]
210
211
  }),
211
- J && G.errorMessage && /* @__PURE__ */ x("div", {
212
+ de && K.errorMessage && /* @__PURE__ */ C("div", {
212
213
  className: "border-2 border-border-default rounded-xl bg-status-error-bg-subtle p-6 flex items-start gap-4",
213
- children: [/* @__PURE__ */ b(oe, {
214
+ children: [/* @__PURE__ */ S(p, {
214
215
  size: 24,
215
216
  className: "text-status-error-text flex-shrink-0 mt-0.5"
216
- }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h3", {
217
+ }), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("h3", {
217
218
  className: "font-semibold text-status-error-text mb-1",
218
- children: M("export.detail.error.title", "Export Failed")
219
- }), /* @__PURE__ */ b("p", {
219
+ children: P("export.detail.error.title", "Export Failed")
220
+ }), /* @__PURE__ */ S("p", {
220
221
  className: "text-sm text-status-error-text",
221
- children: G.errorMessage
222
+ children: K.errorMessage
222
223
  })] })]
223
224
  }),
224
- /* @__PURE__ */ b("div", {
225
+ /* @__PURE__ */ S("div", {
225
226
  className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",
226
227
  children: [
227
228
  {
228
- icon: /* @__PURE__ */ b(g, { size: 18 }),
229
- label: M("export.detail.info.format", "Format"),
230
- value: c(G.format)
229
+ icon: /* @__PURE__ */ S(y, { size: 18 }),
230
+ label: P("export.detail.info.format", "Format"),
231
+ value: ne(K.format)
231
232
  },
232
233
  {
233
- icon: /* @__PURE__ */ b(se, { size: 18 }),
234
- label: M("export.detail.info.archive", "Archive"),
235
- value: s(G.archiveFormat)
234
+ icon: /* @__PURE__ */ S(ae, { size: 18 }),
235
+ label: P("export.detail.info.archive", "Archive"),
236
+ value: te(K.archiveFormat)
236
237
  },
237
238
  {
238
- icon: /* @__PURE__ */ b(m, { size: 18 }),
239
- label: M("export.detail.info.totalSize", "Total Size"),
240
- value: G.totalSizeBytes == null ? "-" : E(G.totalSizeBytes)
239
+ icon: /* @__PURE__ */ S(_, { size: 18 }),
240
+ label: P("export.detail.info.totalSize", "Total Size"),
241
+ value: K.totalSizeBytes == null ? "-" : O(K.totalSizeBytes)
241
242
  },
242
243
  {
243
- icon: /* @__PURE__ */ b(p, { size: 18 }),
244
- label: M("export.detail.info.created", "Created"),
245
- value: new Date(G.createdAt).toLocaleDateString()
244
+ icon: /* @__PURE__ */ S(g, { size: 18 }),
245
+ label: P("export.detail.info.created", "Created"),
246
+ value: new Date(K.createdAt).toLocaleDateString()
246
247
  }
247
- ].map((e) => /* @__PURE__ */ x(C, {
248
+ ].map((e) => /* @__PURE__ */ C(T, {
248
249
  treatment: "metric",
249
250
  className: "p-4 border-border-seam",
250
- children: [/* @__PURE__ */ x("div", {
251
+ children: [/* @__PURE__ */ C("div", {
251
252
  className: "flex items-center gap-2 text-text-secondary mb-1",
252
- children: [e.icon, /* @__PURE__ */ b("span", {
253
+ children: [e.icon, /* @__PURE__ */ S("span", {
253
254
  className: "text-xs font-medium",
254
255
  children: e.label
255
256
  })]
256
- }), /* @__PURE__ */ b("p", {
257
+ }), /* @__PURE__ */ S("p", {
257
258
  className: "font-bold text-lg tabular-nums",
258
259
  children: e.value
259
260
  })]
260
261
  }, e.label))
261
262
  }),
262
- /* @__PURE__ */ b(T, {
263
- storageKey: `export-detail-${G.id}`,
264
- title: M("export.detail.nextSteps.title", "What's next"),
265
- steps: me
263
+ /* @__PURE__ */ S(D, {
264
+ storageKey: `export-detail-${K.id}`,
265
+ title: P("export.detail.nextSteps.title", "What's next"),
266
+ steps: he
266
267
  }),
267
- G.parts.length > 0 && /* @__PURE__ */ b(re, {
268
- title: M("export.detail.parts.title", "Export Parts"),
269
- description: M("export.detail.parts.description", "{{count}} file(s) generated", { count: G.parts.length }),
270
- children: /* @__PURE__ */ b("div", {
268
+ K.parts.length > 0 && /* @__PURE__ */ S(l, {
269
+ title: P("export.detail.parts.title", "Export Parts"),
270
+ description: P("export.detail.parts.description", "{{count}} file(s) generated", { count: K.parts.length }),
271
+ children: /* @__PURE__ */ S("div", {
271
272
  className: "space-y-2",
272
- children: G.parts.map((e) => /* @__PURE__ */ x("div", {
273
- className: o("border border-border-seam rounded-xl p-4 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 bg-bg-surface", "hover:border-primary/40 transition-colors duration-200"),
274
- children: [/* @__PURE__ */ x("div", {
273
+ children: K.parts.map((e) => /* @__PURE__ */ C("div", {
274
+ className: ee("border border-border-seam rounded-xl p-4 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 bg-bg-surface", "hover:border-primary/40 transition-colors duration-200"),
275
+ children: [/* @__PURE__ */ C("div", {
275
276
  className: "flex items-center gap-3 min-w-0",
276
- children: [/* @__PURE__ */ b(h, {
277
+ children: [/* @__PURE__ */ S(v, {
277
278
  size: 20,
278
279
  className: "text-primary flex-shrink-0"
279
- }), /* @__PURE__ */ x("div", {
280
+ }), /* @__PURE__ */ C("div", {
280
281
  className: "min-w-0",
281
- children: [/* @__PURE__ */ b("p", {
282
+ children: [/* @__PURE__ */ S("p", {
282
283
  className: "font-medium truncate",
283
284
  children: e.fileName
284
- }), /* @__PURE__ */ x("p", {
285
+ }), /* @__PURE__ */ C("p", {
285
286
  className: "text-sm text-text-secondary",
286
287
  children: [
287
288
  e.entityTypes.join(", "),
288
289
  " ·",
289
290
  " ",
290
- E(e.sizeBytes),
291
- e.downloadExpiresAt && ` · ${M("export.detail.parts.expires", "expires {{date}}", { date: new Date(e.downloadExpiresAt).toLocaleDateString() })}`
291
+ O(e.sizeBytes),
292
+ e.downloadExpiresAt && ` · ${P("export.detail.parts.expires", "expires {{date}}", { date: new Date(e.downloadExpiresAt).toLocaleDateString() })}`
292
293
  ]
293
294
  })]
294
295
  })]
295
- }), /* @__PURE__ */ b("div", {
296
+ }), /* @__PURE__ */ S("div", {
296
297
  className: "flex items-center gap-2 flex-shrink-0",
297
- children: e.downloadUrl ? /* @__PURE__ */ x("a", {
298
+ children: e.downloadUrl ? /* @__PURE__ */ C("a", {
298
299
  href: e.downloadUrl,
299
300
  className: "inline-flex items-center gap-2 px-3 py-1.5 bg-action-primary-bg text-action-primary-text rounded-lg hover:bg-action-primary-bg/90 transition-colors text-sm font-medium",
300
- children: [/* @__PURE__ */ b(m, { size: 14 }), M("export.detail.parts.download", "Download")]
301
- }) : /* @__PURE__ */ x("span", {
301
+ children: [/* @__PURE__ */ S(_, { size: 14 }), P("export.detail.parts.download", "Download")]
302
+ }) : /* @__PURE__ */ C("span", {
302
303
  className: "inline-flex items-center gap-1.5 text-sm text-text-secondary",
303
- children: [/* @__PURE__ */ b(p, { size: 14 }), M("export.detail.parts.pending", "Pending")]
304
+ children: [/* @__PURE__ */ S(g, { size: 14 }), P("export.detail.parts.pending", "Pending")]
304
305
  })
305
306
  })]
306
307
  }, e.id))
307
308
  })
308
309
  }),
309
- q && G.parts.length === 0 && /* @__PURE__ */ x("div", {
310
+ J && K.parts.length === 0 && /* @__PURE__ */ C("div", {
310
311
  className: "border-2 border-border-default rounded-xl bg-status-success-bg-subtle p-6 text-center",
311
312
  children: [
312
- /* @__PURE__ */ b(f, {
313
+ /* @__PURE__ */ S(h, {
313
314
  size: 48,
314
315
  className: "text-status-success-text mx-auto mb-3"
315
316
  }),
316
- /* @__PURE__ */ b("h3", {
317
+ /* @__PURE__ */ S("h3", {
317
318
  className: "text-lg font-bold text-status-success-text mb-1",
318
- children: M("export.detail.complete.title", "Export Complete")
319
+ children: P("export.detail.complete.title", "Export Complete")
319
320
  }),
320
- /* @__PURE__ */ b("p", {
321
+ /* @__PURE__ */ S("p", {
321
322
  className: "text-sm text-status-success-text",
322
- children: M("export.detail.complete.noParts", "Your export has completed but no download parts are available yet.")
323
+ children: P("export.detail.complete.noParts", "Your export has completed but no download parts are available yet.")
323
324
  })
324
325
  ]
325
326
  }),
326
- L && /* @__PURE__ */ b("div", {
327
+ z && /* @__PURE__ */ S("div", {
327
328
  role: "dialog",
328
329
  "aria-modal": "true",
329
330
  "aria-labelledby": "export-confirm-title",
330
331
  className: "fixed inset-0 z-50 flex items-center justify-center bg-bg-surface/80 backdrop-blur-sm p-4",
331
- children: /* @__PURE__ */ x("div", {
332
+ children: /* @__PURE__ */ C("div", {
332
333
  className: "w-full max-w-md rounded-xl border-2 border-border-subtle bg-bg-surface p-6 shadow-xl",
333
334
  children: [
334
- /* @__PURE__ */ b("h2", {
335
+ /* @__PURE__ */ S("h2", {
335
336
  id: "export-confirm-title",
336
337
  className: "text-lg font-bold",
337
- children: L === "cancel" ? M("export.detail.confirm.cancel.title", "Cancel export?") : M("export.detail.confirm.delete.title", "Delete export?")
338
+ children: z === "cancel" ? P("export.detail.confirm.cancel.title", "Cancel export?") : P("export.detail.confirm.delete.title", "Delete export?")
338
339
  }),
339
- /* @__PURE__ */ b("p", {
340
+ /* @__PURE__ */ S("p", {
340
341
  className: "mt-2 text-sm text-text-secondary",
341
- children: L === "cancel" ? M("export.detail.confirm.cancel.description", "This stops the running export job. You can retry it later if needed.") : M("export.detail.confirm.delete.description", "This removes the export job from history. This action cannot be undone.")
342
+ children: z === "cancel" ? P("export.detail.confirm.cancel.description", "This stops the running export job. You can retry it later if needed.") : P("export.detail.confirm.delete.description", "This removes the export job from history. This action cannot be undone.")
342
343
  }),
343
- /* @__PURE__ */ x("div", {
344
+ /* @__PURE__ */ C("div", {
344
345
  className: "mt-6 flex flex-col-reverse sm:flex-row sm:justify-end gap-3",
345
- children: [/* @__PURE__ */ b("button", {
346
+ children: [/* @__PURE__ */ S("button", {
346
347
  type: "button",
347
- onClick: () => R(null),
348
+ onClick: () => B(null),
348
349
  className: "px-4 py-2 rounded-lg border-2 border-border-subtle hover:bg-accent transition-colors font-medium",
349
- children: M("export.detail.confirm.keep", "Keep Export")
350
- }), /* @__PURE__ */ x("button", {
350
+ children: P("export.detail.confirm.keep", "Keep Export")
351
+ }), /* @__PURE__ */ C("button", {
351
352
  type: "button",
352
- onClick: pe,
353
- disabled: B || H,
353
+ onClick: me,
354
+ disabled: H || W,
354
355
  className: "inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg bg-status-error-bg text-status-error-text hover:bg-status-error-bg/90 transition-colors font-medium disabled:opacity-50",
355
- children: [B || H ? /* @__PURE__ */ b(_, {
356
+ children: [H || W ? /* @__PURE__ */ S(b, {
356
357
  size: 16,
357
358
  className: "animate-spin"
358
- }) : null, L === "cancel" ? M("export.detail.actions.cancel", "Cancel Export") : M("export.detail.actions.delete", "Delete Export")]
359
+ }) : null, z === "cancel" ? P("export.detail.actions.cancel", "Cancel Export") : P("export.detail.actions.delete", "Delete Export")]
359
360
  })]
360
361
  })
361
362
  ]
@@ -365,6 +366,6 @@ function O() {
365
366
  });
366
367
  }
367
368
  //#endregion
368
- export { O as ExportDetailPage };
369
+ export { A as ExportDetailPage };
369
370
 
370
371
  //# sourceMappingURL=ExportDetailPage.js.map