@burdenoff/microfe-export 2026.625.1 → 2026.626.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.
- package/dist/export/components/ExportStatusBadge.js +1 -1
- package/dist/export/components/ExportStatusBadge.js.map +1 -1
- package/dist/export/components/PageLayout.js +7 -18
- package/dist/export/components/PageLayout.js.map +1 -1
- package/dist/export/pages/CreateExportPage.js +95 -90
- package/dist/export/pages/CreateExportPage.js.map +1 -1
- package/dist/export/pages/ExportDashboardPage.js +148 -94
- package/dist/export/pages/ExportDashboardPage.js.map +1 -1
- package/dist/export/pages/ExportDetailPage.js +157 -134
- package/dist/export/pages/ExportDetailPage.js.map +1 -1
- package/dist/export/pages/ExportHistoryPage.js +147 -142
- package/dist/export/pages/ExportHistoryPage.js.map +1 -1
- package/dist/export/pages/ExportTemplatesPage.js +133 -129
- package/dist/export/pages/ExportTemplatesPage.js.map +1 -1
- package/dist/export/pages/TemplateDetailPage.js +103 -97
- package/dist/export/pages/TemplateDetailPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -7,7 +7,7 @@ import { useI18n as a } from "@burdenoff/fe-libs/shared/providers/shell/I18nProv
|
|
|
7
7
|
var o = {
|
|
8
8
|
CREATED: "bg-status-info-bg-subtle text-status-info-text",
|
|
9
9
|
QUEUED: "bg-status-warning-bg-subtle text-status-warning-text",
|
|
10
|
-
RUNNING: "bg-status-info-bg-subtle text-status-info-text animate-pulse",
|
|
10
|
+
RUNNING: "bg-status-info-bg-subtle text-status-info-text motion-safe:animate-vc-glow-pulse",
|
|
11
11
|
COMPLETED: "bg-status-success-bg-subtle text-status-success-text",
|
|
12
12
|
FAILED: "bg-status-error-bg-subtle text-status-error-text",
|
|
13
13
|
CANCELLED: "bg-bg-sunken text-text-secondary",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportStatusBadge.js","names":[],"sources":["../../../src/export/components/ExportStatusBadge.tsx"],"sourcesContent":["import { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport { cn } from \"../utils/cn\";\nimport { getStatusDisplayName } from \"../constants/enums\";\nimport type { ExportJobStatus } from \"../types\";\nimport { tWithFallback } from \"../utils/i18n\";\n\ninterface ExportStatusBadgeProps {\n status: ExportJobStatus;\n className?: string;\n}\n\nconst statusStyles: Record<ExportJobStatus, string> = {\n CREATED: \"bg-status-info-bg-subtle text-status-info-text\",\n QUEUED: \"bg-status-warning-bg-subtle text-status-warning-text\",\n RUNNING
|
|
1
|
+
{"version":3,"file":"ExportStatusBadge.js","names":[],"sources":["../../../src/export/components/ExportStatusBadge.tsx"],"sourcesContent":["import { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\nimport { cn } from \"../utils/cn\";\nimport { getStatusDisplayName } from \"../constants/enums\";\nimport type { ExportJobStatus } from \"../types\";\nimport { tWithFallback } from \"../utils/i18n\";\n\ninterface ExportStatusBadgeProps {\n status: ExportJobStatus;\n className?: string;\n}\n\nconst statusStyles: Record<ExportJobStatus, string> = {\n CREATED: \"bg-status-info-bg-subtle text-status-info-text\",\n QUEUED: \"bg-status-warning-bg-subtle text-status-warning-text\",\n RUNNING:\n \"bg-status-info-bg-subtle text-status-info-text motion-safe:animate-vc-glow-pulse\",\n COMPLETED: \"bg-status-success-bg-subtle text-status-success-text\",\n FAILED: \"bg-status-error-bg-subtle text-status-error-text\",\n CANCELLED: \"bg-bg-sunken text-text-secondary\",\n EXPIRED: \"bg-accent-orange-subtle text-accent-orange\",\n DELETED: \"bg-bg-sunken text-text-tertiary\",\n};\n\n/**\n * ExportStatusBadge - Renders a colored badge for export job status\n */\nexport function ExportStatusBadge({\n status,\n className,\n}: ExportStatusBadgeProps) {\n const { t } = useI18n();\n const tr = (key: string, fallback: string) => tWithFallback(t, key, fallback);\n\n const statusLabel =\n {\n CREATED: tr(\"export.shared.status.created\", \"Created\"),\n QUEUED: tr(\"export.shared.status.queued\", \"Queued\"),\n RUNNING: tr(\"export.shared.status.running\", \"Running\"),\n COMPLETED: tr(\"export.shared.status.completed\", \"Completed\"),\n FAILED: tr(\"export.shared.status.failed\", \"Failed\"),\n CANCELLED: tr(\"export.shared.status.cancelled\", \"Cancelled\"),\n EXPIRED: tr(\"export.shared.status.expired\", \"Expired\"),\n DELETED: tr(\"export.shared.status.deleted\", \"Deleted\"),\n }[status] ?? getStatusDisplayName(status);\n\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 px-2.5 py-0.5 rounded-full text-xs font-medium\",\n statusStyles[status],\n className,\n )}\n >\n {status === \"RUNNING\" && (\n <span className=\"relative flex size-2\">\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-accent-blue opacity-75\" />\n <span className=\"relative inline-flex rounded-full size-2 bg-accent-blue\" />\n </span>\n )}\n {statusLabel}\n </span>\n );\n}\n"],"mappings":";;;;;;AAWA,IAAM,IAAgD;CACpD,SAAS;CACT,QAAQ;CACR,SACE;CACF,WAAW;CACX,QAAQ;CACR,WAAW;CACX,SAAS;CACT,SAAS;CACV;AAKD,SAAgB,EAAkB,EAChC,WACA,gBACyB;CACzB,IAAM,EAAE,SAAM,GAAS,EACjB,KAAM,GAAa,MAAqB,EAAc,GAAG,GAAK,EAAS,EAEvE,IACJ;EACE,SAAS,EAAG,gCAAgC,UAAU;EACtD,QAAQ,EAAG,+BAA+B,SAAS;EACnD,SAAS,EAAG,gCAAgC,UAAU;EACtD,WAAW,EAAG,kCAAkC,YAAY;EAC5D,QAAQ,EAAG,+BAA+B,SAAS;EACnD,WAAW,EAAG,kCAAkC,YAAY;EAC5D,SAAS,EAAG,gCAAgC,UAAU;EACtD,SAAS,EAAG,gCAAgC,UAAU;EACvD,CAAC,MAAW,EAAqB,EAAO;AAE3C,QACE,kBAAC,QAAD;EACE,WAAW,EACT,mFACA,EAAa,IACb,EACD;YALH,CAOG,MAAW,aACV,kBAAC,QAAD;GAAM,WAAU;aAAhB,CACE,kBAAC,QAAD,EAAM,WAAU,0FAA2F,CAAA,EAC3G,kBAAC,QAAD,EAAM,WAAU,2DAA4D,CAAA,CACvE;MAER,EACI"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { cn as e } from "../utils/cn.js";
|
|
2
2
|
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
3
|
-
import
|
|
3
|
+
import "@burdenoff/fe-libs/ui";
|
|
4
4
|
//#region src/export/components/PageLayout.tsx
|
|
5
|
-
var
|
|
5
|
+
var r = {
|
|
6
6
|
sm: "max-w-screen-sm",
|
|
7
7
|
md: "max-w-screen-md",
|
|
8
8
|
lg: "max-w-screen-lg",
|
|
@@ -11,11 +11,11 @@ var i = {
|
|
|
11
11
|
"3xl": "max-w-[1600px]",
|
|
12
12
|
full: "max-w-full"
|
|
13
13
|
};
|
|
14
|
-
function
|
|
14
|
+
function i({ children: i, title: a, subtitle: o, icon: s, headerActions: c, headerContent: l, maxWidth: u = "xl", showHeader: d = !0, className: f, contentClassName: p }) {
|
|
15
15
|
return /* @__PURE__ */ t("div", {
|
|
16
16
|
className: e("min-h-full w-full", "px-4 sm:px-6 lg:px-8 xl:px-12", "py-6 sm:py-8 lg:py-10", "animate-in fade-in-0 slide-in-from-bottom-4 duration-500", f),
|
|
17
17
|
children: /* @__PURE__ */ n("div", {
|
|
18
|
-
className: e("mx-auto w-full",
|
|
18
|
+
className: e("mx-auto w-full", r[u], p),
|
|
19
19
|
children: [d && (a || c) && /* @__PURE__ */ n("header", {
|
|
20
20
|
className: "mb-6 sm:mb-8",
|
|
21
21
|
children: [/* @__PURE__ */ n("div", {
|
|
@@ -45,12 +45,12 @@ function a({ children: r, title: a, subtitle: o, icon: s, headerActions: c, head
|
|
|
45
45
|
})]
|
|
46
46
|
}), /* @__PURE__ */ t("div", {
|
|
47
47
|
className: "space-y-6",
|
|
48
|
-
children:
|
|
48
|
+
children: i
|
|
49
49
|
})]
|
|
50
50
|
})
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
|
-
function
|
|
53
|
+
function a({ children: r, title: i, description: a, actions: o, className: s, ...c }) {
|
|
54
54
|
return /* @__PURE__ */ n("section", {
|
|
55
55
|
className: e("space-y-4", s),
|
|
56
56
|
...c,
|
|
@@ -69,18 +69,7 @@ function o({ children: r, title: i, description: a, actions: o, className: s, ..
|
|
|
69
69
|
}), r]
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
|
-
function s({ icon: e, title: n, description: i, action: a, className: o }) {
|
|
73
|
-
return /* @__PURE__ */ t("div", {
|
|
74
|
-
className: o,
|
|
75
|
-
children: /* @__PURE__ */ t(r, {
|
|
76
|
-
icon: e,
|
|
77
|
-
title: n,
|
|
78
|
-
description: i,
|
|
79
|
-
action: a
|
|
80
|
-
})
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
72
|
//#endregion
|
|
84
|
-
export {
|
|
73
|
+
export { i as PageLayout, a as PageSection };
|
|
85
74
|
|
|
86
75
|
//# sourceMappingURL=PageLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageLayout.js","names":[],"sources":["../../../src/export/components/PageLayout.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { EmptyState as CanonicalEmptyState } from \"@burdenoff/fe-libs/ui\";\nimport { cn } from \"../utils/cn\";\n\ninterface PageLayoutProps {\n children: ReactNode;\n /** Page title */\n title?: string;\n /** Page subtitle/description */\n subtitle?: string;\n /** Icon component to display next to title */\n icon?: ReactNode;\n /** Actions to display in header (buttons, etc.) */\n headerActions?: ReactNode;\n /** Additional header content below title */\n headerContent?: ReactNode;\n /** Maximum width of content: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full' */\n maxWidth?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"full\";\n /** Whether to show the header section */\n showHeader?: boolean;\n /** Additional CSS classes for the container */\n className?: string;\n /** Additional CSS classes for the content area */\n contentClassName?: string;\n}\n\nconst maxWidthClasses = {\n sm: \"max-w-screen-sm\", // 640px\n md: \"max-w-screen-md\", // 768px\n lg: \"max-w-screen-lg\", // 1024px\n xl: \"max-w-screen-xl\", // 1280px\n \"2xl\": \"max-w-screen-2xl\", // 1536px\n \"3xl\": \"max-w-[1600px]\",\n full: \"max-w-full\",\n};\n\n/**\n * PageLayout - A consistent page wrapper with responsive design\n *\n * Features:\n * - Proper max-width constraints\n * - Responsive padding\n * - Animated entrance\n * - Consistent header styling\n */\nexport function PageLayout({\n children,\n title,\n subtitle,\n icon,\n headerActions,\n headerContent,\n maxWidth = \"xl\",\n showHeader = true,\n className,\n contentClassName,\n}: PageLayoutProps) {\n return (\n <div\n className={cn(\n // Base styles - full width container with padding\n \"min-h-full w-full\",\n // Responsive horizontal padding\n \"px-4 sm:px-6 lg:px-8 xl:px-12\",\n // Responsive vertical padding\n \"py-6 sm:py-8 lg:py-10\",\n // Entrance animation\n \"animate-in fade-in-0 slide-in-from-bottom-4 duration-500\",\n className,\n )}\n >\n {/* Max-width constrained content container */}\n <div\n className={cn(\n \"mx-auto w-full\",\n maxWidthClasses[maxWidth],\n contentClassName,\n )}\n >\n {/* Page Header */}\n {showHeader && (title || headerActions) && (\n <header className=\"mb-6 sm:mb-8\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n {/* Title Section */}\n <div className=\"space-y-1\">\n {(title || icon) && (\n <div className=\"flex items-center gap-3\">\n {icon && (\n <div className=\"flex-shrink-0 p-2.5 rounded-xl bg-action-primary-bg/10 text-primary\">\n {icon}\n </div>\n )}\n {title && (\n <h1 className=\"text-2xl sm:text-3xl font-bold tracking-tight text-text-primary\">\n {title}\n </h1>\n )}\n </div>\n )}\n {subtitle && (\n <p className=\"text-sm sm:text-base text-text-secondary max-w-2xl\">\n {subtitle}\n </p>\n )}\n </div>\n\n {/* Header Actions */}\n {headerActions && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {headerActions}\n </div>\n )}\n </div>\n\n {/* Additional Header Content */}\n {headerContent && <div className=\"mt-4\">{headerContent}</div>}\n </header>\n )}\n\n {/* Page content — must not use a <main> landmark here because the\n host shell (AppShellLayout) already renders one; nesting <main>\n elements is invalid HTML and an a11y violation. */}\n <div className=\"space-y-6\">{children}</div>\n </div>\n </div>\n );\n}\n\n/**\n * PageSection - A section within a page with consistent spacing\n */\nexport function PageSection({\n children,\n title,\n description,\n actions,\n className,\n ...rest\n}: {\n children: ReactNode;\n title?: string;\n description?: string;\n actions?: ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLElement>) {\n return (\n <section className={cn(\"space-y-4\", className)} {...rest}>\n {(title || actions) && (\n <div className=\"flex items-center justify-between\">\n <div>\n {title && (\n <h2 className=\"text-lg font-semibold text-text-primary\">{title}</h2>\n )}\n {description && (\n <p className=\"text-sm text-text-secondary\">{description}</p>\n )}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n )}\n {children}\n </section>\n );\n}\n\n/**\n * Local wrapper around the canonical `EmptyState` from `@burdenoff/fe-libs/ui`.\n * Keeps the existing microfe-export call sites stable while routing all\n * empty-state rendering through the shared primitive.\n */\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className,\n}: {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n}) {\n return (\n <div className={className}>\n <CanonicalEmptyState\n icon={icon}\n title={title}\n description={description}\n action={action}\n />\n </div>\n );\n}\n"],"mappings":";;;;AA0BA,IAAM,IAAkB;CACtB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,MAAM;CACP;AAWD,SAAgB,EAAW,EACzB,aACA,UACA,aACA,SACA,kBACA,kBACA,cAAW,MACX,gBAAa,IACb,cACA,uBACkB;AAClB,QACE,kBAAC,OAAD;EACE,WAAW,EAET,qBAEA,iCAEA,yBAEA,4DACA,EACD;YAGD,kBAAC,OAAD;GACE,WAAW,EACT,kBACA,EAAgB,IAChB,EACD;aALH,CAQG,MAAe,KAAS,MACvB,kBAAC,UAAD;IAAQ,WAAU;cAAlB,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CAEE,kBAAC,OAAD;MAAK,WAAU;gBAAf,EACI,KAAS,MACT,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACG,KACC,kBAAC,OAAD;QAAK,WAAU;kBACZ;QACG,CAAA,EAEP,KACC,kBAAC,MAAD;QAAI,WAAU;kBACX;QACE,CAAA,CAEH;UAEP,KACC,kBAAC,KAAD;OAAG,WAAU;iBACV;OACC,CAAA,CAEF;SAGL,KACC,kBAAC,OAAD;MAAK,WAAU;gBACZ;MACG,CAAA,CAEJ;QAGL,KAAiB,kBAAC,OAAD;KAAK,WAAU;eAAQ;KAAoB,CAAA,CACtD;OAMX,kBAAC,OAAD;IAAK,WAAU;IAAa;IAAe,CAAA,CACvC;;EACF,CAAA;;AAOV,SAAgB,EAAY,EAC1B,aACA,UACA,gBACA,YACA,cACA,GAAG,KAOkC;AACrC,QACE,kBAAC,WAAD;EAAS,WAAW,EAAG,aAAa,EAAU;EAAE,GAAI;YAApD,EACI,KAAS,MACT,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACG,KACC,kBAAC,MAAD;IAAI,WAAU;cAA2C;IAAW,CAAA,EAErE,KACC,kBAAC,KAAD;IAAG,WAAU;cAA+B;IAAgB,CAAA,CAE1D,EAAA,CAAA,EACL,KAAW,kBAAC,OAAD;IAAK,WAAU;cAA2B;IAAc,CAAA,CAChE;MAEP,EACO
|
|
1
|
+
{"version":3,"file":"PageLayout.js","names":[],"sources":["../../../src/export/components/PageLayout.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { EmptyState as CanonicalEmptyState } from \"@burdenoff/fe-libs/ui\";\nimport { cn } from \"../utils/cn\";\n\ninterface PageLayoutProps {\n children: ReactNode;\n /** Page title */\n title?: string;\n /** Page subtitle/description */\n subtitle?: string;\n /** Icon component to display next to title */\n icon?: ReactNode;\n /** Actions to display in header (buttons, etc.) */\n headerActions?: ReactNode;\n /** Additional header content below title */\n headerContent?: ReactNode;\n /** Maximum width of content: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full' */\n maxWidth?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"full\";\n /** Whether to show the header section */\n showHeader?: boolean;\n /** Additional CSS classes for the container */\n className?: string;\n /** Additional CSS classes for the content area */\n contentClassName?: string;\n}\n\nconst maxWidthClasses = {\n sm: \"max-w-screen-sm\", // 640px\n md: \"max-w-screen-md\", // 768px\n lg: \"max-w-screen-lg\", // 1024px\n xl: \"max-w-screen-xl\", // 1280px\n \"2xl\": \"max-w-screen-2xl\", // 1536px\n \"3xl\": \"max-w-[1600px]\",\n full: \"max-w-full\",\n};\n\n/**\n * PageLayout - A consistent page wrapper with responsive design\n *\n * Features:\n * - Proper max-width constraints\n * - Responsive padding\n * - Animated entrance\n * - Consistent header styling\n */\nexport function PageLayout({\n children,\n title,\n subtitle,\n icon,\n headerActions,\n headerContent,\n maxWidth = \"xl\",\n showHeader = true,\n className,\n contentClassName,\n}: PageLayoutProps) {\n return (\n <div\n className={cn(\n // Base styles - full width container with padding\n \"min-h-full w-full\",\n // Responsive horizontal padding\n \"px-4 sm:px-6 lg:px-8 xl:px-12\",\n // Responsive vertical padding\n \"py-6 sm:py-8 lg:py-10\",\n // Entrance animation\n \"animate-in fade-in-0 slide-in-from-bottom-4 duration-500\",\n className,\n )}\n >\n {/* Max-width constrained content container */}\n <div\n className={cn(\n \"mx-auto w-full\",\n maxWidthClasses[maxWidth],\n contentClassName,\n )}\n >\n {/* Page Header */}\n {showHeader && (title || headerActions) && (\n <header className=\"mb-6 sm:mb-8\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n {/* Title Section */}\n <div className=\"space-y-1\">\n {(title || icon) && (\n <div className=\"flex items-center gap-3\">\n {icon && (\n <div className=\"flex-shrink-0 p-2.5 rounded-xl bg-action-primary-bg/10 text-primary\">\n {icon}\n </div>\n )}\n {title && (\n <h1 className=\"text-2xl sm:text-3xl font-bold tracking-tight text-text-primary\">\n {title}\n </h1>\n )}\n </div>\n )}\n {subtitle && (\n <p className=\"text-sm sm:text-base text-text-secondary max-w-2xl\">\n {subtitle}\n </p>\n )}\n </div>\n\n {/* Header Actions */}\n {headerActions && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {headerActions}\n </div>\n )}\n </div>\n\n {/* Additional Header Content */}\n {headerContent && <div className=\"mt-4\">{headerContent}</div>}\n </header>\n )}\n\n {/* Page content — must not use a <main> landmark here because the\n host shell (AppShellLayout) already renders one; nesting <main>\n elements is invalid HTML and an a11y violation. */}\n <div className=\"space-y-6\">{children}</div>\n </div>\n </div>\n );\n}\n\n/**\n * PageSection - A section within a page with consistent spacing\n */\nexport function PageSection({\n children,\n title,\n description,\n actions,\n className,\n ...rest\n}: {\n children: ReactNode;\n title?: string;\n description?: string;\n actions?: ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLElement>) {\n return (\n <section className={cn(\"space-y-4\", className)} {...rest}>\n {(title || actions) && (\n <div className=\"flex items-center justify-between\">\n <div>\n {title && (\n <h2 className=\"text-lg font-semibold text-text-primary\">{title}</h2>\n )}\n {description && (\n <p className=\"text-sm text-text-secondary\">{description}</p>\n )}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n )}\n {children}\n </section>\n );\n}\n\n/**\n * Local wrapper around the canonical `EmptyState` from `@burdenoff/fe-libs/ui`.\n * Keeps the existing microfe-export call sites stable while routing all\n * empty-state rendering through the shared primitive.\n */\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className,\n}: {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n}) {\n return (\n <div className={className}>\n <CanonicalEmptyState\n icon={icon}\n title={title}\n description={description}\n action={action}\n />\n </div>\n );\n}\n"],"mappings":";;;;AA0BA,IAAM,IAAkB;CACtB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,MAAM;CACP;AAWD,SAAgB,EAAW,EACzB,aACA,UACA,aACA,SACA,kBACA,kBACA,cAAW,MACX,gBAAa,IACb,cACA,uBACkB;AAClB,QACE,kBAAC,OAAD;EACE,WAAW,EAET,qBAEA,iCAEA,yBAEA,4DACA,EACD;YAGD,kBAAC,OAAD;GACE,WAAW,EACT,kBACA,EAAgB,IAChB,EACD;aALH,CAQG,MAAe,KAAS,MACvB,kBAAC,UAAD;IAAQ,WAAU;cAAlB,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CAEE,kBAAC,OAAD;MAAK,WAAU;gBAAf,EACI,KAAS,MACT,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACG,KACC,kBAAC,OAAD;QAAK,WAAU;kBACZ;QACG,CAAA,EAEP,KACC,kBAAC,MAAD;QAAI,WAAU;kBACX;QACE,CAAA,CAEH;UAEP,KACC,kBAAC,KAAD;OAAG,WAAU;iBACV;OACC,CAAA,CAEF;SAGL,KACC,kBAAC,OAAD;MAAK,WAAU;gBACZ;MACG,CAAA,CAEJ;QAGL,KAAiB,kBAAC,OAAD;KAAK,WAAU;eAAQ;KAAoB,CAAA,CACtD;OAMX,kBAAC,OAAD;IAAK,WAAU;IAAa;IAAe,CAAA,CACvC;;EACF,CAAA;;AAOV,SAAgB,EAAY,EAC1B,aACA,UACA,gBACA,YACA,cACA,GAAG,KAOkC;AACrC,QACE,kBAAC,WAAD;EAAS,WAAW,EAAG,aAAa,EAAU;EAAE,GAAI;YAApD,EACI,KAAS,MACT,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACG,KACC,kBAAC,MAAD;IAAI,WAAU;cAA2C;IAAW,CAAA,EAErE,KACC,kBAAC,KAAD;IAAG,WAAU;cAA+B;IAAgB,CAAA,CAE1D,EAAA,CAAA,EACL,KAAW,kBAAC,OAAD;IAAK,WAAU;cAA2B;IAAc,CAAA,CAChE;MAEP,EACO"}
|
|
@@ -5,18 +5,18 @@ import { getFormatDisplayName as a } from "../constants/enums.js";
|
|
|
5
5
|
import { tWithFallback as ee } from "../utils/i18n.js";
|
|
6
6
|
import { PageLayout as te } from "../components/PageLayout.js";
|
|
7
7
|
import { isExportEntityDisabled as o } from "../utils/disabledModules.js";
|
|
8
|
-
import { useEffect as
|
|
8
|
+
import { useEffect as s, useRef as ne, useState as c } from "react";
|
|
9
9
|
import { ArrowLeft as l, ArrowRight as u, Building2 as d, CalendarRange as re, CheckCircle2 as f, Download as p, FileJson as m, FileSpreadsheet as h, Loader2 as g, Lock as ie, Package as ae, User as _, Users as v } from "lucide-react";
|
|
10
10
|
import { usePermission as y } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
11
11
|
import { useSearchParams as oe } from "react-router-dom";
|
|
12
12
|
import { jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
13
|
-
import { useI18n as
|
|
14
|
-
import { EmphasisPanel as
|
|
13
|
+
import { useI18n as S } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
14
|
+
import { EmphasisPanel as se, IllustratedEmptyState as ce, PagePurpose as le, ShowMore as C } from "@burdenoff/fe-libs/ui";
|
|
15
15
|
//#region src/export/pages/CreateExportPage.tsx
|
|
16
|
-
var w = ["CSV", "JSON"],
|
|
16
|
+
var w = ["CSV", "JSON"], T = {
|
|
17
17
|
CSV: h,
|
|
18
18
|
JSON: m
|
|
19
|
-
},
|
|
19
|
+
}, E = [
|
|
20
20
|
{
|
|
21
21
|
value: "INDIVIDUAL",
|
|
22
22
|
label: "My Data Only",
|
|
@@ -36,50 +36,50 @@ var w = ["CSV", "JSON"], ce = {
|
|
|
36
36
|
Icon: d
|
|
37
37
|
}
|
|
38
38
|
];
|
|
39
|
-
function
|
|
40
|
-
let { basePath: d = "/", navigate: m, organizationId: h } = e(), { t: _ } =
|
|
41
|
-
|
|
42
|
-
let e =
|
|
43
|
-
if (!e || !
|
|
44
|
-
let t =
|
|
39
|
+
function D() {
|
|
40
|
+
let { basePath: d = "/", navigate: m, organizationId: h } = e(), { t: _ } = S(), v = (e, t, n) => ee(_, e, t, n), { createJob: D, isPending: O } = n(), { data: ue } = t(), { data: k } = r(), [A] = oe(), de = y("export:workspace:admin"), fe = y("export:org:admin"), [j, M] = c("entities"), [N, P] = c([]), [F, I] = c(""), [L, R] = c("CSV"), [z, B] = c("INDIVIDUAL"), [V, H] = c(A.get("templateId") ?? void 0), [U, pe] = c(""), [W, me] = c(""), [G, K] = c(null), q = ne(null);
|
|
41
|
+
s(() => {
|
|
42
|
+
let e = A.get("templateId");
|
|
43
|
+
if (!e || !k?.length || q.current === e) return;
|
|
44
|
+
let t = k.find((t) => t.id === e);
|
|
45
45
|
if (!t) return;
|
|
46
|
-
|
|
46
|
+
q.current = e, H(t.id), P((t.entityTypes ?? []).filter((e) => !o(e)));
|
|
47
47
|
let n = t.format?.toUpperCase();
|
|
48
|
-
n && w.includes(n) &&
|
|
49
|
-
}, [
|
|
50
|
-
let
|
|
51
|
-
|
|
52
|
-
},
|
|
53
|
-
if (
|
|
54
|
-
if (
|
|
55
|
-
|
|
48
|
+
n && w.includes(n) && R(n), t.name && I(t.name);
|
|
49
|
+
}, [A, k]);
|
|
50
|
+
let he = () => {
|
|
51
|
+
j === "options" ? M("entities") : j === "review" ? M("options") : m?.(d);
|
|
52
|
+
}, ge = () => {
|
|
53
|
+
if (j === "entities") {
|
|
54
|
+
if (N.length === 0) {
|
|
55
|
+
K(v("export.create.errors.selectEntity", "Please select at least one entity type to export"));
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
|
-
|
|
59
|
-
} else if (
|
|
60
|
-
if (!
|
|
61
|
-
|
|
58
|
+
K(null), M("options");
|
|
59
|
+
} else if (j === "options") {
|
|
60
|
+
if (!F.trim()) {
|
|
61
|
+
K(v("export.create.errors.exportNameRequired", "Please provide a name for this export"));
|
|
62
62
|
return;
|
|
63
63
|
}
|
|
64
|
-
|
|
64
|
+
K(null), M("review");
|
|
65
65
|
}
|
|
66
|
-
},
|
|
66
|
+
}, _e = async () => {
|
|
67
67
|
try {
|
|
68
|
-
|
|
69
|
-
name:
|
|
70
|
-
entityTypes:
|
|
71
|
-
format:
|
|
72
|
-
exportScope:
|
|
73
|
-
organizationId:
|
|
74
|
-
templateId:
|
|
75
|
-
dateRangeStart:
|
|
76
|
-
dateRangeEnd:
|
|
68
|
+
K(null), await D({
|
|
69
|
+
name: F,
|
|
70
|
+
entityTypes: N,
|
|
71
|
+
format: L,
|
|
72
|
+
exportScope: z,
|
|
73
|
+
organizationId: z === "ORG_ADMIN" ? h : void 0,
|
|
74
|
+
templateId: V,
|
|
75
|
+
dateRangeStart: U ? new Date(U).toISOString() : null,
|
|
76
|
+
dateRangeEnd: W ? new Date(W).toISOString() : null
|
|
77
77
|
}), m?.(d);
|
|
78
78
|
} catch (e) {
|
|
79
|
-
|
|
79
|
+
K(e instanceof Error ? e.message : v("export.create.errors.createFailed", "Failed to create export"));
|
|
80
80
|
}
|
|
81
|
-
},
|
|
82
|
-
o(e) ||
|
|
81
|
+
}, ve = (e) => {
|
|
82
|
+
o(e) || P((t) => t.includes(e) ? t.filter((t) => t !== e) : [...t, e]);
|
|
83
83
|
}, J = (e) => {
|
|
84
84
|
switch (e) {
|
|
85
85
|
case "INDIVIDUAL": return v("export.create.scope.individual.label", "My Data Only");
|
|
@@ -87,7 +87,7 @@ function T() {
|
|
|
87
87
|
case "ORG_ADMIN": return v("export.create.scope.orgAdmin.label", "All Organization Data");
|
|
88
88
|
default: return e;
|
|
89
89
|
}
|
|
90
|
-
},
|
|
90
|
+
}, ye = (e) => {
|
|
91
91
|
switch (e) {
|
|
92
92
|
case "INDIVIDUAL": return v("export.create.scope.individual.description", "Export data you personally created across selected modules.");
|
|
93
93
|
case "WORKSPACE_ADMIN": return v("export.create.scope.workspaceAdmin.description", "Export all data in this workspace regardless of who created it. Requires workspace admin access.");
|
|
@@ -127,11 +127,11 @@ function T() {
|
|
|
127
127
|
label: v("export.create.entities.calendar.label", "Calendar Events"),
|
|
128
128
|
description: v("export.create.entities.calendar.description", "Events and bookings")
|
|
129
129
|
}
|
|
130
|
-
}, X =
|
|
131
|
-
let n = !t &&
|
|
130
|
+
}, X = ue.filter((e) => e.enabled !== !1), Z = X.filter((e) => !o(e.entityType)), Q = X.filter((e) => o(e.entityType)), $ = (e, t) => {
|
|
131
|
+
let n = !t && N.includes(e.entityType);
|
|
132
132
|
return /* @__PURE__ */ x("button", {
|
|
133
133
|
type: "button",
|
|
134
|
-
onClick: () =>
|
|
134
|
+
onClick: () => ve(e.entityType),
|
|
135
135
|
disabled: t,
|
|
136
136
|
"aria-disabled": t,
|
|
137
137
|
title: t ? v("export.create.select.unavailableHint", "Export for this product isn't available yet") : void 0,
|
|
@@ -189,6 +189,10 @@ function T() {
|
|
|
189
189
|
})]
|
|
190
190
|
})
|
|
191
191
|
}),
|
|
192
|
+
/* @__PURE__ */ b(le, {
|
|
193
|
+
icon: /* @__PURE__ */ b(p, { size: 16 }),
|
|
194
|
+
children: v("export.create.purpose", "Build a one-off export in three steps: pick which data to include, choose a format and scope, then review and start it. The export runs in the background and produces a downloadable ZIP you can grab from History when it finishes.")
|
|
195
|
+
}),
|
|
192
196
|
/* @__PURE__ */ b("div", {
|
|
193
197
|
className: "flex items-center gap-2 justify-center flex-wrap",
|
|
194
198
|
children: [
|
|
@@ -201,7 +205,7 @@ function T() {
|
|
|
201
205
|
size: 18,
|
|
202
206
|
className: "text-text-secondary"
|
|
203
207
|
}), /* @__PURE__ */ x("div", {
|
|
204
|
-
className: i("flex items-center gap-2 px-4 py-2.5 rounded-lg text-sm font-medium border-2 transition-all duration-200",
|
|
208
|
+
className: i("flex items-center gap-2 px-4 py-2.5 rounded-lg text-sm font-medium border-2 transition-all duration-200", j === e ? "bg-action-primary-bg text-action-primary-text border-primary shadow-[var(--shadow-pop)]" : "bg-bg-sunken/50 text-text-secondary border-border-seam"),
|
|
205
209
|
children: [/* @__PURE__ */ b("div", {
|
|
206
210
|
className: "flex items-center justify-center size-6 rounded-full bg-bg-surface/20 font-bold",
|
|
207
211
|
children: t + 1
|
|
@@ -212,11 +216,11 @@ function T() {
|
|
|
212
216
|
})]
|
|
213
217
|
}, e))
|
|
214
218
|
}),
|
|
215
|
-
|
|
219
|
+
G && /* @__PURE__ */ b("div", {
|
|
216
220
|
className: "border-2 border-border-default rounded-xl bg-status-error-bg-subtle p-4 text-status-error-text text-sm",
|
|
217
|
-
children:
|
|
221
|
+
children: G
|
|
218
222
|
}),
|
|
219
|
-
|
|
223
|
+
j === "entities" && /* @__PURE__ */ x("div", {
|
|
220
224
|
className: "space-y-4",
|
|
221
225
|
children: [
|
|
222
226
|
/* @__PURE__ */ b("h2", {
|
|
@@ -227,9 +231,10 @@ function T() {
|
|
|
227
231
|
className: "text-sm text-text-secondary",
|
|
228
232
|
children: v("export.create.select.description", "Choose which entity types to include in your export.")
|
|
229
233
|
}),
|
|
230
|
-
X.length === 0 ? /* @__PURE__ */ b(
|
|
231
|
-
|
|
232
|
-
|
|
234
|
+
X.length === 0 ? /* @__PURE__ */ b(ce, {
|
|
235
|
+
illustration: "empty-data",
|
|
236
|
+
title: v("export.create.select.emptyTitle", "Nothing to export yet"),
|
|
237
|
+
description: v("export.create.select.empty", "No exportable entity types are configured for this workspace yet. Once your workspace has data in supported modules, they'll show up here to select.")
|
|
233
238
|
}) : /* @__PURE__ */ x("div", {
|
|
234
239
|
className: "space-y-6",
|
|
235
240
|
children: [Z.length > 0 && /* @__PURE__ */ b("div", {
|
|
@@ -255,7 +260,7 @@ function T() {
|
|
|
255
260
|
})
|
|
256
261
|
]
|
|
257
262
|
}),
|
|
258
|
-
|
|
263
|
+
j === "options" && /* @__PURE__ */ b("div", {
|
|
259
264
|
className: "space-y-6",
|
|
260
265
|
children: /* @__PURE__ */ x("div", {
|
|
261
266
|
className: "border border-border-seam rounded-xl p-6 space-y-5 bg-bg-surface",
|
|
@@ -269,13 +274,13 @@ function T() {
|
|
|
269
274
|
children: v("export.create.options.scope", "Export Scope")
|
|
270
275
|
}), /* @__PURE__ */ b("div", {
|
|
271
276
|
className: "grid grid-cols-1 sm:grid-cols-3 gap-3",
|
|
272
|
-
children:
|
|
273
|
-
let n = e === "WORKSPACE_ADMIN" && !
|
|
277
|
+
children: E.map(({ value: e, Icon: t }) => {
|
|
278
|
+
let n = e === "WORKSPACE_ADMIN" && !de || e === "ORG_ADMIN" && !fe;
|
|
274
279
|
return /* @__PURE__ */ x("button", {
|
|
275
280
|
type: "button",
|
|
276
|
-
onClick: () => !n &&
|
|
281
|
+
onClick: () => !n && B(e),
|
|
277
282
|
disabled: n,
|
|
278
|
-
className: i("text-left border-2 rounded-xl p-4 transition-all duration-200",
|
|
283
|
+
className: i("text-left border-2 rounded-xl p-4 transition-all duration-200", z === e ? "border-primary bg-action-primary-bg/5 shadow-md" : n ? "border-border-subtle/30 opacity-50 cursor-not-allowed" : "border-border-subtle/50 hover:border-primary/30 hover:shadow-sm"),
|
|
279
284
|
title: n ? e === "WORKSPACE_ADMIN" ? "Workspace admin access required" : "Organization admin access required" : void 0,
|
|
280
285
|
children: [
|
|
281
286
|
/* @__PURE__ */ x("div", {
|
|
@@ -283,9 +288,9 @@ function T() {
|
|
|
283
288
|
children: [
|
|
284
289
|
/* @__PURE__ */ b(t, {
|
|
285
290
|
size: 18,
|
|
286
|
-
className:
|
|
291
|
+
className: z === e ? "text-primary" : n ? "text-text-secondary/50" : "text-text-secondary"
|
|
287
292
|
}),
|
|
288
|
-
|
|
293
|
+
z === e && /* @__PURE__ */ b(f, {
|
|
289
294
|
size: 16,
|
|
290
295
|
className: "text-primary"
|
|
291
296
|
}),
|
|
@@ -301,7 +306,7 @@ function T() {
|
|
|
301
306
|
}),
|
|
302
307
|
/* @__PURE__ */ b("p", {
|
|
303
308
|
className: "text-xs text-text-secondary mt-1",
|
|
304
|
-
children:
|
|
309
|
+
children: ye(e)
|
|
305
310
|
})
|
|
306
311
|
]
|
|
307
312
|
}, e);
|
|
@@ -322,8 +327,8 @@ function T() {
|
|
|
322
327
|
type: "text",
|
|
323
328
|
id: "exportName",
|
|
324
329
|
"aria-label": v("export.create.options.name", "Export Name"),
|
|
325
|
-
value:
|
|
326
|
-
onChange: (e) =>
|
|
330
|
+
value: F,
|
|
331
|
+
onChange: (e) => I(e.target.value),
|
|
327
332
|
className: "w-full px-4 py-2.5 border-2 border-border-subtle rounded-lg bg-bg-surface focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary transition-all duration-200",
|
|
328
333
|
placeholder: v("export.create.options.namePlaceholder", "e.g., Monthly User Export")
|
|
329
334
|
})] }),
|
|
@@ -333,14 +338,14 @@ function T() {
|
|
|
333
338
|
}), /* @__PURE__ */ b("div", {
|
|
334
339
|
className: "grid grid-cols-2 gap-3",
|
|
335
340
|
children: w.map((e) => {
|
|
336
|
-
let t =
|
|
341
|
+
let t = T[e];
|
|
337
342
|
return /* @__PURE__ */ x("button", {
|
|
338
343
|
type: "button",
|
|
339
|
-
onClick: () =>
|
|
340
|
-
className: i("flex items-center gap-3 border-2 rounded-lg p-3 transition-all duration-200",
|
|
344
|
+
onClick: () => R(e),
|
|
345
|
+
className: i("flex items-center gap-3 border-2 rounded-lg p-3 transition-all duration-200", L === e ? "border-primary bg-action-primary-bg/5" : "border-border-subtle/50 hover:border-primary/30"),
|
|
341
346
|
children: [/* @__PURE__ */ b(t, {
|
|
342
347
|
size: 18,
|
|
343
|
-
className:
|
|
348
|
+
className: L === e ? "text-primary" : "text-text-secondary"
|
|
344
349
|
}), /* @__PURE__ */ b("span", {
|
|
345
350
|
className: "font-medium text-sm",
|
|
346
351
|
children: a(e)
|
|
@@ -402,8 +407,8 @@ function T() {
|
|
|
402
407
|
type: "date",
|
|
403
408
|
id: "dateFrom",
|
|
404
409
|
"aria-label": v("export.create.options.dateFrom", "From"),
|
|
405
|
-
value:
|
|
406
|
-
onChange: (e) =>
|
|
410
|
+
value: U,
|
|
411
|
+
onChange: (e) => pe(e.target.value),
|
|
407
412
|
className: "w-full px-3 py-2 border-2 border-border-subtle rounded-lg bg-bg-surface focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary text-sm"
|
|
408
413
|
})] }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
|
|
409
414
|
htmlFor: "dateTo",
|
|
@@ -413,9 +418,9 @@ function T() {
|
|
|
413
418
|
type: "date",
|
|
414
419
|
id: "dateTo",
|
|
415
420
|
"aria-label": v("export.create.options.dateTo", "To"),
|
|
416
|
-
value:
|
|
417
|
-
min:
|
|
418
|
-
onChange: (e) =>
|
|
421
|
+
value: W,
|
|
422
|
+
min: U,
|
|
423
|
+
onChange: (e) => me(e.target.value),
|
|
419
424
|
className: "w-full px-3 py-2 border-2 border-border-subtle rounded-lg bg-bg-surface focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary text-sm"
|
|
420
425
|
})] })]
|
|
421
426
|
}),
|
|
@@ -433,14 +438,14 @@ function T() {
|
|
|
433
438
|
children: v("export.create.shared.optional", "(optional)")
|
|
434
439
|
})
|
|
435
440
|
]
|
|
436
|
-
}),
|
|
437
|
-
value:
|
|
438
|
-
onChange: (e) =>
|
|
441
|
+
}), k.length > 0 ? /* @__PURE__ */ x("select", {
|
|
442
|
+
value: V ?? "",
|
|
443
|
+
onChange: (e) => H(e.target.value || void 0),
|
|
439
444
|
className: "w-full px-3 py-2 border-2 border-border-subtle rounded-lg bg-bg-surface focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary",
|
|
440
445
|
children: [/* @__PURE__ */ b("option", {
|
|
441
446
|
value: "",
|
|
442
447
|
children: v("export.create.options.noTemplate", "No template")
|
|
443
|
-
}),
|
|
448
|
+
}), k.map((e) => /* @__PURE__ */ b("option", {
|
|
444
449
|
value: e.id,
|
|
445
450
|
children: e.name
|
|
446
451
|
}, e.id))]
|
|
@@ -464,9 +469,9 @@ function T() {
|
|
|
464
469
|
]
|
|
465
470
|
})
|
|
466
471
|
}),
|
|
467
|
-
|
|
472
|
+
j === "review" && /* @__PURE__ */ b("div", {
|
|
468
473
|
className: "space-y-6",
|
|
469
|
-
children: /* @__PURE__ */ x(
|
|
474
|
+
children: /* @__PURE__ */ x(se, {
|
|
470
475
|
className: "p-6 space-y-4",
|
|
471
476
|
children: [/* @__PURE__ */ x("h2", {
|
|
472
477
|
className: "text-lg font-bold flex items-center gap-2",
|
|
@@ -479,31 +484,31 @@ function T() {
|
|
|
479
484
|
children: [
|
|
480
485
|
{
|
|
481
486
|
label: v("export.create.review.fields.name", "Name"),
|
|
482
|
-
value:
|
|
487
|
+
value: F
|
|
483
488
|
},
|
|
484
489
|
{
|
|
485
490
|
label: v("export.create.review.fields.scope", "Scope"),
|
|
486
|
-
value: J(
|
|
491
|
+
value: J(z)
|
|
487
492
|
},
|
|
488
493
|
{
|
|
489
494
|
label: v("export.create.review.fields.entityTypes", "Entity Types"),
|
|
490
|
-
value:
|
|
495
|
+
value: N.join(", ")
|
|
491
496
|
},
|
|
492
497
|
{
|
|
493
498
|
label: v("export.create.review.fields.format", "Format"),
|
|
494
|
-
value: a(
|
|
499
|
+
value: a(L)
|
|
495
500
|
},
|
|
496
501
|
{
|
|
497
502
|
label: v("export.create.review.fields.archive", "Archive"),
|
|
498
503
|
value: "ZIP"
|
|
499
504
|
},
|
|
500
|
-
...
|
|
505
|
+
...U || W ? [{
|
|
501
506
|
label: v("export.create.review.fields.dateRange", "Date Range"),
|
|
502
|
-
value: [
|
|
507
|
+
value: [U || "—", W || "—"].join(" → ")
|
|
503
508
|
}] : [],
|
|
504
|
-
...
|
|
509
|
+
...V ? [{
|
|
505
510
|
label: v("export.create.review.fields.template", "Template"),
|
|
506
|
-
value:
|
|
511
|
+
value: k.find((e) => e.id === V)?.name ?? V
|
|
507
512
|
}] : []
|
|
508
513
|
].map(({ label: e, value: t }) => /* @__PURE__ */ x("div", {
|
|
509
514
|
className: "flex flex-col sm:flex-row sm:justify-between gap-1",
|
|
@@ -522,21 +527,21 @@ function T() {
|
|
|
522
527
|
className: "flex flex-col sm:flex-row gap-3 pt-2",
|
|
523
528
|
children: [/* @__PURE__ */ b("button", {
|
|
524
529
|
type: "button",
|
|
525
|
-
onClick:
|
|
530
|
+
onClick: he,
|
|
526
531
|
className: "px-6 py-3 border-2 border-border-subtle/50 rounded-lg hover:bg-accent hover:border-primary/30 transition-all duration-200 font-medium",
|
|
527
|
-
children:
|
|
528
|
-
}),
|
|
532
|
+
children: j === "entities" ? v("export.create.actions.cancel", "Cancel") : v("export.create.actions.back", "Back")
|
|
533
|
+
}), j === "review" ? /* @__PURE__ */ x("button", {
|
|
529
534
|
type: "button",
|
|
530
|
-
onClick:
|
|
531
|
-
disabled:
|
|
535
|
+
onClick: _e,
|
|
536
|
+
disabled: O,
|
|
532
537
|
className: "flex-1 inline-flex items-center justify-center gap-2 px-6 py-3 bg-action-primary-bg text-action-primary-text rounded-lg hover:bg-action-primary-bg/90 transition-all duration-200 font-bold shadow-lg disabled:opacity-50 disabled:cursor-not-allowed",
|
|
533
|
-
children: [
|
|
538
|
+
children: [O ? /* @__PURE__ */ b(g, {
|
|
534
539
|
size: 18,
|
|
535
540
|
className: "animate-spin"
|
|
536
541
|
}) : /* @__PURE__ */ b(p, { size: 18 }), v("export.create.actions.startExport", "Start Export")]
|
|
537
542
|
}) : /* @__PURE__ */ x("button", {
|
|
538
543
|
type: "button",
|
|
539
|
-
onClick:
|
|
544
|
+
onClick: ge,
|
|
540
545
|
className: "flex-1 inline-flex items-center justify-center gap-2 px-6 py-3 bg-action-primary-bg text-action-primary-text rounded-lg hover:bg-action-primary-bg/90 transition-all duration-200 font-bold shadow-lg",
|
|
541
546
|
children: [v("export.create.actions.next", "Next"), /* @__PURE__ */ b(u, { size: 18 })]
|
|
542
547
|
})]
|
|
@@ -545,6 +550,6 @@ function T() {
|
|
|
545
550
|
});
|
|
546
551
|
}
|
|
547
552
|
//#endregion
|
|
548
|
-
export {
|
|
553
|
+
export { D as CreateExportPage };
|
|
549
554
|
|
|
550
555
|
//# sourceMappingURL=CreateExportPage.js.map
|