@alepha/ui 0.18.3 → 0.19.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/admin/{AdminApiKeys-Dy_k-4Vd.js → AdminApiKeys-C2ze85eD.js} +3 -4
- package/dist/admin/{AdminApiKeys-Dy_k-4Vd.js.map → AdminApiKeys-C2ze85eD.js.map} +1 -1
- package/dist/admin/{AdminAudits-CKiFMSSU.js → AdminAudits-BIj81e4k.js} +3 -4
- package/dist/admin/{AdminAudits-CKiFMSSU.js.map → AdminAudits-BIj81e4k.js.map} +1 -1
- package/dist/admin/{AdminDashboard-PhC_dZqo.js → AdminDashboard-PMVzrwSu.js} +3 -4
- package/dist/admin/{AdminDashboard-PhC_dZqo.js.map → AdminDashboard-PMVzrwSu.js.map} +1 -1
- package/dist/admin/AdminFiles-Bq03BLt-.js +189 -0
- package/dist/admin/AdminFiles-Bq03BLt-.js.map +1 -0
- package/dist/admin/{AdminJobExecutions-D9E-CS-U.js → AdminJobs-D1_QGCDy.js} +401 -358
- package/dist/admin/AdminJobs-D1_QGCDy.js.map +1 -0
- package/dist/admin/{AdminLayout-I6TlUMPc.js → AdminLayout-BNiwiw2D.js} +8 -25
- package/dist/admin/AdminLayout-BNiwiw2D.js.map +1 -0
- package/dist/admin/{AdminNotifications-ZPHCYrv7.js → AdminNotifications-DSKQtUfn.js} +85 -124
- package/dist/admin/AdminNotifications-DSKQtUfn.js.map +1 -0
- package/dist/admin/{AdminParameters-CqgvhRsb.js → AdminParameters-CoB7EhyM.js} +3 -12
- package/dist/admin/{AdminParameters-CqgvhRsb.js.map → AdminParameters-CoB7EhyM.js.map} +1 -1
- package/dist/admin/{AdminSessions-Bz5NRuoW.js → AdminSessions-DFbFcrJQ.js} +3 -4
- package/dist/admin/{AdminSessions-Bz5NRuoW.js.map → AdminSessions-DFbFcrJQ.js.map} +1 -1
- package/dist/admin/{AdminUserLayout-lXT6I0Qq.js → AdminUserLayout-fSfi3KMm.js} +72 -111
- package/dist/admin/AdminUserLayout-fSfi3KMm.js.map +1 -0
- package/dist/admin/{AdminUserProfile-vFBLoJ3h.js → AdminUserProfile-_C-h8vUK.js} +7 -6
- package/dist/admin/AdminUserProfile-_C-h8vUK.js.map +1 -0
- package/dist/admin/{AdminUserSessions-CT_YDim0.js → AdminUserSessions-KpJHIeQo.js} +3 -4
- package/dist/admin/{AdminUserSessions-CT_YDim0.js.map → AdminUserSessions-KpJHIeQo.js.map} +1 -1
- package/dist/admin/{AdminUsers-D1UfGya9.js → AdminUsers-DcVrzdQP.js} +4 -4
- package/dist/admin/AdminUsers-DcVrzdQP.js.map +1 -0
- package/dist/admin/{AuthLayout-_frhdgOO.js → AuthLayout-CazfLzcf.js} +3 -4
- package/dist/admin/{AuthLayout-_frhdgOO.js.map → AuthLayout-CazfLzcf.js.map} +1 -1
- package/dist/{demo/IconGoogle-CSQLPYwX.js → admin/IconGoogle-8Nkx6yax.js} +2 -4
- package/dist/admin/{IconGoogle-Ch1m3Uzl.js.map → IconGoogle-8Nkx6yax.js.map} +1 -1
- package/dist/admin/{Login-xtNmQtGh.js → Login-CaMjUrDP.js} +5 -6
- package/dist/{auth/Login-BA1E8IZl.js.map → admin/Login-CaMjUrDP.js.map} +1 -1
- package/dist/admin/{Profile-_AtPUwAP.js → Profile-Ca4fZX15.js} +3 -5
- package/dist/{demo/Profile-DS5q4vOh.js.map → admin/Profile-Ca4fZX15.js.map} +1 -1
- package/dist/admin/{Register-JcCjHUUn.js → Register-C5DyKWPO.js} +5 -6
- package/dist/{demo/Register-B4hLBeEv.js.map → admin/Register-C5DyKWPO.js.map} +1 -1
- package/dist/admin/{ResetPassword-CwGBPLJO.js → ResetPassword-BA5sAgXo.js} +4 -5
- package/dist/{auth/ResetPassword-DCtGcneA.js.map → admin/ResetPassword-BA5sAgXo.js.map} +1 -1
- package/dist/admin/{VerifyEmail-hNxWejWf.js → VerifyEmail-DKNXROj_.js} +4 -5
- package/dist/{auth/VerifyEmail-DkH7NBfn.js.map → admin/VerifyEmail-DKNXROj_.js.map} +1 -1
- package/dist/admin/adminUserAtom-BLNc7XbT.js +11 -0
- package/dist/admin/adminUserAtom-BLNc7XbT.js.map +1 -0
- package/dist/admin/{core-CYaRQ8O-.js → core-CJCEx18C.js} +132 -86
- package/dist/admin/core-CJCEx18C.js.map +1 -0
- package/dist/admin/index.d.ts +80 -13
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +38 -68
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/rolldown-runtime-CiIaOW0V.js +13 -0
- package/dist/{demo/AuthLayout-Brri4A-L.js → auth/AuthLayout-vXPcCVzp.js} +3 -4
- package/dist/auth/{AuthLayout-AvLlcLjS.js.map → AuthLayout-vXPcCVzp.js.map} +1 -1
- package/dist/{admin/IconGoogle-Ch1m3Uzl.js → auth/IconGoogle-8Nkx6yax.js} +2 -4
- package/dist/auth/{IconGoogle-Ch1m3Uzl.js.map → IconGoogle-8Nkx6yax.js.map} +1 -1
- package/dist/auth/{Login-BA1E8IZl.js → Login-Dg08QR20.js} +5 -6
- package/dist/{demo/Login-C12N4oGs.js.map → auth/Login-Dg08QR20.js.map} +1 -1
- package/dist/{demo/Profile-DS5q4vOh.js → auth/Profile-Bb5O1yeh.js} +3 -5
- package/dist/auth/{Profile-YcWdeuFz.js.map → Profile-Bb5O1yeh.js.map} +1 -1
- package/dist/auth/{Register-CPhEO5MG.js → Register-B2AN71NC.js} +5 -6
- package/dist/{admin/Register-JcCjHUUn.js.map → auth/Register-B2AN71NC.js.map} +1 -1
- package/dist/{demo/ResetPassword-D8g9ha1N.js → auth/ResetPassword-BLxwzbDj.js} +4 -5
- package/dist/{admin/ResetPassword-CwGBPLJO.js.map → auth/ResetPassword-BLxwzbDj.js.map} +1 -1
- package/dist/auth/{VerifyEmail-DkH7NBfn.js → VerifyEmail-CSDOk3Zm.js} +4 -5
- package/dist/{admin/VerifyEmail-hNxWejWf.js.map → auth/VerifyEmail-CSDOk3Zm.js.map} +1 -1
- package/dist/auth/{core-D5jIAVF2.js → core-DuGkjPiU.js} +23 -54
- package/dist/auth/core-DuGkjPiU.js.map +1 -0
- package/dist/auth/index.d.ts +20 -6
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +13 -18
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/rolldown-runtime-CiIaOW0V.js +13 -0
- package/dist/core/index.d.ts +78 -20
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +130 -98
- package/dist/core/index.js.map +1 -1
- package/dist/{auth/AuthLayout-AvLlcLjS.js → demo/AuthLayout-DPsOOG4u.js} +3 -4
- package/dist/demo/{AuthLayout-Brri4A-L.js.map → AuthLayout-DPsOOG4u.js.map} +1 -1
- package/dist/demo/{DemoButton-wiCxZZ_L.js → DemoButton-wzcqGk4u.js} +4 -5
- package/dist/demo/{DemoButton-wiCxZZ_L.js.map → DemoButton-wzcqGk4u.js.map} +1 -1
- package/dist/demo/{DemoControlSelect-D7ILObVg.js → DemoControlSelect-CMWvQ6Gm.js} +4 -5
- package/dist/demo/{DemoControlSelect-D7ILObVg.js.map → DemoControlSelect-CMWvQ6Gm.js.map} +1 -1
- package/dist/demo/{DemoDataTable-DZ5Y8pFX.js → DemoDataTable-CHsAP3e2.js} +4 -5
- package/dist/demo/{DemoDataTable-DZ5Y8pFX.js.map → DemoDataTable-CHsAP3e2.js.map} +1 -1
- package/dist/demo/{DemoDialog-CUWdLHim.js → DemoDialog-Co2IePxX.js} +3 -4
- package/dist/demo/{DemoDialog-CUWdLHim.js.map → DemoDialog-Co2IePxX.js.map} +1 -1
- package/dist/demo/{DemoFlex-a8OhMMvq.js → DemoFlex-OEwQt5do.js} +4 -5
- package/dist/demo/{DemoFlex-a8OhMMvq.js.map → DemoFlex-OEwQt5do.js.map} +1 -1
- package/dist/demo/DemoHeading-Db-XkQIK.js +69 -0
- package/dist/demo/DemoHeading-Db-XkQIK.js.map +1 -0
- package/dist/demo/{DemoHome-D_De3UiT.js → DemoHome-Cyp29ygy.js} +4 -5
- package/dist/demo/{DemoHome-D_De3UiT.js.map → DemoHome-Cyp29ygy.js.map} +1 -1
- package/dist/demo/{DemoJsonViewer-B50s9aGM.js → DemoJsonViewer-DXtCeMzH.js} +4 -5
- package/dist/demo/{DemoJsonViewer-B50s9aGM.js.map → DemoJsonViewer-DXtCeMzH.js.map} +1 -1
- package/dist/demo/{DemoLayout-CHU8WTwO.js → DemoLayout-hh9VmZQP.js} +4 -5
- package/dist/demo/DemoLayout-hh9VmZQP.js.map +1 -0
- package/dist/demo/{DemoLogin-BBlrWpml.js → DemoLogin-DX7mnmkh.js} +15 -11
- package/dist/demo/{DemoLogin-BBlrWpml.js.map → DemoLogin-DX7mnmkh.js.map} +1 -1
- package/dist/demo/{DemoRegister-BuNE3_-f.js → DemoRegister-DVcZl04m.js} +15 -11
- package/dist/demo/{DemoRegister-BuNE3_-f.js.map → DemoRegister-DVcZl04m.js.map} +1 -1
- package/dist/demo/{DemoResetPassword-D_IjjjOJ.js → DemoResetPassword-CPENlZH5.js} +15 -11
- package/dist/demo/{DemoResetPassword-D_IjjjOJ.js.map → DemoResetPassword-CPENlZH5.js.map} +1 -1
- package/dist/demo/{DemoSidebar-Giy2HRBD.js → DemoSidebar-CGu7DZeM.js} +4 -5
- package/dist/demo/{DemoSidebar-Giy2HRBD.js.map → DemoSidebar-CGu7DZeM.js.map} +1 -1
- package/dist/demo/{DemoText-ubcw-vog.js → DemoText-DYUJ7bY_.js} +4 -5
- package/dist/demo/{DemoText-ubcw-vog.js.map → DemoText-DYUJ7bY_.js.map} +1 -1
- package/dist/demo/{DemoToast-9die_dYT.js → DemoToast-CgdnZNvx.js} +3 -4
- package/dist/demo/{DemoToast-9die_dYT.js.map → DemoToast-CgdnZNvx.js.map} +1 -1
- package/dist/demo/{DemoTypeForm-D_d6OVKL.js → DemoTypeForm-Pims-cGa.js} +4 -5
- package/dist/demo/{DemoTypeForm-D_d6OVKL.js.map → DemoTypeForm-Pims-cGa.js.map} +1 -1
- package/dist/demo/{DemoVerifyEmail-B43KlF4F.js → DemoVerifyEmail-C7B3xxch.js} +10 -11
- package/dist/demo/{DemoVerifyEmail-B43KlF4F.js.map → DemoVerifyEmail-C7B3xxch.js.map} +1 -1
- package/dist/{auth/IconGoogle-Ch1m3Uzl.js → demo/IconGoogle-CwQy4G9y.js} +2 -4
- package/dist/demo/{IconGoogle-CSQLPYwX.js.map → IconGoogle-CwQy4G9y.js.map} +1 -1
- package/dist/demo/{Login-C12N4oGs.js → Login-pwMF4TUj.js} +5 -6
- package/dist/{admin/Login-xtNmQtGh.js.map → demo/Login-pwMF4TUj.js.map} +1 -1
- package/dist/{auth/Profile-YcWdeuFz.js → demo/Profile-BliZapZS.js} +3 -5
- package/dist/{admin/Profile-_AtPUwAP.js.map → demo/Profile-BliZapZS.js.map} +1 -1
- package/dist/demo/{Register-B4hLBeEv.js → Register-CiwAT7Hy.js} +5 -6
- package/dist/{auth/Register-CPhEO5MG.js.map → demo/Register-CiwAT7Hy.js.map} +1 -1
- package/dist/{auth/ResetPassword-DCtGcneA.js → demo/ResetPassword-l9Vg4JE-.js} +4 -5
- package/dist/demo/{ResetPassword-D8g9ha1N.js.map → ResetPassword-l9Vg4JE-.js.map} +1 -1
- package/dist/demo/{Showcase-D6Fxt4X4.js → Showcase-CX6bDgwe.js} +3 -5
- package/dist/demo/{Showcase-D6Fxt4X4.js.map → Showcase-CX6bDgwe.js.map} +1 -1
- package/dist/demo/{VerifyEmail-BjDo0cZA.js → VerifyEmail-CAB-OS7i.js} +4 -5
- package/dist/demo/{VerifyEmail-BjDo0cZA.js.map → VerifyEmail-CAB-OS7i.js.map} +1 -1
- package/dist/demo/{auth-ByVTreDl.js → auth-uegJAdKu.js} +18 -35
- package/dist/demo/{auth-ByVTreDl.js.map → auth-uegJAdKu.js.map} +1 -1
- package/dist/demo/{core-DFgB3yU4.js → core-B4LVHzPn.js} +132 -93
- package/dist/demo/core-B4LVHzPn.js.map +1 -0
- package/dist/demo/index.js +20 -23
- package/dist/demo/index.js.map +1 -1
- package/dist/demo/rolldown-runtime-CiIaOW0V.js +13 -0
- package/package.json +17 -20
- package/src/admin/AdminRouter.tsx +23 -38
- package/src/admin/atoms/adminUserAtom.ts +7 -0
- package/src/admin/components/AdminLayout.tsx +2 -14
- package/src/admin/components/files/AdminFiles.tsx +123 -1
- package/src/admin/components/jobs/{AdminJobExecutions.tsx → AdminJobs.tsx} +450 -317
- package/src/admin/components/notifications/AdminNotifications.tsx +11 -25
- package/src/admin/components/users/AdminUserLayout.tsx +84 -127
- package/src/admin/components/users/AdminUserProfile.tsx +5 -2
- package/src/admin/components/users/AdminUsers.tsx +1 -1
- package/src/core/components/Flex.tsx +24 -0
- package/src/core/components/Section.tsx +109 -0
- package/src/core/components/SectionHeader.tsx +106 -0
- package/src/core/components/buttons/ActionButton.tsx +1 -0
- package/src/core/components/dialogs/PromptDialog.tsx +1 -1
- package/src/core/components/layout/Breadcrumb.tsx +2 -2
- package/src/core/components/layout/DashboardShell.tsx +1 -1
- package/src/core/index.ts +4 -1
- package/src/core/services/DialogService.tsx +2 -2
- package/src/core/styles.css +2 -1
- package/src/core/table/components/DataTable.tsx +5 -2
- package/src/demo/DemoRouter.ts +1 -1
- package/src/demo/components/auth/DemoLogin.tsx +5 -0
- package/src/demo/components/auth/DemoRegister.tsx +5 -0
- package/src/demo/components/auth/DemoResetPassword.tsx +5 -0
- package/src/demo/components/core/DemoHeading.tsx +56 -3
- package/dist/admin/AdminFiles-DFTjijGp.js +0 -111
- package/dist/admin/AdminFiles-DFTjijGp.js.map +0 -1
- package/dist/admin/AdminJobDashboard-BL8gGPDp.js +0 -354
- package/dist/admin/AdminJobDashboard-BL8gGPDp.js.map +0 -1
- package/dist/admin/AdminJobExecutions-D9E-CS-U.js.map +0 -1
- package/dist/admin/AdminJobRegistry-Ci9ue1zC.js +0 -270
- package/dist/admin/AdminJobRegistry-Ci9ue1zC.js.map +0 -1
- package/dist/admin/AdminLayout-I6TlUMPc.js.map +0 -1
- package/dist/admin/AdminNotifications-ZPHCYrv7.js.map +0 -1
- package/dist/admin/AdminUserLayout-lXT6I0Qq.js.map +0 -1
- package/dist/admin/AdminUserProfile-vFBLoJ3h.js.map +0 -1
- package/dist/admin/AdminUsers-D1UfGya9.js.map +0 -1
- package/dist/admin/core-CYaRQ8O-.js.map +0 -1
- package/dist/admin/rolldown-runtime-CjeV3_4I.js +0 -18
- package/dist/auth/core-D5jIAVF2.js.map +0 -1
- package/dist/auth/rolldown-runtime-CjeV3_4I.js +0 -18
- package/dist/demo/DemoHeading-C13OVDfS.js +0 -18
- package/dist/demo/DemoHeading-C13OVDfS.js.map +0 -1
- package/dist/demo/DemoLayout-CHU8WTwO.js.map +0 -1
- package/dist/demo/core-DFgB3yU4.js.map +0 -1
- package/dist/demo/rolldown-runtime-CjeV3_4I.js +0 -18
- package/src/admin/components/jobs/AdminJobDashboard.tsx +0 -349
- package/src/admin/components/jobs/AdminJobRegistry.tsx +0 -301
- package/src/core/components/Heading.tsx +0 -19
|
@@ -69,7 +69,7 @@ export interface DashboardShellProps {
|
|
|
69
69
|
container?: boolean | ContainerProps;
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
|
-
* If true, the DashboardShell will fill the height
|
|
72
|
+
* If true, the DashboardShell will fill the height with its container.
|
|
73
73
|
*/
|
|
74
74
|
fill?: boolean;
|
|
75
75
|
}
|
package/src/core/index.ts
CHANGED
|
@@ -61,7 +61,6 @@ export { default as ConfirmDialog } from "./components/dialogs/ConfirmDialog.tsx
|
|
|
61
61
|
export { default as PromptDialog } from "./components/dialogs/PromptDialog.tsx";
|
|
62
62
|
export type { FlexProps } from "./components/Flex.tsx";
|
|
63
63
|
export { default as Flex } from "./components/Flex.tsx";
|
|
64
|
-
export { default as Heading } from "./components/Heading.tsx";
|
|
65
64
|
export type {
|
|
66
65
|
AppBarBack,
|
|
67
66
|
AppBarBurger,
|
|
@@ -105,6 +104,10 @@ export { Sidebar } from "./components/layout/Sidebar.tsx";
|
|
|
105
104
|
export { SidebarCollapsedItem } from "./components/layout/SidebarCollapsedItem.tsx";
|
|
106
105
|
export type { SidebarItemProps } from "./components/layout/SidebarItem.tsx";
|
|
107
106
|
export { SidebarItem } from "./components/layout/SidebarItem.tsx";
|
|
107
|
+
export type { SectionProps } from "./components/Section.tsx";
|
|
108
|
+
export { default as Section } from "./components/Section.tsx";
|
|
109
|
+
export type { SectionHeaderProps } from "./components/SectionHeader.tsx";
|
|
110
|
+
export { default as SectionHeader } from "./components/SectionHeader.tsx";
|
|
108
111
|
export type { TextProps } from "./components/Text.tsx";
|
|
109
112
|
export { default as Text } from "./components/Text.tsx";
|
|
110
113
|
export * from "./constants/ui.ts";
|
|
@@ -117,8 +117,8 @@ export class DialogService {
|
|
|
117
117
|
<ConfirmDialog
|
|
118
118
|
options={options}
|
|
119
119
|
onConfirm={(confirmed) => {
|
|
120
|
-
this.close(modalId);
|
|
121
120
|
done(confirmed);
|
|
121
|
+
this.close(modalId);
|
|
122
122
|
}}
|
|
123
123
|
/>
|
|
124
124
|
),
|
|
@@ -147,8 +147,8 @@ export class DialogService {
|
|
|
147
147
|
<PromptDialog
|
|
148
148
|
options={options}
|
|
149
149
|
onSubmit={(value) => {
|
|
150
|
-
this.close(modalId);
|
|
151
150
|
done(value);
|
|
151
|
+
this.close(modalId);
|
|
152
152
|
}}
|
|
153
153
|
/>
|
|
154
154
|
),
|
package/src/core/styles.css
CHANGED
|
@@ -112,7 +112,8 @@
|
|
|
112
112
|
|
|
113
113
|
/* ------------------------------------------------------------------------------------------------------------------ */
|
|
114
114
|
/* our custom "minimal" variant for <Button/> - from Blueprint */
|
|
115
|
-
.mantine-Button-root[data-variant="minimal"]
|
|
115
|
+
.mantine-Button-root[data-variant="minimal"],
|
|
116
|
+
.mantine-Anchor-root[data-variant="minimal"] {
|
|
116
117
|
background-color: transparent;
|
|
117
118
|
color: var(--mantine-color-text);
|
|
118
119
|
}
|
|
@@ -90,7 +90,11 @@ const toAriaSort = (
|
|
|
90
90
|
return "none";
|
|
91
91
|
};
|
|
92
92
|
|
|
93
|
-
const FIT_STYLE = {
|
|
93
|
+
const FIT_STYLE = {
|
|
94
|
+
width: 1,
|
|
95
|
+
whiteSpace: "nowrap",
|
|
96
|
+
minWidth: "fit-content",
|
|
97
|
+
} as const;
|
|
94
98
|
|
|
95
99
|
const DataTable = <T extends object, Filters extends TObject>(
|
|
96
100
|
props: DataTableProps<T, Filters>,
|
|
@@ -606,7 +610,6 @@ const DataTable = <T extends object, Filters extends TObject>(
|
|
|
606
610
|
position: "sticky",
|
|
607
611
|
top: 0,
|
|
608
612
|
zIndex: 1,
|
|
609
|
-
backgroundColor: "var(--alepha-elevated)",
|
|
610
613
|
}}
|
|
611
614
|
>
|
|
612
615
|
<Table.Tr>
|
package/src/demo/DemoRouter.ts
CHANGED
|
@@ -1,11 +1,64 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Flex, Section, SectionHeader } from "@alepha/ui";
|
|
2
|
+
import { IconUser } from "@tabler/icons-react";
|
|
2
3
|
import { t } from "alepha";
|
|
3
4
|
import Showcase from "../shared/Showcase.tsx";
|
|
4
5
|
|
|
5
6
|
const DemoHeading = () => {
|
|
6
7
|
return (
|
|
7
|
-
<Showcase
|
|
8
|
-
|
|
8
|
+
<Showcase
|
|
9
|
+
title="SectionHeader & Section"
|
|
10
|
+
schema={t.object({})}
|
|
11
|
+
initialValues={{}}
|
|
12
|
+
>
|
|
13
|
+
{() => (
|
|
14
|
+
<Flex col gap="lg" w="100%">
|
|
15
|
+
<SectionHeader title="Simple" />
|
|
16
|
+
|
|
17
|
+
<SectionHeader
|
|
18
|
+
title="With Icon & Subtitle"
|
|
19
|
+
icon={IconUser}
|
|
20
|
+
subtitle="This is a subtitle"
|
|
21
|
+
/>
|
|
22
|
+
|
|
23
|
+
<SectionHeader
|
|
24
|
+
title="With Actions"
|
|
25
|
+
subtitle="Section with action buttons"
|
|
26
|
+
actions={[
|
|
27
|
+
{ children: "Edit", onClick: () => {} },
|
|
28
|
+
{ children: "Delete", intent: "danger", onClick: () => {} },
|
|
29
|
+
]}
|
|
30
|
+
/>
|
|
31
|
+
|
|
32
|
+
<Section title="Basic Section">
|
|
33
|
+
Section body content goes here.
|
|
34
|
+
</Section>
|
|
35
|
+
|
|
36
|
+
<Section
|
|
37
|
+
title="With Icon & Actions"
|
|
38
|
+
icon={IconUser}
|
|
39
|
+
subtitle="A section with header features"
|
|
40
|
+
actions={[{ children: "Edit", onClick: () => {} }]}
|
|
41
|
+
>
|
|
42
|
+
Section body with icon and actions.
|
|
43
|
+
</Section>
|
|
44
|
+
|
|
45
|
+
<Section
|
|
46
|
+
title="Collapsible Section"
|
|
47
|
+
collapsible
|
|
48
|
+
subtitle="Click header to toggle"
|
|
49
|
+
>
|
|
50
|
+
This content can be collapsed.
|
|
51
|
+
</Section>
|
|
52
|
+
|
|
53
|
+
<Section title="Collapsed by Default" collapsible defaultCollapsed>
|
|
54
|
+
This was hidden initially.
|
|
55
|
+
</Section>
|
|
56
|
+
|
|
57
|
+
<Section>
|
|
58
|
+
Section without header — just a bordered surface container.
|
|
59
|
+
</Section>
|
|
60
|
+
</Flex>
|
|
61
|
+
)}
|
|
9
62
|
</Showcase>
|
|
10
63
|
);
|
|
11
64
|
};
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { l as Flex, r as DataTable, s as Text } from "./core-CYaRQ8O-.js";
|
|
2
|
-
import { t } from "alepha";
|
|
3
|
-
import { useI18n } from "alepha/react/i18n";
|
|
4
|
-
import { jsx } from "react/jsx-runtime";
|
|
5
|
-
import { useClient } from "alepha/react";
|
|
6
|
-
import { files } from "alepha/api/files";
|
|
7
|
-
|
|
8
|
-
//#region ../../src/admin/components/files/AdminFiles.tsx
|
|
9
|
-
const AdminFiles = () => {
|
|
10
|
-
const client = useClient();
|
|
11
|
-
const { l } = useI18n();
|
|
12
|
-
const filters = t.object({
|
|
13
|
-
bucket: t.optional(t.string()),
|
|
14
|
-
name: t.optional(t.string({ $control: { query: t.pick(files.schema, [
|
|
15
|
-
"name",
|
|
16
|
-
"bucket",
|
|
17
|
-
"mimeType"
|
|
18
|
-
]) } }))
|
|
19
|
-
});
|
|
20
|
-
const formatFileSize = (bytes) => {
|
|
21
|
-
if (bytes === 0) return "0 B";
|
|
22
|
-
const k = 1024;
|
|
23
|
-
const sizes = [
|
|
24
|
-
"B",
|
|
25
|
-
"KB",
|
|
26
|
-
"MB",
|
|
27
|
-
"GB"
|
|
28
|
-
];
|
|
29
|
-
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
30
|
-
return `${Number.parseFloat((bytes / k ** i).toFixed(1))} ${sizes[i]}`;
|
|
31
|
-
};
|
|
32
|
-
return /* @__PURE__ */ jsx(Flex, {
|
|
33
|
-
p: "md",
|
|
34
|
-
flex: 1,
|
|
35
|
-
direction: "column",
|
|
36
|
-
children: /* @__PURE__ */ jsx(DataTable, {
|
|
37
|
-
submitOnInit: true,
|
|
38
|
-
defaultSize: 10,
|
|
39
|
-
typeFormProps: {
|
|
40
|
-
skipSubmitButton: true,
|
|
41
|
-
columns: 3
|
|
42
|
-
},
|
|
43
|
-
tableProps: {
|
|
44
|
-
horizontalSpacing: "xs",
|
|
45
|
-
verticalSpacing: "xs"
|
|
46
|
-
},
|
|
47
|
-
onFilterChange: (key, _value, form) => {
|
|
48
|
-
if (key === "name" || key === "bucket") return form.submit();
|
|
49
|
-
},
|
|
50
|
-
filters,
|
|
51
|
-
items: async (filters) => {
|
|
52
|
-
return await client.findFiles({ query: filters });
|
|
53
|
-
},
|
|
54
|
-
columns: {
|
|
55
|
-
name: {
|
|
56
|
-
label: "Name",
|
|
57
|
-
value: (item) => /* @__PURE__ */ jsx(Text, {
|
|
58
|
-
size: "sm",
|
|
59
|
-
fw: 500,
|
|
60
|
-
lineClamp: 1,
|
|
61
|
-
children: item.name
|
|
62
|
-
})
|
|
63
|
-
},
|
|
64
|
-
bucket: {
|
|
65
|
-
label: "Bucket",
|
|
66
|
-
value: (item) => /* @__PURE__ */ jsx(Text, {
|
|
67
|
-
size: "xs",
|
|
68
|
-
ff: "monospace",
|
|
69
|
-
children: item.bucket
|
|
70
|
-
})
|
|
71
|
-
},
|
|
72
|
-
mimeType: {
|
|
73
|
-
label: "Type",
|
|
74
|
-
value: (item) => /* @__PURE__ */ jsx(Text, {
|
|
75
|
-
size: "xs",
|
|
76
|
-
c: "dimmed",
|
|
77
|
-
children: item.mimeType
|
|
78
|
-
})
|
|
79
|
-
},
|
|
80
|
-
size: {
|
|
81
|
-
label: "Size",
|
|
82
|
-
value: (item) => /* @__PURE__ */ jsx(Text, {
|
|
83
|
-
size: "xs",
|
|
84
|
-
c: "dimmed",
|
|
85
|
-
children: formatFileSize(item.size)
|
|
86
|
-
})
|
|
87
|
-
},
|
|
88
|
-
creatorName: {
|
|
89
|
-
label: "Creator",
|
|
90
|
-
value: (item) => /* @__PURE__ */ jsx(Text, {
|
|
91
|
-
size: "xs",
|
|
92
|
-
c: "dimmed",
|
|
93
|
-
children: item.creatorName || "-"
|
|
94
|
-
})
|
|
95
|
-
},
|
|
96
|
-
createdAt: {
|
|
97
|
-
label: "Created",
|
|
98
|
-
value: (item) => /* @__PURE__ */ jsx(Text, {
|
|
99
|
-
size: "xs",
|
|
100
|
-
c: "dimmed",
|
|
101
|
-
children: l(item.createdAt, { date: "fromNow" })
|
|
102
|
-
})
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
})
|
|
106
|
-
});
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
//#endregion
|
|
110
|
-
export { AdminFiles as default };
|
|
111
|
-
//# sourceMappingURL=AdminFiles-DFTjijGp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AdminFiles-DFTjijGp.js","names":[],"sources":["../../src/admin/components/files/AdminFiles.tsx"],"sourcesContent":["import { DataTable, Flex, Text } from \"@alepha/ui\";\nimport { type Page, t } from \"alepha\";\nimport { type FileController, type FileEntity, files } from \"alepha/api/files\";\nimport { useClient } from \"alepha/react\";\nimport { useI18n } from \"alepha/react/i18n\";\n\nconst AdminFiles = () => {\n const client = useClient<FileController>();\n const { l } = useI18n();\n\n const filters = t.object({\n bucket: t.optional(t.string()),\n name: t.optional(\n t.string({\n $control: {\n query: t.pick(files.schema, [\"name\", \"bucket\", \"mimeType\"]),\n },\n }),\n ),\n });\n\n const formatFileSize = (bytes: number) => {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${Number.parseFloat((bytes / k ** i).toFixed(1))} ${sizes[i]}`;\n };\n\n return (\n <Flex p=\"md\" flex={1} direction={\"column\"}>\n <DataTable<FileEntity, typeof filters>\n submitOnInit\n defaultSize={10}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 3,\n }}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n }}\n onFilterChange={(key, _value, form) => {\n if (key === \"name\" || key === \"bucket\") {\n return form.submit();\n }\n }}\n filters={filters}\n items={async (filters) => {\n const response = await client.findFiles({\n query: filters,\n });\n\n return response as Page<FileEntity>;\n }}\n columns={{\n name: {\n label: \"Name\",\n value: (item) => (\n <Text size=\"sm\" fw={500} lineClamp={1}>\n {item.name}\n </Text>\n ),\n },\n bucket: {\n label: \"Bucket\",\n value: (item) => (\n <Text size=\"xs\" ff=\"monospace\">\n {item.bucket}\n </Text>\n ),\n },\n mimeType: {\n label: \"Type\",\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {item.mimeType}\n </Text>\n ),\n },\n size: {\n label: \"Size\",\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {formatFileSize(item.size)}\n </Text>\n ),\n },\n creatorName: {\n label: \"Creator\",\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {item.creatorName || \"-\"}\n </Text>\n ),\n },\n createdAt: {\n label: \"Created\",\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {l(item.createdAt, { date: \"fromNow\" })}\n </Text>\n ),\n },\n }}\n />\n </Flex>\n );\n};\n\nexport default AdminFiles;\n"],"mappings":";;;;;;;;AAMA,MAAM,mBAAmB;CACvB,MAAM,SAAS,WAA2B;CAC1C,MAAM,EAAE,MAAM,SAAS;CAEvB,MAAM,UAAU,EAAE,OAAO;EACvB,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;EAC9B,MAAM,EAAE,SACN,EAAE,OAAO,EACP,UAAU,EACR,OAAO,EAAE,KAAK,MAAM,QAAQ;GAAC;GAAQ;GAAU;GAAW,CAAC,EAC5D,EACF,CAAC,CACH;EACF,CAAC;CAEF,MAAM,kBAAkB,UAAkB;AACxC,MAAI,UAAU,EAAG,QAAO;EACxB,MAAM,IAAI;EACV,MAAM,QAAQ;GAAC;GAAK;GAAM;GAAM;GAAK;EACrC,MAAM,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC;AACnD,SAAO,GAAG,OAAO,YAAY,QAAQ,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,GAAG,MAAM;;AAGpE,QACE,oBAAC;EAAK,GAAE;EAAK,MAAM;EAAG,WAAW;YAC/B,oBAAC;GACC;GACA,aAAa;GACb,eAAe;IACb,kBAAkB;IAClB,SAAS;IACV;GACD,YAAY;IACV,mBAAmB;IACnB,iBAAiB;IAClB;GACD,iBAAiB,KAAK,QAAQ,SAAS;AACrC,QAAI,QAAQ,UAAU,QAAQ,SAC5B,QAAO,KAAK,QAAQ;;GAGf;GACT,OAAO,OAAO,YAAY;AAKxB,WAJiB,MAAM,OAAO,UAAU,EACtC,OAAO,SACR,CAAC;;GAIJ,SAAS;IACP,MAAM;KACJ,OAAO;KACP,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,IAAI;MAAK,WAAW;gBACjC,KAAK;OACD;KAEV;IACD,QAAQ;KACN,OAAO;KACP,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,IAAG;gBAChB,KAAK;OACD;KAEV;IACD,UAAU;KACR,OAAO;KACP,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,KAAK;OACD;KAEV;IACD,MAAM;KACJ,OAAO;KACP,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,eAAe,KAAK,KAAK;OACrB;KAEV;IACD,aAAa;KACX,OAAO;KACP,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,KAAK,eAAe;OAChB;KAEV;IACD,WAAW;KACT,OAAO;KACP,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;OAClC;KAEV;IACF;IACD;GACG"}
|
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
import { _ as ActionButton, b as useToast, l as Flex$1, s as Text$1, u as StatCards } from "./core-CYaRQ8O-.js";
|
|
2
|
-
import { useI18n } from "alepha/react/i18n";
|
|
3
|
-
import { Paper, SimpleGrid, Table } from "@mantine/core";
|
|
4
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
-
import { useCallback, useEffect, useState } from "react";
|
|
6
|
-
import { IconAlertTriangle, IconCircleCheck, IconPlayerPlay, IconRefresh, IconTerminal2 } from "@tabler/icons-react";
|
|
7
|
-
import { useClient } from "alepha/react";
|
|
8
|
-
import { AreaChart, BarChart, DonutChart } from "@mantine/charts";
|
|
9
|
-
|
|
10
|
-
//#region ../../src/admin/components/jobs/AdminJobDashboard.tsx
|
|
11
|
-
const formatDuration = (start, end) => {
|
|
12
|
-
const startTime = new Date(start).getTime();
|
|
13
|
-
const duration = (end ? new Date(end).getTime() : Date.now()) - startTime;
|
|
14
|
-
if (duration < 1e3) return `${duration}ms`;
|
|
15
|
-
if (duration < 6e4) return `${(duration / 1e3).toFixed(1)}s`;
|
|
16
|
-
if (duration < 36e5) return `${Math.floor(duration / 6e4)}m ${Math.floor(duration % 6e4 / 1e3)}s`;
|
|
17
|
-
return `${Math.floor(duration / 36e5)}h ${Math.floor(duration % 36e5 / 6e4)}m`;
|
|
18
|
-
};
|
|
19
|
-
const AdminJobDashboard = () => {
|
|
20
|
-
const client = useClient();
|
|
21
|
-
const { l } = useI18n();
|
|
22
|
-
const toast = useToast();
|
|
23
|
-
const [stats, setStats] = useState(null);
|
|
24
|
-
const [recent, setRecent] = useState([]);
|
|
25
|
-
const [failures, setFailures] = useState([]);
|
|
26
|
-
const [activity, setActivity] = useState([]);
|
|
27
|
-
const [queueDepth, setQueueDepth] = useState([]);
|
|
28
|
-
const loadData = useCallback(async () => {
|
|
29
|
-
try {
|
|
30
|
-
const [statsData, recentData, failureData, activityData, queueData] = await Promise.all([
|
|
31
|
-
client.getJobStats(),
|
|
32
|
-
client.findJobExecutions({ query: {
|
|
33
|
-
sort: "-createdAt",
|
|
34
|
-
size: 10
|
|
35
|
-
} }),
|
|
36
|
-
client.getJobTopFailures(),
|
|
37
|
-
client.getJobActivity({ query: { days: 14 } }),
|
|
38
|
-
client.getJobQueueDepth()
|
|
39
|
-
]);
|
|
40
|
-
setStats(statsData);
|
|
41
|
-
setRecent(recentData.content);
|
|
42
|
-
setFailures(failureData);
|
|
43
|
-
setActivity(activityData);
|
|
44
|
-
setQueueDepth(queueData);
|
|
45
|
-
} catch {
|
|
46
|
-
toast.danger("Failed to load dashboard data");
|
|
47
|
-
}
|
|
48
|
-
}, [client, toast]);
|
|
49
|
-
useEffect(() => {
|
|
50
|
-
loadData();
|
|
51
|
-
}, [loadData]);
|
|
52
|
-
const activityChartData = activity.map((point) => ({
|
|
53
|
-
date: new Date(point.date).toLocaleDateString("en-US", {
|
|
54
|
-
month: "short",
|
|
55
|
-
day: "numeric"
|
|
56
|
-
}),
|
|
57
|
-
completed: point.completed,
|
|
58
|
-
failed: point.failed
|
|
59
|
-
}));
|
|
60
|
-
const queueChartData = queueDepth.filter((q) => q.pending + q.running + q.scheduled + q.retrying + q.dead > 0).map((q) => ({
|
|
61
|
-
job: q.jobName.length > 20 ? `...${q.jobName.slice(q.jobName.length - 18)}` : q.jobName,
|
|
62
|
-
pending: q.pending,
|
|
63
|
-
running: q.running,
|
|
64
|
-
scheduled: q.scheduled,
|
|
65
|
-
retrying: q.retrying,
|
|
66
|
-
dead: q.dead
|
|
67
|
-
}));
|
|
68
|
-
const statusDonutData = stats ? [
|
|
69
|
-
{
|
|
70
|
-
name: "Running",
|
|
71
|
-
value: stats.running,
|
|
72
|
-
color: "blue"
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
name: "Pending",
|
|
76
|
-
value: stats.pending,
|
|
77
|
-
color: "gray"
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
name: "Scheduled",
|
|
81
|
-
value: stats.scheduled,
|
|
82
|
-
color: "violet"
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
name: "Retrying",
|
|
86
|
-
value: stats.retrying,
|
|
87
|
-
color: "yellow"
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
name: "Dead",
|
|
91
|
-
value: stats.dead,
|
|
92
|
-
color: "red"
|
|
93
|
-
}
|
|
94
|
-
].filter((d) => d.value > 0) : [];
|
|
95
|
-
return /* @__PURE__ */ jsxs(Flex$1, {
|
|
96
|
-
flex: 1,
|
|
97
|
-
direction: "column",
|
|
98
|
-
gap: "md",
|
|
99
|
-
p: "md",
|
|
100
|
-
children: [
|
|
101
|
-
/* @__PURE__ */ jsxs(Flex$1, {
|
|
102
|
-
justify: "space-between",
|
|
103
|
-
align: "center",
|
|
104
|
-
children: [/* @__PURE__ */ jsx(Text$1, {
|
|
105
|
-
size: "lg",
|
|
106
|
-
fw: 600,
|
|
107
|
-
children: "Jobs Dashboard"
|
|
108
|
-
}), /* @__PURE__ */ jsx(ActionButton, {
|
|
109
|
-
tooltip: "Refresh",
|
|
110
|
-
variant: "light",
|
|
111
|
-
size: "sm",
|
|
112
|
-
icon: IconRefresh,
|
|
113
|
-
onClick: loadData
|
|
114
|
-
})]
|
|
115
|
-
}),
|
|
116
|
-
stats && /* @__PURE__ */ jsx(StatCards, { items: [
|
|
117
|
-
{
|
|
118
|
-
label: "Registered",
|
|
119
|
-
value: stats.registered,
|
|
120
|
-
icon: IconTerminal2
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
label: "Running",
|
|
124
|
-
value: stats.running,
|
|
125
|
-
icon: IconPlayerPlay
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
label: "Completed 24h",
|
|
129
|
-
value: stats.completed24h,
|
|
130
|
-
icon: IconCircleCheck
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
label: "Failed 24h",
|
|
134
|
-
value: stats.failed24h,
|
|
135
|
-
icon: IconAlertTriangle
|
|
136
|
-
}
|
|
137
|
-
] }),
|
|
138
|
-
/* @__PURE__ */ jsxs(SimpleGrid, {
|
|
139
|
-
cols: {
|
|
140
|
-
base: 1,
|
|
141
|
-
md: 2
|
|
142
|
-
},
|
|
143
|
-
spacing: "md",
|
|
144
|
-
children: [/* @__PURE__ */ jsxs(Paper, {
|
|
145
|
-
p: "md",
|
|
146
|
-
radius: "md",
|
|
147
|
-
withBorder: true,
|
|
148
|
-
children: [/* @__PURE__ */ jsx(Text$1, {
|
|
149
|
-
size: "sm",
|
|
150
|
-
fw: 600,
|
|
151
|
-
mb: "sm",
|
|
152
|
-
children: "Activity (14d)"
|
|
153
|
-
}), activityChartData.length > 0 ? /* @__PURE__ */ jsx(AreaChart, {
|
|
154
|
-
h: 220,
|
|
155
|
-
data: activityChartData,
|
|
156
|
-
dataKey: "date",
|
|
157
|
-
series: [{
|
|
158
|
-
name: "completed",
|
|
159
|
-
label: "Completed",
|
|
160
|
-
color: "teal.6"
|
|
161
|
-
}, {
|
|
162
|
-
name: "failed",
|
|
163
|
-
label: "Failed",
|
|
164
|
-
color: "red.6"
|
|
165
|
-
}],
|
|
166
|
-
curveType: "monotone",
|
|
167
|
-
withGradient: true,
|
|
168
|
-
withTooltip: true,
|
|
169
|
-
withDots: false
|
|
170
|
-
}) : /* @__PURE__ */ jsx(Flex$1, {
|
|
171
|
-
h: 220,
|
|
172
|
-
align: "center",
|
|
173
|
-
justify: "center",
|
|
174
|
-
children: /* @__PURE__ */ jsx(Text$1, {
|
|
175
|
-
size: "sm",
|
|
176
|
-
c: "dimmed",
|
|
177
|
-
children: "No activity data"
|
|
178
|
-
})
|
|
179
|
-
})]
|
|
180
|
-
}), /* @__PURE__ */ jsxs(Paper, {
|
|
181
|
-
p: "md",
|
|
182
|
-
radius: "md",
|
|
183
|
-
withBorder: true,
|
|
184
|
-
children: [/* @__PURE__ */ jsx(Text$1, {
|
|
185
|
-
size: "sm",
|
|
186
|
-
fw: 600,
|
|
187
|
-
mb: "sm",
|
|
188
|
-
children: "Active Executions"
|
|
189
|
-
}), statusDonutData.length > 0 ? /* @__PURE__ */ jsx(DonutChart, {
|
|
190
|
-
h: 220,
|
|
191
|
-
data: statusDonutData,
|
|
192
|
-
withTooltip: true,
|
|
193
|
-
tooltipDataSource: "segment",
|
|
194
|
-
chartLabel: String(statusDonutData.reduce((sum, d) => sum + d.value, 0))
|
|
195
|
-
}) : /* @__PURE__ */ jsx(Flex$1, {
|
|
196
|
-
h: 220,
|
|
197
|
-
align: "center",
|
|
198
|
-
justify: "center",
|
|
199
|
-
children: /* @__PURE__ */ jsx(Text$1, {
|
|
200
|
-
size: "sm",
|
|
201
|
-
c: "dimmed",
|
|
202
|
-
children: "No active executions"
|
|
203
|
-
})
|
|
204
|
-
})]
|
|
205
|
-
})]
|
|
206
|
-
}),
|
|
207
|
-
queueChartData.length > 0 && /* @__PURE__ */ jsxs(Paper, {
|
|
208
|
-
p: "md",
|
|
209
|
-
radius: "md",
|
|
210
|
-
withBorder: true,
|
|
211
|
-
children: [/* @__PURE__ */ jsx(Text$1, {
|
|
212
|
-
size: "sm",
|
|
213
|
-
fw: 600,
|
|
214
|
-
mb: "sm",
|
|
215
|
-
children: "Queue Depth by Job"
|
|
216
|
-
}), /* @__PURE__ */ jsx(BarChart, {
|
|
217
|
-
h: 200,
|
|
218
|
-
data: queueChartData,
|
|
219
|
-
dataKey: "job",
|
|
220
|
-
type: "stacked",
|
|
221
|
-
series: [
|
|
222
|
-
{
|
|
223
|
-
name: "running",
|
|
224
|
-
label: "Running",
|
|
225
|
-
color: "blue.6"
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
name: "pending",
|
|
229
|
-
label: "Pending",
|
|
230
|
-
color: "gray.5"
|
|
231
|
-
},
|
|
232
|
-
{
|
|
233
|
-
name: "scheduled",
|
|
234
|
-
label: "Scheduled",
|
|
235
|
-
color: "violet.5"
|
|
236
|
-
},
|
|
237
|
-
{
|
|
238
|
-
name: "retrying",
|
|
239
|
-
label: "Retrying",
|
|
240
|
-
color: "yellow.5"
|
|
241
|
-
},
|
|
242
|
-
{
|
|
243
|
-
name: "dead",
|
|
244
|
-
label: "Dead",
|
|
245
|
-
color: "red.6"
|
|
246
|
-
}
|
|
247
|
-
],
|
|
248
|
-
withTooltip: true,
|
|
249
|
-
withLegend: true
|
|
250
|
-
})]
|
|
251
|
-
}),
|
|
252
|
-
/* @__PURE__ */ jsxs(SimpleGrid, {
|
|
253
|
-
cols: {
|
|
254
|
-
base: 1,
|
|
255
|
-
md: 2
|
|
256
|
-
},
|
|
257
|
-
spacing: "md",
|
|
258
|
-
children: [/* @__PURE__ */ jsxs(Paper, {
|
|
259
|
-
p: "md",
|
|
260
|
-
radius: "md",
|
|
261
|
-
withBorder: true,
|
|
262
|
-
children: [/* @__PURE__ */ jsx(Text$1, {
|
|
263
|
-
size: "sm",
|
|
264
|
-
fw: 600,
|
|
265
|
-
mb: "sm",
|
|
266
|
-
children: "Recent Executions"
|
|
267
|
-
}), /* @__PURE__ */ jsxs(Table, {
|
|
268
|
-
highlightOnHover: true,
|
|
269
|
-
children: [/* @__PURE__ */ jsx(Table.Thead, { children: /* @__PURE__ */ jsxs(Table.Tr, { children: [
|
|
270
|
-
/* @__PURE__ */ jsx(Table.Th, { children: "Job" }),
|
|
271
|
-
/* @__PURE__ */ jsx(Table.Th, { children: "Status" }),
|
|
272
|
-
/* @__PURE__ */ jsx(Table.Th, { children: "Duration" })
|
|
273
|
-
] }) }), /* @__PURE__ */ jsxs(Table.Tbody, { children: [recent.map((exec) => /* @__PURE__ */ jsxs(Table.Tr, { children: [
|
|
274
|
-
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Text$1, {
|
|
275
|
-
size: "xs",
|
|
276
|
-
fw: 500,
|
|
277
|
-
ff: "monospace",
|
|
278
|
-
lineClamp: 1,
|
|
279
|
-
children: exec.jobName
|
|
280
|
-
}) }),
|
|
281
|
-
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Text$1, {
|
|
282
|
-
size: "xs",
|
|
283
|
-
ff: "monospace",
|
|
284
|
-
children: exec.status
|
|
285
|
-
}) }),
|
|
286
|
-
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Text$1, {
|
|
287
|
-
size: "xs",
|
|
288
|
-
c: "dimmed",
|
|
289
|
-
ff: "monospace",
|
|
290
|
-
children: exec.startedAt && (exec.completedAt || exec.status === "running") ? formatDuration(exec.startedAt, exec.completedAt) : "—"
|
|
291
|
-
}) })
|
|
292
|
-
] }, exec.id)), recent.length === 0 && /* @__PURE__ */ jsx(Table.Tr, { children: /* @__PURE__ */ jsx(Table.Td, {
|
|
293
|
-
colSpan: 3,
|
|
294
|
-
children: /* @__PURE__ */ jsx(Text$1, {
|
|
295
|
-
size: "sm",
|
|
296
|
-
c: "dimmed",
|
|
297
|
-
ta: "center",
|
|
298
|
-
children: "No recent executions"
|
|
299
|
-
})
|
|
300
|
-
}) })] })]
|
|
301
|
-
})]
|
|
302
|
-
}), /* @__PURE__ */ jsxs(Paper, {
|
|
303
|
-
p: "md",
|
|
304
|
-
radius: "md",
|
|
305
|
-
withBorder: true,
|
|
306
|
-
children: [/* @__PURE__ */ jsx(Text$1, {
|
|
307
|
-
size: "sm",
|
|
308
|
-
fw: 600,
|
|
309
|
-
mb: "sm",
|
|
310
|
-
children: "Top Failures (7d)"
|
|
311
|
-
}), failures.length > 0 ? /* @__PURE__ */ jsxs(Table, { children: [/* @__PURE__ */ jsx(Table.Thead, { children: /* @__PURE__ */ jsxs(Table.Tr, { children: [
|
|
312
|
-
/* @__PURE__ */ jsx(Table.Th, { children: "Job" }),
|
|
313
|
-
/* @__PURE__ */ jsx(Table.Th, { children: "Count" }),
|
|
314
|
-
/* @__PURE__ */ jsx(Table.Th, { children: "Last Error" })
|
|
315
|
-
] }) }), /* @__PURE__ */ jsx(Table.Tbody, { children: failures.map((f) => /* @__PURE__ */ jsxs(Table.Tr, { children: [
|
|
316
|
-
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Text$1, {
|
|
317
|
-
size: "xs",
|
|
318
|
-
fw: 500,
|
|
319
|
-
ff: "monospace",
|
|
320
|
-
lineClamp: 1,
|
|
321
|
-
children: f.jobName
|
|
322
|
-
}) }),
|
|
323
|
-
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Text$1, {
|
|
324
|
-
size: "xs",
|
|
325
|
-
fw: 600,
|
|
326
|
-
ff: "monospace",
|
|
327
|
-
children: f.failures
|
|
328
|
-
}) }),
|
|
329
|
-
/* @__PURE__ */ jsx(Table.Td, { children: /* @__PURE__ */ jsx(Text$1, {
|
|
330
|
-
size: "xs",
|
|
331
|
-
c: "dimmed",
|
|
332
|
-
lineClamp: 1,
|
|
333
|
-
style: { maxWidth: 200 },
|
|
334
|
-
children: f.lastError ?? "—"
|
|
335
|
-
}) })
|
|
336
|
-
] }, f.jobName)) })] }) : /* @__PURE__ */ jsx(Flex$1, {
|
|
337
|
-
h: 100,
|
|
338
|
-
align: "center",
|
|
339
|
-
justify: "center",
|
|
340
|
-
children: /* @__PURE__ */ jsx(Text$1, {
|
|
341
|
-
size: "sm",
|
|
342
|
-
c: "dimmed",
|
|
343
|
-
children: "No failures in the last 7 days"
|
|
344
|
-
})
|
|
345
|
-
})]
|
|
346
|
-
})]
|
|
347
|
-
})
|
|
348
|
-
]
|
|
349
|
-
});
|
|
350
|
-
};
|
|
351
|
-
|
|
352
|
-
//#endregion
|
|
353
|
-
export { AdminJobDashboard as default };
|
|
354
|
-
//# sourceMappingURL=AdminJobDashboard-BL8gGPDp.js.map
|