@alepha/ui 0.16.2 → 0.17.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-CoTOTfgU.js → AdminApiKeys-CF_qOO3u.js} +20 -20
- package/dist/admin/AdminApiKeys-CF_qOO3u.js.map +1 -0
- package/dist/admin/{AdminAudits-BmsxFbDa.js → AdminAudits-BQno3hZG.js} +7 -8
- package/dist/admin/AdminAudits-BQno3hZG.js.map +1 -0
- package/dist/admin/{AdminFiles-BBB8knca.js → AdminFiles-kvuUaASF.js} +3 -5
- package/dist/admin/{AdminFiles-BBB8knca.js.map → AdminFiles-kvuUaASF.js.map} +1 -1
- package/dist/admin/AdminJobDashboard-CrPxp0W1.js +485 -0
- package/dist/admin/AdminJobDashboard-CrPxp0W1.js.map +1 -0
- package/dist/admin/AdminJobExecutions-D-b4Zt7W.js +678 -0
- package/dist/admin/AdminJobExecutions-D-b4Zt7W.js.map +1 -0
- package/dist/admin/AdminJobRegistry-CNX5cpDx.js +301 -0
- package/dist/admin/AdminJobRegistry-CNX5cpDx.js.map +1 -0
- package/dist/admin/{AdminLayout-CsjvpeD1.js → AdminLayout-e-ZP5nWw.js} +1 -1
- package/dist/admin/{AdminLayout-CsjvpeD1.js.map → AdminLayout-e-ZP5nWw.js.map} +1 -1
- package/dist/admin/{AdminNotifications-LwR6RKrx.js → AdminNotifications-DeHJFf6W.js} +3 -5
- package/dist/admin/{AdminNotifications-LwR6RKrx.js.map → AdminNotifications-DeHJFf6W.js.map} +1 -1
- package/dist/admin/{AdminParameters-B_83Vie9.js → AdminParameters-iQE8o7a7.js} +43 -36
- package/dist/admin/AdminParameters-iQE8o7a7.js.map +1 -0
- package/dist/admin/{AdminSessions-CWnPosdd.js → AdminSessions-oKJCbd7w.js} +5 -7
- package/dist/admin/AdminSessions-oKJCbd7w.js.map +1 -0
- package/dist/admin/{AdminUserAudits-nHv636E_.js → AdminUserAudits-BNCEle_E.js} +6 -8
- package/dist/admin/AdminUserAudits-BNCEle_E.js.map +1 -0
- package/dist/admin/{AdminUserCreate-CjYD3Kjc.js → AdminUserCreate-CgqeFwCt.js} +6 -7
- package/dist/admin/AdminUserCreate-CgqeFwCt.js.map +1 -0
- package/dist/admin/{AdminUserDetails-Ccq-LsZ0.js → AdminUserDetails-DDe1A1GP.js} +30 -29
- package/dist/admin/AdminUserDetails-DDe1A1GP.js.map +1 -0
- package/dist/admin/{AdminUserLayout-7s41DiF_.js → AdminUserLayout-HAlobhWf.js} +18 -16
- package/dist/admin/AdminUserLayout-HAlobhWf.js.map +1 -0
- package/dist/admin/{AdminUserSessions-Ds3ODq_d.js → AdminUserSessions-Bq1LnVLf.js} +5 -7
- package/dist/admin/AdminUserSessions-Bq1LnVLf.js.map +1 -0
- package/dist/admin/{AdminUserSettings-CGh4gROo.js → AdminUserSettings-BRsBZoxV.js} +10 -10
- package/dist/admin/AdminUserSettings-BRsBZoxV.js.map +1 -0
- package/dist/admin/{AdminUsers-CvPiBzQK.js → AdminUsers-D71kIOSn.js} +6 -8
- package/dist/admin/AdminUsers-D71kIOSn.js.map +1 -0
- package/dist/admin/index.d.ts +7 -83
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +49 -70
- package/dist/admin/index.js.map +1 -1
- package/dist/auth/{Login-DS_OqA0G.js → Login-BS_FYTy0.js} +13 -8
- package/dist/auth/Login-BS_FYTy0.js.map +1 -0
- package/dist/auth/{Profile-Di7N7HZL.js → Profile-CjDsW378.js} +16 -10
- package/dist/auth/Profile-CjDsW378.js.map +1 -0
- package/dist/auth/{Register-BRR2_gux.js → Register-C5eqzAaD.js} +21 -12
- package/dist/auth/Register-C5eqzAaD.js.map +1 -0
- package/dist/auth/{ResetPassword-oQu72lod.js → ResetPassword-XifinVao.js} +14 -8
- package/dist/auth/ResetPassword-XifinVao.js.map +1 -0
- package/dist/auth/{VerifyEmail-DC6HPZjd.js → VerifyEmail-DTgbeJOO.js} +6 -4
- package/dist/auth/VerifyEmail-DTgbeJOO.js.map +1 -0
- package/dist/auth/index.d.ts +4 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +15 -14
- package/dist/auth/index.js.map +1 -1
- package/dist/core/index.d.ts +37 -26
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +444 -193
- package/dist/core/index.js.map +1 -1
- package/dist/demo/DemoDataTable-lnBKWBf8.js +362 -0
- package/dist/demo/DemoDataTable-lnBKWBf8.js.map +1 -0
- package/dist/demo/{DemoHome-DpRrPlBC.js → DemoHome-CUMZsYaH.js} +6 -7
- package/dist/demo/DemoHome-CUMZsYaH.js.map +1 -0
- package/dist/demo/{DemoJsonViewer-zeucGKHV.js → DemoJsonViewer-_uokbGaW.js} +17 -19
- package/dist/demo/DemoJsonViewer-_uokbGaW.js.map +1 -0
- package/dist/demo/{DemoLayout-PhgbAAiQ.js → DemoLayout-DHVoacE6.js} +2 -4
- package/dist/demo/{DemoLayout-PhgbAAiQ.js.map → DemoLayout-DHVoacE6.js.map} +1 -1
- package/dist/demo/{DemoLogin-DSzP0Lkv.js → DemoLogin-DjJ9314c.js} +22 -17
- package/dist/demo/DemoLogin-DjJ9314c.js.map +1 -0
- package/dist/demo/{DemoRegister-DavFBsCz.js → DemoRegister-DzkJ5M83.js} +34 -25
- package/dist/demo/DemoRegister-DzkJ5M83.js.map +1 -0
- package/dist/demo/{DemoResetPassword-BS2rIAQK.js → DemoResetPassword-DWh4_BpQ.js} +27 -21
- package/dist/demo/DemoResetPassword-DWh4_BpQ.js.map +1 -0
- package/dist/demo/{DemoSidebar-zNkUmHRl.js → DemoSidebar-C1csnGhX.js} +2 -2
- package/dist/demo/{DemoSidebar-zNkUmHRl.js.map → DemoSidebar-C1csnGhX.js.map} +1 -1
- package/dist/demo/{DemoTypeForm-B9q7oT0b.js → DemoTypeForm-CWz6fJrJ.js} +2 -2
- package/dist/demo/{DemoTypeForm-B9q7oT0b.js.map → DemoTypeForm-CWz6fJrJ.js.map} +1 -1
- package/dist/demo/{DemoVerifyEmail-Bi4SdWz0.js → DemoVerifyEmail-DbU_tCj8.js} +13 -11
- package/dist/demo/DemoVerifyEmail-DbU_tCj8.js.map +1 -0
- package/dist/demo/{IconGoogle-CTeZyrek.js → IconGoogle-Ch1m3Uzl.js} +1 -1
- package/dist/demo/{IconGoogle-CTeZyrek.js.map → IconGoogle-Ch1m3Uzl.js.map} +1 -1
- package/dist/demo/{Showcase-C9btr_SJ.js → Showcase-BzoXNlCn.js} +10 -10
- package/dist/demo/Showcase-BzoXNlCn.js.map +1 -0
- package/dist/demo/index.d.ts +1 -68
- package/dist/demo/index.d.ts.map +1 -1
- package/dist/demo/index.js +11 -15
- package/dist/demo/index.js.map +1 -1
- package/dist/json/index.js +2 -2
- package/dist/json/index.js.map +1 -1
- package/package.json +9 -5
- package/src/admin/AdminRouter.ts +36 -5
- package/src/admin/components/audits/AdminAudits.tsx +5 -5
- package/src/admin/components/jobs/AdminJobDashboard.tsx +455 -0
- package/src/admin/components/jobs/AdminJobExecutions.tsx +693 -0
- package/src/admin/components/jobs/AdminJobRegistry.tsx +325 -0
- package/src/admin/components/keys/AdminApiKeys.tsx +28 -31
- package/src/admin/components/parameters/AdminParameters.tsx +3 -3
- package/src/admin/components/parameters/ParameterDetails.tsx +34 -29
- package/src/admin/components/parameters/ParameterEmptyState.tsx +5 -5
- package/src/admin/components/parameters/ParameterHistory.tsx +11 -19
- package/src/admin/components/parameters/ParameterTree.tsx +16 -18
- package/src/admin/components/sessions/AdminSessions.tsx +3 -3
- package/src/admin/components/shared/AdminResourceHeader.tsx +20 -16
- package/src/admin/components/users/AdminUserAudits.tsx +5 -5
- package/src/admin/components/users/AdminUserCreate.tsx +3 -3
- package/src/admin/components/users/AdminUserDetails.tsx +51 -53
- package/src/admin/components/users/AdminUserLayout.tsx +7 -7
- package/src/admin/components/users/AdminUserSessions.tsx +3 -3
- package/src/admin/components/users/AdminUserSettings.tsx +9 -9
- package/src/admin/components/users/AdminUsers.tsx +5 -5
- package/src/admin/components/verifications/AdminVerifications.tsx +3 -3
- package/src/admin/index.ts +0 -24
- package/src/auth/components/Login.tsx +13 -13
- package/src/auth/components/Profile.tsx +17 -26
- package/src/auth/components/Register.tsx +21 -31
- package/src/auth/components/ResetPassword.tsx +13 -22
- package/src/auth/components/VerifyEmail.tsx +5 -5
- package/src/auth/components/buttons/UserButton.tsx +14 -4
- package/src/core/components/buttons/ActionButton.tsx +9 -2
- package/src/core/components/data/ErrorViewer.tsx +15 -15
- package/src/core/components/dialogs/AlertDialog.tsx +3 -3
- package/src/core/components/dialogs/ConfirmDialog.tsx +3 -3
- package/src/core/components/dialogs/PromptDialog.tsx +3 -3
- package/src/core/components/form/Control.tsx +9 -0
- package/src/core/components/form/ControlArray.tsx +6 -7
- package/src/core/components/form/ControlObject.tsx +3 -3
- package/src/core/components/form/ControlQueryBuilder.tsx +20 -22
- package/src/core/components/form/ControlSelect.tsx +4 -0
- package/src/core/components/form/TypeForm.tsx +7 -0
- package/src/core/components/layout/Breadcrumb.tsx +6 -6
- package/src/core/components/layout/Omnibar.tsx +2 -1
- package/src/core/components/layout/Sidebar.tsx +5 -1
- package/src/core/components/table/ColumnPicker.tsx +47 -31
- package/src/core/components/table/DataTable.tsx +277 -201
- package/src/core/components/table/DataTableFilters.tsx +8 -0
- package/src/core/components/table/DataTableToolbar.tsx +98 -5
- package/src/core/components/table/FilterPicker.tsx +28 -26
- package/src/core/components/table/types.ts +52 -37
- package/src/core/components/table/useTableSelection.ts +83 -0
- package/src/core/styles.css +1 -0
- package/src/core/utils/parseInput.ts +1 -0
- package/src/demo/components/DemoHome.tsx +5 -5
- package/src/demo/components/core/DemoDataTable.tsx +209 -5
- package/src/demo/components/json/DemoJsonViewer.tsx +1 -1
- package/src/demo/components/shared/MacWindow.tsx +7 -7
- package/src/demo/components/shared/Showcase.tsx +3 -3
- package/src/demo/index.ts +0 -11
- package/src/json/components/JsonViewer.tsx +3 -3
- package/dist/admin/AdminApiKeys-CoTOTfgU.js.map +0 -1
- package/dist/admin/AdminAudits-BmsxFbDa.js.map +0 -1
- package/dist/admin/AdminJobs-C604joTz.js +0 -698
- package/dist/admin/AdminJobs-C604joTz.js.map +0 -1
- package/dist/admin/AdminParameters-B_83Vie9.js.map +0 -1
- package/dist/admin/AdminSessions-CWnPosdd.js.map +0 -1
- package/dist/admin/AdminUserAudits-nHv636E_.js.map +0 -1
- package/dist/admin/AdminUserCreate-CjYD3Kjc.js.map +0 -1
- package/dist/admin/AdminUserDetails-Ccq-LsZ0.js.map +0 -1
- package/dist/admin/AdminUserLayout-7s41DiF_.js.map +0 -1
- package/dist/admin/AdminUserSessions-Ds3ODq_d.js.map +0 -1
- package/dist/admin/AdminUserSettings-CGh4gROo.js.map +0 -1
- package/dist/admin/AdminUsers-CvPiBzQK.js.map +0 -1
- package/dist/admin/rolldown-runtime-CjeV3_4I.js +0 -18
- package/dist/auth/Login-DS_OqA0G.js.map +0 -1
- package/dist/auth/Profile-Di7N7HZL.js.map +0 -1
- package/dist/auth/Register-BRR2_gux.js.map +0 -1
- package/dist/auth/ResetPassword-oQu72lod.js.map +0 -1
- package/dist/auth/VerifyEmail-DC6HPZjd.js.map +0 -1
- package/dist/demo/DemoDataTable-DCsJq8v5.js +0 -149
- package/dist/demo/DemoDataTable-DCsJq8v5.js.map +0 -1
- package/dist/demo/DemoHome-DpRrPlBC.js.map +0 -1
- package/dist/demo/DemoJsonViewer-zeucGKHV.js.map +0 -1
- package/dist/demo/DemoLogin-DSzP0Lkv.js.map +0 -1
- package/dist/demo/DemoRegister-DavFBsCz.js.map +0 -1
- package/dist/demo/DemoResetPassword-BS2rIAQK.js.map +0 -1
- package/dist/demo/DemoVerifyEmail-Bi4SdWz0.js.map +0 -1
- package/dist/demo/Showcase-C9btr_SJ.js.map +0 -1
- package/dist/demo/rolldown-runtime-CjeV3_4I.js +0 -18
- package/src/admin/components/jobs/AdminJobs.tsx +0 -772
package/dist/admin/index.d.ts
CHANGED
|
@@ -5,14 +5,13 @@ import { ReactAuth } from "alepha/react/auth";
|
|
|
5
5
|
import * as alepha_react_router0 from "alepha/react/router";
|
|
6
6
|
import { ReactRouter, Redirection } from "alepha/react/router";
|
|
7
7
|
import * as alepha_server_links0 from "alepha/server/links";
|
|
8
|
-
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
9
8
|
import { FileController } from "alepha/api/files";
|
|
10
|
-
import { AdminJobController } from "alepha/api/jobs";
|
|
11
9
|
import { AdminSessionController, AdminUserController } from "alepha/api/users";
|
|
12
10
|
import { AdminAuditController } from "alepha/api/audits";
|
|
11
|
+
import { AdminJobController } from "alepha/api/jobs";
|
|
13
12
|
import { AdminApiKeyController } from "alepha/api/keys";
|
|
14
13
|
import { AdminNotificationController } from "alepha/api/notifications";
|
|
15
|
-
import { AdminParameterController
|
|
14
|
+
import { AdminParameterController } from "alepha/api/parameters";
|
|
16
15
|
|
|
17
16
|
//#region ../../src/admin/AdminRouter.d.ts
|
|
18
17
|
declare class AdminRouter {
|
|
@@ -45,93 +44,18 @@ declare class AdminRouter {
|
|
|
45
44
|
readonly adminFiles: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, {}>;
|
|
46
45
|
readonly adminParameters: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, {
|
|
47
46
|
treeData: {
|
|
48
|
-
name: string;
|
|
49
47
|
path: string;
|
|
48
|
+
name: string;
|
|
50
49
|
children: any[];
|
|
51
50
|
isLeaf: boolean;
|
|
52
51
|
}[];
|
|
53
52
|
}, {}>;
|
|
54
|
-
readonly
|
|
53
|
+
readonly adminJobDashboard: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, {}>;
|
|
54
|
+
readonly adminJobRegistry: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, {}>;
|
|
55
|
+
readonly adminJobExecutions: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, {}>;
|
|
55
56
|
readonly adminApiKeys: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, {}>;
|
|
56
57
|
}
|
|
57
58
|
//#endregion
|
|
58
|
-
//#region ../../src/admin/components/audits/AdminAudits.d.ts
|
|
59
|
-
interface AdminAuditsProps {
|
|
60
|
-
userRealmName?: string;
|
|
61
|
-
}
|
|
62
|
-
declare const AdminAudits: (props: AdminAuditsProps) => react_jsx_runtime0.JSX.Element;
|
|
63
|
-
//#endregion
|
|
64
|
-
//#region ../../src/admin/components/files/AdminFiles.d.ts
|
|
65
|
-
declare const AdminFiles: () => react_jsx_runtime0.JSX.Element;
|
|
66
|
-
//#endregion
|
|
67
|
-
//#region ../../src/admin/components/jobs/AdminJobs.d.ts
|
|
68
|
-
declare const AdminJobs: () => react_jsx_runtime0.JSX.Element;
|
|
69
|
-
//#endregion
|
|
70
|
-
//#region ../../src/admin/components/keys/AdminApiKeys.d.ts
|
|
71
|
-
declare const AdminApiKeys: () => react_jsx_runtime0.JSX.Element;
|
|
72
|
-
//#endregion
|
|
73
|
-
//#region ../../src/admin/components/notifications/AdminNotifications.d.ts
|
|
74
|
-
declare const AdminNotifications: () => react_jsx_runtime0.JSX.Element;
|
|
75
|
-
//#endregion
|
|
76
|
-
//#region ../../src/admin/components/parameters/AdminParameters.d.ts
|
|
77
|
-
interface AdminParametersProps {
|
|
78
|
-
treeData: ParameterTreeNode[];
|
|
79
|
-
}
|
|
80
|
-
declare const AdminParameters: ({
|
|
81
|
-
treeData: initialTreeData
|
|
82
|
-
}: AdminParametersProps) => react_jsx_runtime0.JSX.Element;
|
|
83
|
-
//#endregion
|
|
84
|
-
//#region ../../src/admin/components/sessions/AdminSessions.d.ts
|
|
85
|
-
interface AdminSessionsProps {
|
|
86
|
-
userRealmName?: string;
|
|
87
|
-
}
|
|
88
|
-
declare const AdminSessions: (props: AdminSessionsProps) => react_jsx_runtime0.JSX.Element;
|
|
89
|
-
//#endregion
|
|
90
|
-
//#region ../../src/admin/components/users/AdminUserAudits.d.ts
|
|
91
|
-
interface AdminUserAuditsProps {
|
|
92
|
-
userRealmName?: string;
|
|
93
|
-
}
|
|
94
|
-
declare const AdminUserAudits: (_props: AdminUserAuditsProps) => react_jsx_runtime0.JSX.Element;
|
|
95
|
-
//#endregion
|
|
96
|
-
//#region ../../src/admin/components/users/AdminUserCreate.d.ts
|
|
97
|
-
interface AdminUserCreateProps {
|
|
98
|
-
userRealmName?: string;
|
|
99
|
-
}
|
|
100
|
-
declare const AdminUserCreate: (props: AdminUserCreateProps) => react_jsx_runtime0.JSX.Element;
|
|
101
|
-
//#endregion
|
|
102
|
-
//#region ../../src/admin/components/users/AdminUserDetails.d.ts
|
|
103
|
-
interface AdminUserDetailsProps {
|
|
104
|
-
userRealmName?: string;
|
|
105
|
-
}
|
|
106
|
-
declare const AdminUserDetails: (props: AdminUserDetailsProps) => react_jsx_runtime0.JSX.Element;
|
|
107
|
-
//#endregion
|
|
108
|
-
//#region ../../src/admin/components/users/AdminUserLayout.d.ts
|
|
109
|
-
interface AdminUserLayoutProps {
|
|
110
|
-
userRealmName?: string;
|
|
111
|
-
}
|
|
112
|
-
declare const AdminUserLayout: (props: AdminUserLayoutProps) => react_jsx_runtime0.JSX.Element;
|
|
113
|
-
//#endregion
|
|
114
|
-
//#region ../../src/admin/components/users/AdminUserSessions.d.ts
|
|
115
|
-
interface AdminUserSessionsProps {
|
|
116
|
-
userRealmName?: string;
|
|
117
|
-
}
|
|
118
|
-
declare const AdminUserSessions: (props: AdminUserSessionsProps) => react_jsx_runtime0.JSX.Element;
|
|
119
|
-
//#endregion
|
|
120
|
-
//#region ../../src/admin/components/users/AdminUserSettings.d.ts
|
|
121
|
-
interface AdminUserSettingsProps {
|
|
122
|
-
userRealmName?: string;
|
|
123
|
-
}
|
|
124
|
-
declare const AdminUserSettings: (props: AdminUserSettingsProps) => react_jsx_runtime0.JSX.Element;
|
|
125
|
-
//#endregion
|
|
126
|
-
//#region ../../src/admin/components/users/AdminUsers.d.ts
|
|
127
|
-
interface AdminUsersProps {
|
|
128
|
-
userRealmName?: string;
|
|
129
|
-
}
|
|
130
|
-
declare const AdminUsers: (props: AdminUsersProps) => react_jsx_runtime0.JSX.Element;
|
|
131
|
-
//#endregion
|
|
132
|
-
//#region ../../src/admin/components/verifications/AdminVerifications.d.ts
|
|
133
|
-
declare const AdminVerifications: () => react_jsx_runtime0.JSX.Element;
|
|
134
|
-
//#endregion
|
|
135
59
|
//#region ../../src/admin/primitives/$uiAdmin.d.ts
|
|
136
60
|
/**
|
|
137
61
|
* Register Admin UI components and get the AdminRouter instance.
|
|
@@ -161,5 +85,5 @@ declare const $uiAdmin: (optsFn?: (a: AdminRouter) => DashboardShellProps) => Ad
|
|
|
161
85
|
*/
|
|
162
86
|
declare const AlephaUIAdmin: alepha.Service<alepha.Module>;
|
|
163
87
|
//#endregion
|
|
164
|
-
export { $uiAdmin,
|
|
88
|
+
export { $uiAdmin, AdminRouter, AlephaUIAdmin };
|
|
165
89
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/admin/AdminRouter.ts","../../src/admin/
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/admin/AdminRouter.ts","../../src/admin/primitives/$uiAdmin.ts","../../src/admin/index.ts"],"mappings":";;;;;;;;;;;;;;;;cA+Ba,WAAA;EAAA,mBACQ,MAAA,EAAM,WAAA,CAAA,WAAA;EAAA,mBACN,UAAA,EAAU,UAAA;EAAA,mBACV,IAAA,EAAI,SAAA;EAAA,mBACJ,QAAA,EAAQ,oBAAA,CAAA,iBAAA,CAAA,mBAAA;EAAA,mBACR,WAAA,EAAW,oBAAA,CAAA,iBAAA,CAAA,sBAAA;EAAA,mBACX,gBAAA,EAAgB,oBAAA,CAAA,iBAAA,CAAA,2BAAA;EAAA,mBAChB,QAAA,EAAQ,oBAAA,CAAA,iBAAA,CAAA,cAAA;EAAA,mBACR,SAAA,EAAS,oBAAA,CAAA,iBAAA,CAAA,wBAAA;EAAA,mBACT,SAAA,EAAS,oBAAA,CAAA,iBAAA,CAAA,oBAAA;EAAA,mBACT,OAAA,EAAO,oBAAA,CAAA,iBAAA,CAAA,kBAAA;EAAA,mBACP,UAAA,EAAU,oBAAA,CAAA,iBAAA,CAAA,qBAAA;EAEtB,QAAA,IAAY,WAAA,EAAa,WAAA,KAAgB,mBAAA;EASzC,sBAAA,CAAA,GAA0B,WAAA;EAAA,UA2DvB,eAAA,CAAA,GAAmB,mBAAA;EAAA,UAOnB,eAAA,CAAgB,GAAA,EAAK,GAAA,GAAG,WAAA;EAAA,SAclB,WAAA,EAAW,oBAAA,CAAA,aAAA,CAdO,oBAAA,CAcP,gBAAA,MAAA,oBAAA,CAAA,mBAAA;EAAA,SAoBX,UAAA,EAAU,oBAAA,CAAA,aAAA,CApBC,oBAAA,CAoBD,gBAAA;EAAA,SAUV,eAAA,EAAe,oBAAA,CAAA,aAAA,CAVL,oBAAA,CAUK,gBAAA;EAAA,SAUf,eAAA,EAAe,oBAAA,CAAA,aAAA,CAVA,oBAAA,CAUA,gBAAA;EAAA,SASf,gBAAA,EAAgB,oBAAA,CAAA,aAAA,CATD,oBAAA,CASC,gBAAA;EAAA,SAOhB,iBAAA,EAAiB,oBAAA,CAAA,aAAA,CAPD,oBAAA,CAOC,gBAAA;EAAA,SAOjB,iBAAA,EAAiB,oBAAA,CAAA,aAAA,CAPA,oBAAA,CAOA,gBAAA;EAAA,SAOjB,eAAA,EAAe,oBAAA,CAAA,aAAA,CAPE,oBAAA,CAOF,gBAAA;EAAA,SAYf,WAAA,EAAW,oBAAA,CAAA,aAAA,CAZI,oBAAA,CAYJ,gBAAA;EAAA,SAcX,aAAA,EAAa,oBAAA,CAAA,aAAA,CAdF,oBAAA,CAcE,gBAAA;EAAA,SAcb,kBAAA,EAAkB,oBAAA,CAAA,aAAA,CAdL,oBAAA,CAcK,gBAAA;EAAA,SAclB,UAAA,EAAU,oBAAA,CAAA,aAAA,CAdQ,oBAAA,CAcR,gBAAA;EAAA,SAcV,eAAA,EAAe,oBAAA,CAAA,aAAA,CAdL,oBAAA,CAcK,gBAAA;;;;;;;;WAkBf,iBAAA,EAAiB,oBAAA,CAAA,aAAA,CAlBF,oBAAA,CAkBE,gBAAA;EAAA,SAUjB,gBAAA,EAAgB,oBAAA,CAAA,aAAA,CAVC,oBAAA,CAUD,gBAAA;EAAA,SAUhB,kBAAA,EAAkB,oBAAA,CAAA,aAAA,CAVF,oBAAA,CAUE,gBAAA;EAAA,SAclB,YAAA,EAAY,oBAAA,CAAA,aAAA,CAdM,oBAAA,CAcN,gBAAA;AAAA;;;;;;cC5TjB,QAAA,GAAY,MAAA,IAAU,CAAA,EAAG,WAAA,KAAgB,mBAAA,KAAmB,WAAA;;;;;;;;;;;;;;;;;ADwBzE;;;;;;cECa,aAAA,EAAa,MAAA,CAAA,OAAA,CAMxB,MAAA,CANwB,MAAA"}
|
package/dist/admin/index.js
CHANGED
|
@@ -1,26 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as AdminFiles } from "./AdminFiles-BBB8knca.js";
|
|
3
|
-
import { t as AdminJobs } from "./AdminJobs-C604joTz.js";
|
|
4
|
-
import { t as AdminApiKeys } from "./AdminApiKeys-CoTOTfgU.js";
|
|
5
|
-
import { t as AdminNotifications } from "./AdminNotifications-LwR6RKrx.js";
|
|
6
|
-
import { t as AdminParameters } from "./AdminParameters-B_83Vie9.js";
|
|
7
|
-
import { t as AdminSessions } from "./AdminSessions-CWnPosdd.js";
|
|
8
|
-
import { t as AdminUserAudits } from "./AdminUserAudits-nHv636E_.js";
|
|
9
|
-
import { t as AdminUserCreate } from "./AdminUserCreate-CjYD3Kjc.js";
|
|
10
|
-
import { t as AdminUserDetails } from "./AdminUserDetails-Ccq-LsZ0.js";
|
|
11
|
-
import { t as AdminUserLayout } from "./AdminUserLayout-7s41DiF_.js";
|
|
12
|
-
import { t as AdminUserSessions } from "./AdminUserSessions-Ds3ODq_d.js";
|
|
13
|
-
import { t as AdminUserSettings } from "./AdminUserSettings-CGh4gROo.js";
|
|
14
|
-
import { t as AdminUsers } from "./AdminUsers-CvPiBzQK.js";
|
|
15
|
-
import { AlephaUI, Flex, Text } from "@alepha/ui";
|
|
1
|
+
import { AlephaUI } from "@alepha/ui";
|
|
16
2
|
import { AlephaUIAuth, AuthRouter } from "@alepha/ui/auth";
|
|
17
3
|
import { $context, $inject, $module } from "alepha";
|
|
18
|
-
import { IconBell, IconDevices, IconFile, IconHistory, IconKey, IconPlus, IconSettings,
|
|
4
|
+
import { IconBell, IconClock, IconDevices, IconFile, IconHistory, IconKey, IconListDetails, IconPlus, IconSettings, IconTerminal2, IconUser, IconUsers } from "@tabler/icons-react";
|
|
19
5
|
import { ReactAuth } from "alepha/react/auth";
|
|
20
6
|
import { $page, ReactRouter, Redirection } from "alepha/react/router";
|
|
21
7
|
import { $client } from "alepha/server/links";
|
|
22
|
-
import { Stack } from "@mantine/core";
|
|
23
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
24
8
|
|
|
25
9
|
//#region ../../src/admin/AdminRouter.ts
|
|
26
10
|
var AdminRouter = class {
|
|
@@ -74,8 +58,17 @@ var AdminRouter = class {
|
|
|
74
58
|
can: () => this.notificationCtrl.findNotifications.can()
|
|
75
59
|
},
|
|
76
60
|
{
|
|
77
|
-
...this.router.node(this.
|
|
78
|
-
|
|
61
|
+
...this.router.node(this.adminJobDashboard.name),
|
|
62
|
+
href: void 0,
|
|
63
|
+
can: () => this.jobCtrl.getRegistry.can(),
|
|
64
|
+
children: [
|
|
65
|
+
{
|
|
66
|
+
...this.router.node(this.adminJobDashboard.name),
|
|
67
|
+
label: "Dashboard"
|
|
68
|
+
},
|
|
69
|
+
{ ...this.router.node(this.adminJobRegistry.name) },
|
|
70
|
+
{ ...this.router.node(this.adminJobExecutions.name) }
|
|
71
|
+
]
|
|
79
72
|
},
|
|
80
73
|
{
|
|
81
74
|
...this.router.node(this.adminAudits.name),
|
|
@@ -104,7 +97,7 @@ var AdminRouter = class {
|
|
|
104
97
|
path: "/admin",
|
|
105
98
|
label: "Admin",
|
|
106
99
|
can: () => this.auth.can("admin:*"),
|
|
107
|
-
lazy: () => import("./AdminLayout-
|
|
100
|
+
lazy: () => import("./AdminLayout-e-ZP5nWw.js"),
|
|
108
101
|
props: () => ({ adminShellProps: this.adminShellProps() }),
|
|
109
102
|
loader: ({ user, url }) => {
|
|
110
103
|
if (!user) throw this.onNotAuthorized(url);
|
|
@@ -117,7 +110,7 @@ var AdminRouter = class {
|
|
|
117
110
|
path: "/users",
|
|
118
111
|
label: "Users",
|
|
119
112
|
description: "Manage application users and their roles.",
|
|
120
|
-
lazy: () => import("./AdminUsers-
|
|
113
|
+
lazy: () => import("./AdminUsers-D71kIOSn.js"),
|
|
121
114
|
can: () => this.userCtrl.findUsers.can()
|
|
122
115
|
});
|
|
123
116
|
adminUserCreate = $page({
|
|
@@ -126,7 +119,7 @@ var AdminRouter = class {
|
|
|
126
119
|
path: "/users/create",
|
|
127
120
|
label: "Create User",
|
|
128
121
|
description: "Create a new user account",
|
|
129
|
-
lazy: () => import("./AdminUserCreate-
|
|
122
|
+
lazy: () => import("./AdminUserCreate-CgqeFwCt.js"),
|
|
130
123
|
can: () => this.userCtrl.createUser.can()
|
|
131
124
|
});
|
|
132
125
|
adminUserLayout = $page({
|
|
@@ -134,32 +127,32 @@ var AdminRouter = class {
|
|
|
134
127
|
parent: this.adminLayout,
|
|
135
128
|
path: "/users/:userId",
|
|
136
129
|
label: "User",
|
|
137
|
-
lazy: () => import("./AdminUserLayout-
|
|
130
|
+
lazy: () => import("./AdminUserLayout-HAlobhWf.js"),
|
|
138
131
|
can: () => this.userCtrl.getUser.can()
|
|
139
132
|
});
|
|
140
133
|
adminUserDetails = $page({
|
|
141
134
|
parent: this.adminUserLayout,
|
|
142
135
|
path: "/details",
|
|
143
136
|
label: "Details",
|
|
144
|
-
lazy: () => import("./AdminUserDetails-
|
|
137
|
+
lazy: () => import("./AdminUserDetails-DDe1A1GP.js")
|
|
145
138
|
});
|
|
146
139
|
adminUserSessions = $page({
|
|
147
140
|
parent: this.adminUserLayout,
|
|
148
141
|
path: "/sessions",
|
|
149
142
|
label: "Sessions",
|
|
150
|
-
lazy: () => import("./AdminUserSessions-
|
|
143
|
+
lazy: () => import("./AdminUserSessions-Bq1LnVLf.js")
|
|
151
144
|
});
|
|
152
145
|
adminUserSettings = $page({
|
|
153
146
|
parent: this.adminUserLayout,
|
|
154
147
|
path: "/settings",
|
|
155
148
|
label: "Settings",
|
|
156
|
-
lazy: () => import("./AdminUserSettings-
|
|
149
|
+
lazy: () => import("./AdminUserSettings-BRsBZoxV.js")
|
|
157
150
|
});
|
|
158
151
|
adminUserAudits = $page({
|
|
159
152
|
parent: this.adminUserLayout,
|
|
160
153
|
path: "/audits",
|
|
161
154
|
label: "Audit Log",
|
|
162
|
-
lazy: () => import("./AdminUserAudits-
|
|
155
|
+
lazy: () => import("./AdminUserAudits-BNCEle_E.js"),
|
|
163
156
|
can: () => this.auditCtrl.findByUser.can()
|
|
164
157
|
});
|
|
165
158
|
adminAudits = $page({
|
|
@@ -168,7 +161,7 @@ var AdminRouter = class {
|
|
|
168
161
|
path: "/audits",
|
|
169
162
|
label: "Audit Log",
|
|
170
163
|
description: "View system-wide audit trail and activity logs.",
|
|
171
|
-
lazy: () => import("./AdminAudits-
|
|
164
|
+
lazy: () => import("./AdminAudits-BQno3hZG.js"),
|
|
172
165
|
can: () => this.auditCtrl.findAudits.can()
|
|
173
166
|
});
|
|
174
167
|
adminSessions = $page({
|
|
@@ -177,7 +170,7 @@ var AdminRouter = class {
|
|
|
177
170
|
path: "/sessions",
|
|
178
171
|
label: "Sessions",
|
|
179
172
|
description: "View and manage all active sessions.",
|
|
180
|
-
lazy: () => import("./AdminSessions-
|
|
173
|
+
lazy: () => import("./AdminSessions-oKJCbd7w.js"),
|
|
181
174
|
can: () => this.sessionCtrl.findSessions.can()
|
|
182
175
|
});
|
|
183
176
|
adminNotifications = $page({
|
|
@@ -186,7 +179,7 @@ var AdminRouter = class {
|
|
|
186
179
|
path: "/notifications",
|
|
187
180
|
label: "Notifications",
|
|
188
181
|
description: "View notification history and status.",
|
|
189
|
-
lazy: () => import("./AdminNotifications-
|
|
182
|
+
lazy: () => import("./AdminNotifications-DeHJFf6W.js"),
|
|
190
183
|
can: () => this.notificationCtrl.findNotifications.can()
|
|
191
184
|
});
|
|
192
185
|
adminFiles = $page({
|
|
@@ -195,7 +188,7 @@ var AdminRouter = class {
|
|
|
195
188
|
path: "/files",
|
|
196
189
|
label: "Files",
|
|
197
190
|
description: "Manage uploaded files and storage.",
|
|
198
|
-
lazy: () => import("./AdminFiles-
|
|
191
|
+
lazy: () => import("./AdminFiles-kvuUaASF.js"),
|
|
199
192
|
can: () => this.fileCtrl.findFiles.can()
|
|
200
193
|
});
|
|
201
194
|
adminParameters = $page({
|
|
@@ -204,20 +197,38 @@ var AdminRouter = class {
|
|
|
204
197
|
path: "/parameters",
|
|
205
198
|
label: "Parameters",
|
|
206
199
|
description: "View and manage application parameters.",
|
|
207
|
-
lazy: () => import("./AdminParameters-
|
|
200
|
+
lazy: () => import("./AdminParameters-iQE8o7a7.js"),
|
|
208
201
|
can: () => this.paramCtrl.getParameterTree.can(),
|
|
209
202
|
loader: async () => {
|
|
210
203
|
return { treeData: await this.paramCtrl.getParameterTree({}) };
|
|
211
204
|
}
|
|
212
205
|
});
|
|
213
|
-
|
|
206
|
+
adminJobDashboard = $page({
|
|
214
207
|
icon: IconTerminal2,
|
|
215
208
|
parent: this.adminLayout,
|
|
216
209
|
path: "/jobs",
|
|
217
210
|
label: "Jobs",
|
|
218
211
|
description: "Monitor and manage background jobs and scheduled tasks.",
|
|
219
|
-
lazy: () => import("./
|
|
220
|
-
can: () => this.jobCtrl.
|
|
212
|
+
lazy: () => import("./AdminJobDashboard-CrPxp0W1.js"),
|
|
213
|
+
can: () => this.jobCtrl.getRegistry.can()
|
|
214
|
+
});
|
|
215
|
+
adminJobRegistry = $page({
|
|
216
|
+
icon: IconListDetails,
|
|
217
|
+
parent: this.adminLayout,
|
|
218
|
+
path: "/jobs/registry",
|
|
219
|
+
label: "Registry",
|
|
220
|
+
description: "View all registered job definitions.",
|
|
221
|
+
lazy: () => import("./AdminJobRegistry-CNX5cpDx.js"),
|
|
222
|
+
can: () => this.jobCtrl.getRegistry.can()
|
|
223
|
+
});
|
|
224
|
+
adminJobExecutions = $page({
|
|
225
|
+
icon: IconClock,
|
|
226
|
+
parent: this.adminLayout,
|
|
227
|
+
path: "/jobs/executions",
|
|
228
|
+
label: "Executions",
|
|
229
|
+
description: "Browse and filter job execution history.",
|
|
230
|
+
lazy: () => import("./AdminJobExecutions-D-b4Zt7W.js"),
|
|
231
|
+
can: () => this.jobCtrl.findExecutions.can()
|
|
221
232
|
});
|
|
222
233
|
adminApiKeys = $page({
|
|
223
234
|
icon: IconKey,
|
|
@@ -225,43 +236,11 @@ var AdminRouter = class {
|
|
|
225
236
|
path: "/api-keys",
|
|
226
237
|
label: "API Keys",
|
|
227
238
|
description: "View and manage API keys for programmatic access.",
|
|
228
|
-
lazy: () => import("./AdminApiKeys-
|
|
239
|
+
lazy: () => import("./AdminApiKeys-CF_qOO3u.js"),
|
|
229
240
|
can: () => this.apiKeyCtrl.findApiKeys.can()
|
|
230
241
|
});
|
|
231
242
|
};
|
|
232
243
|
|
|
233
|
-
//#endregion
|
|
234
|
-
//#region ../../src/admin/components/verifications/AdminVerifications.tsx
|
|
235
|
-
const AdminVerifications = () => {
|
|
236
|
-
return /* @__PURE__ */ jsx(Flex, {
|
|
237
|
-
flex: 1,
|
|
238
|
-
justify: "center",
|
|
239
|
-
align: "center",
|
|
240
|
-
children: /* @__PURE__ */ jsxs(Stack, {
|
|
241
|
-
align: "center",
|
|
242
|
-
gap: "xs",
|
|
243
|
-
children: [
|
|
244
|
-
/* @__PURE__ */ jsx(IconShieldCheck, {
|
|
245
|
-
size: 48,
|
|
246
|
-
stroke: 1.5,
|
|
247
|
-
color: "var(--mantine-color-dimmed)"
|
|
248
|
-
}),
|
|
249
|
-
/* @__PURE__ */ jsx(Text, {
|
|
250
|
-
c: "dimmed",
|
|
251
|
-
children: "Verification Management"
|
|
252
|
-
}),
|
|
253
|
-
/* @__PURE__ */ jsx(Text, {
|
|
254
|
-
size: "xs",
|
|
255
|
-
c: "dimmed",
|
|
256
|
-
ta: "center",
|
|
257
|
-
maw: 400,
|
|
258
|
-
children: "Verifications are automatically managed by the system. Email and SMS verification codes are generated and validated through the verification API endpoints."
|
|
259
|
-
})
|
|
260
|
-
]
|
|
261
|
-
})
|
|
262
|
-
});
|
|
263
|
-
};
|
|
264
|
-
|
|
265
244
|
//#endregion
|
|
266
245
|
//#region ../../src/admin/primitives/$uiAdmin.ts
|
|
267
246
|
/**
|
|
@@ -309,5 +288,5 @@ const AlephaUIAdmin = $module({
|
|
|
309
288
|
});
|
|
310
289
|
|
|
311
290
|
//#endregion
|
|
312
|
-
export { $uiAdmin,
|
|
291
|
+
export { $uiAdmin, AdminRouter, AlephaUIAdmin };
|
|
313
292
|
//# sourceMappingURL=index.js.map
|
package/dist/admin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/admin/AdminRouter.ts","../../src/admin/components/verifications/AdminVerifications.tsx","../../src/admin/primitives/$uiAdmin.ts","../../src/admin/index.ts"],"sourcesContent":["import type { DashboardShellProps, SidebarNode } from \"@alepha/ui\";\nimport { AuthRouter } from \"@alepha/ui/auth\";\nimport {\n IconBell,\n IconDevices,\n IconFile,\n IconHistory,\n IconKey,\n IconPlus,\n IconSettings,\n IconTerminal2,\n IconUser,\n IconUsers,\n} from \"@tabler/icons-react\";\nimport { $inject } from \"alepha\";\nimport type { AdminAuditController } from \"alepha/api/audits\";\nimport type { FileController } from \"alepha/api/files\";\nimport type { AdminJobController } from \"alepha/api/jobs\";\nimport type { AdminApiKeyController } from \"alepha/api/keys\";\nimport type { AdminNotificationController } from \"alepha/api/notifications\";\nimport type { AdminParameterController } from \"alepha/api/parameters\";\nimport type {\n AdminSessionController,\n AdminUserController,\n} from \"alepha/api/users\";\nimport { ReactAuth } from \"alepha/react/auth\";\nimport { $page, ReactRouter, Redirection } from \"alepha/react/router\";\nimport { $client } from \"alepha/server/links\";\n\nexport class AdminRouter {\n protected readonly router = $inject(ReactRouter<AdminRouter>);\n protected readonly authRouter = $inject(AuthRouter);\n protected readonly auth = $inject(ReactAuth);\n protected readonly userCtrl = $client<AdminUserController>();\n protected readonly sessionCtrl = $client<AdminSessionController>();\n protected readonly notificationCtrl = $client<AdminNotificationController>();\n protected readonly fileCtrl = $client<FileController>();\n protected readonly paramCtrl = $client<AdminParameterController>();\n protected readonly auditCtrl = $client<AdminAuditController>();\n protected readonly jobCtrl = $client<AdminJobController>();\n protected readonly apiKeyCtrl = $client<AdminApiKeyController>();\n\n public configFn?: (adminRouter: AdminRouter) => DashboardShellProps = () => {\n return {\n sidebarResizable: true,\n sidebarProps: {\n items: this.getDefaultSidebarItems(),\n },\n };\n };\n\n public getDefaultSidebarItems(): SidebarNode[] {\n return [\n {\n type: \"section\",\n label: \"Identity\",\n children: [\n {\n ...this.router.node(this.adminUsers.name),\n can: () => this.userCtrl.findUsers.can(),\n },\n {\n ...this.router.node(this.adminSessions.name),\n can: () => this.sessionCtrl.findSessions.can(),\n },\n {\n ...this.router.node(this.adminApiKeys.name),\n can: () => this.apiKeyCtrl.findApiKeys.can(),\n },\n ],\n },\n {\n type: \"section\",\n label: \"System\",\n children: [\n {\n ...this.router.node(this.adminFiles.name),\n can: () => this.fileCtrl.findFiles.can(),\n },\n {\n ...this.router.node(this.adminNotifications.name),\n can: () => this.notificationCtrl.findNotifications.can(),\n },\n {\n ...this.router.node(this.adminJobs.name),\n can: () => this.jobCtrl.getJobs.can(),\n },\n {\n ...this.router.node(this.adminAudits.name),\n can: () => this.auditCtrl.findAudits.can(),\n },\n {\n ...this.router.node(this.adminParameters.name),\n can: () => this.paramCtrl.getParameterTree.can(),\n },\n ],\n },\n { type: \"toggle\", position: \"bottom\" },\n ];\n }\n\n protected adminShellProps(): DashboardShellProps {\n if (this.configFn) {\n return this.configFn(this);\n }\n return {};\n }\n\n protected onNotAuthorized(url: URL) {\n return new Redirection(\n this.router.path(this.authRouter.login.name, {\n query: {\n r: url.pathname,\n },\n }),\n );\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Layout\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminLayout = $page({\n path: \"/admin\",\n label: \"Admin\",\n can: () => this.auth.can(\"admin:*\"),\n lazy: () => import(\"./components/AdminLayout.tsx\"),\n props: () => ({\n adminShellProps: this.adminShellProps(),\n }),\n loader: ({ user, url }) => {\n if (!user) {\n throw this.onNotAuthorized(url);\n }\n return {};\n },\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Users\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminUsers = $page({\n icon: IconUsers,\n parent: this.adminLayout,\n path: \"/users\",\n label: \"Users\",\n description: \"Manage application users and their roles.\",\n lazy: () => import(\"./components/users/AdminUsers.tsx\"),\n can: () => this.userCtrl.findUsers.can(),\n });\n\n public readonly adminUserCreate = $page({\n icon: IconPlus,\n parent: this.adminLayout,\n path: \"/users/create\",\n label: \"Create User\",\n description: \"Create a new user account\",\n lazy: () => import(\"./components/users/AdminUserCreate.tsx\"),\n can: () => this.userCtrl.createUser.can(),\n });\n\n public readonly adminUserLayout = $page({\n icon: IconUser,\n parent: this.adminLayout,\n path: \"/users/:userId\",\n label: \"User\",\n lazy: () => import(\"./components/users/AdminUserLayout.tsx\"),\n can: () => this.userCtrl.getUser.can(),\n });\n\n public readonly adminUserDetails = $page({\n parent: this.adminUserLayout,\n path: \"/details\",\n label: \"Details\",\n lazy: () => import(\"./components/users/AdminUserDetails.tsx\"),\n });\n\n public readonly adminUserSessions = $page({\n parent: this.adminUserLayout,\n path: \"/sessions\",\n label: \"Sessions\",\n lazy: () => import(\"./components/users/AdminUserSessions.tsx\"),\n });\n\n public readonly adminUserSettings = $page({\n parent: this.adminUserLayout,\n path: \"/settings\",\n label: \"Settings\",\n lazy: () => import(\"./components/users/AdminUserSettings.tsx\"),\n });\n\n public readonly adminUserAudits = $page({\n parent: this.adminUserLayout,\n path: \"/audits\",\n label: \"Audit Log\",\n lazy: () => import(\"./components/users/AdminUserAudits.tsx\"),\n can: () => this.auditCtrl.findByUser.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Audits (Global)\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminAudits = $page({\n icon: IconHistory,\n parent: this.adminLayout,\n path: \"/audits\",\n label: \"Audit Log\",\n description: \"View system-wide audit trail and activity logs.\",\n lazy: () => import(\"./components/audits/AdminAudits.tsx\"),\n can: () => this.auditCtrl.findAudits.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Sessions\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminSessions = $page({\n icon: IconDevices,\n parent: this.adminLayout,\n path: \"/sessions\",\n label: \"Sessions\",\n description: \"View and manage all active sessions.\",\n lazy: () => import(\"./components/sessions/AdminSessions.tsx\"),\n can: () => this.sessionCtrl.findSessions.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Notifications\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminNotifications = $page({\n icon: IconBell,\n parent: this.adminLayout,\n path: \"/notifications\",\n label: \"Notifications\",\n description: \"View notification history and status.\",\n lazy: () => import(\"./components/notifications/AdminNotifications.tsx\"),\n can: () => this.notificationCtrl.findNotifications.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Files\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminFiles = $page({\n icon: IconFile,\n parent: this.adminLayout,\n path: \"/files\",\n label: \"Files\",\n description: \"Manage uploaded files and storage.\",\n lazy: () => import(\"./components/files/AdminFiles.tsx\"),\n can: () => this.fileCtrl.findFiles.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Parameters\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminParameters = $page({\n icon: IconSettings,\n parent: this.adminLayout,\n path: \"/parameters\",\n label: \"Parameters\",\n description: \"View and manage application parameters.\",\n lazy: () => import(\"./components/parameters/AdminParameters.tsx\"),\n can: () => this.paramCtrl.getParameterTree.can(),\n loader: async () => {\n const treeData = await this.paramCtrl.getParameterTree({});\n return { treeData };\n },\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Jobs\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminJobs = $page({\n icon: IconTerminal2,\n parent: this.adminLayout,\n path: \"/jobs\",\n label: \"Jobs\",\n description: \"Monitor and manage background jobs and scheduled tasks.\",\n lazy: () => import(\"./components/jobs/AdminJobs.tsx\"),\n can: () => this.jobCtrl.getJobs.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // API Keys\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminApiKeys = $page({\n icon: IconKey,\n parent: this.adminLayout,\n path: \"/api-keys\",\n label: \"API Keys\",\n description: \"View and manage API keys for programmatic access.\",\n lazy: () => import(\"./components/keys/AdminApiKeys.tsx\"),\n can: () => this.apiKeyCtrl.findApiKeys.can(),\n });\n}\n","import { Flex, Text } from \"@alepha/ui\";\nimport { Stack } from \"@mantine/core\";\nimport { IconShieldCheck } from \"@tabler/icons-react\";\n\nconst AdminVerifications = () => {\n return (\n <Flex flex={1} justify=\"center\" align=\"center\">\n <Stack align=\"center\" gap=\"xs\">\n <IconShieldCheck\n size={48}\n stroke={1.5}\n color=\"var(--mantine-color-dimmed)\"\n />\n <Text c=\"dimmed\">Verification Management</Text>\n <Text size=\"xs\" c=\"dimmed\" ta=\"center\" maw={400}>\n Verifications are automatically managed by the system. Email and SMS\n verification codes are generated and validated through the\n verification API endpoints.\n </Text>\n </Stack>\n </Flex>\n );\n};\n\nexport default AdminVerifications;\n","import type { DashboardShellProps } from \"@alepha/ui\";\nimport { $context } from \"alepha\";\nimport { AdminRouter } from \"../AdminRouter.ts\";\n\n/**\n * Register Admin UI components and get the AdminRouter instance.\n */\nexport const $uiAdmin = (optsFn?: (a: AdminRouter) => DashboardShellProps) => {\n const { alepha } = $context();\n const adminRouter = alepha.inject(AdminRouter);\n\n if (optsFn) {\n adminRouter.configFn = optsFn;\n }\n\n return adminRouter;\n};\n","import { AlephaUI } from \"@alepha/ui\";\nimport { AlephaUIAuth } from \"@alepha/ui/auth\";\nimport { $module } from \"alepha\";\nimport { AdminRouter } from \"./AdminRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport { AdminRouter } from \"./AdminRouter.ts\";\n// Audits\nexport { default as AdminAudits } from \"./components/audits/AdminAudits.tsx\";\n// Files\nexport { default as AdminFiles } from \"./components/files/AdminFiles.tsx\";\n// Jobs\nexport { default as AdminJobs } from \"./components/jobs/AdminJobs.tsx\";\n// API Keys\nexport { default as AdminApiKeys } from \"./components/keys/AdminApiKeys.tsx\";\n// Notifications\nexport { default as AdminNotifications } from \"./components/notifications/AdminNotifications.tsx\";\n// Parameters\nexport { default as AdminParameters } from \"./components/parameters/AdminParameters.tsx\";\n// Sessions\nexport { default as AdminSessions } from \"./components/sessions/AdminSessions.tsx\";\n// Users\nexport { default as AdminUserAudits } from \"./components/users/AdminUserAudits.tsx\";\nexport { default as AdminUserCreate } from \"./components/users/AdminUserCreate.tsx\";\nexport { default as AdminUserDetails } from \"./components/users/AdminUserDetails.tsx\";\nexport { default as AdminUserLayout } from \"./components/users/AdminUserLayout.tsx\";\nexport { default as AdminUserSessions } from \"./components/users/AdminUserSessions.tsx\";\nexport { default as AdminUserSettings } from \"./components/users/AdminUserSettings.tsx\";\nexport { default as AdminUsers } from \"./components/users/AdminUsers.tsx\";\n// Verifications\nexport { default as AdminVerifications } from \"./components/verifications/AdminVerifications.tsx\";\nexport * from \"./primitives/$uiAdmin.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * | Stability | Since | Runtime |\n * |-----------|-------|---------|\n * | 2 - beta | 0.12.0 | node, bun, workerd, browser|\n *\n * Admin panel UI components.\n *\n * **Features:**\n * - AdminLayout for admin pages\n * - AdminUsers with user list, create, details, settings, sessions, audits\n * - AdminFiles for file management\n * - AdminJobs for job monitoring\n * - AdminNotifications for notification management\n * - AdminParameters for configuration management\n * - AdminSessions for session management\n * - AdminAudits for audit log viewing\n * - AdminVerifications for verification management\n *\n * @module alepha.ui.admin\n */\nexport const AlephaUIAdmin = $module({\n name: \"alepha.ui.admin\",\n services: [AlephaUI, AlephaUIAuth, AdminRouter],\n register: (alepha) => {\n alepha.with(AdminRouter);\n },\n});\n\n// ---------------------------------------------------------------------------------------------------------------------\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/admin/AdminRouter.ts","../../src/admin/primitives/$uiAdmin.ts","../../src/admin/index.ts"],"sourcesContent":["import type { DashboardShellProps, SidebarNode } from \"@alepha/ui\";\nimport { AuthRouter } from \"@alepha/ui/auth\";\nimport {\n IconBell,\n IconClock,\n IconDevices,\n IconFile,\n IconHistory,\n IconKey,\n IconListDetails,\n IconPlus,\n IconSettings,\n IconTerminal2,\n IconUser,\n IconUsers,\n} from \"@tabler/icons-react\";\nimport { $inject } from \"alepha\";\nimport type { AdminAuditController } from \"alepha/api/audits\";\nimport type { FileController } from \"alepha/api/files\";\nimport type { AdminJobController } from \"alepha/api/jobs\";\nimport type { AdminApiKeyController } from \"alepha/api/keys\";\nimport type { AdminNotificationController } from \"alepha/api/notifications\";\nimport type { AdminParameterController } from \"alepha/api/parameters\";\nimport type {\n AdminSessionController,\n AdminUserController,\n} from \"alepha/api/users\";\nimport { ReactAuth } from \"alepha/react/auth\";\nimport { $page, ReactRouter, Redirection } from \"alepha/react/router\";\nimport { $client } from \"alepha/server/links\";\n\nexport class AdminRouter {\n protected readonly router = $inject(ReactRouter<AdminRouter>);\n protected readonly authRouter = $inject(AuthRouter);\n protected readonly auth = $inject(ReactAuth);\n protected readonly userCtrl = $client<AdminUserController>();\n protected readonly sessionCtrl = $client<AdminSessionController>();\n protected readonly notificationCtrl = $client<AdminNotificationController>();\n protected readonly fileCtrl = $client<FileController>();\n protected readonly paramCtrl = $client<AdminParameterController>();\n protected readonly auditCtrl = $client<AdminAuditController>();\n protected readonly jobCtrl = $client<AdminJobController>();\n protected readonly apiKeyCtrl = $client<AdminApiKeyController>();\n\n public configFn?: (adminRouter: AdminRouter) => DashboardShellProps = () => {\n return {\n sidebarResizable: true,\n sidebarProps: {\n items: this.getDefaultSidebarItems(),\n },\n };\n };\n\n public getDefaultSidebarItems(): SidebarNode[] {\n return [\n {\n type: \"section\",\n label: \"Identity\",\n children: [\n {\n ...this.router.node(this.adminUsers.name),\n can: () => this.userCtrl.findUsers.can(),\n },\n {\n ...this.router.node(this.adminSessions.name),\n can: () => this.sessionCtrl.findSessions.can(),\n },\n {\n ...this.router.node(this.adminApiKeys.name),\n can: () => this.apiKeyCtrl.findApiKeys.can(),\n },\n ],\n },\n {\n type: \"section\",\n label: \"System\",\n children: [\n {\n ...this.router.node(this.adminFiles.name),\n can: () => this.fileCtrl.findFiles.can(),\n },\n {\n ...this.router.node(this.adminNotifications.name),\n can: () => this.notificationCtrl.findNotifications.can(),\n },\n {\n ...this.router.node(this.adminJobDashboard.name),\n href: undefined,\n can: () => this.jobCtrl.getRegistry.can(),\n children: [\n {\n ...this.router.node(this.adminJobDashboard.name),\n label: \"Dashboard\",\n },\n { ...this.router.node(this.adminJobRegistry.name) },\n { ...this.router.node(this.adminJobExecutions.name) },\n ],\n },\n {\n ...this.router.node(this.adminAudits.name),\n can: () => this.auditCtrl.findAudits.can(),\n },\n {\n ...this.router.node(this.adminParameters.name),\n can: () => this.paramCtrl.getParameterTree.can(),\n },\n ],\n },\n { type: \"toggle\", position: \"bottom\" },\n ];\n }\n\n protected adminShellProps(): DashboardShellProps {\n if (this.configFn) {\n return this.configFn(this);\n }\n return {};\n }\n\n protected onNotAuthorized(url: URL) {\n return new Redirection(\n this.router.path(this.authRouter.login.name, {\n query: {\n r: url.pathname,\n },\n }),\n );\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Layout\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminLayout = $page({\n path: \"/admin\",\n label: \"Admin\",\n can: () => this.auth.can(\"admin:*\"),\n lazy: () => import(\"./components/AdminLayout.tsx\"),\n props: () => ({\n adminShellProps: this.adminShellProps(),\n }),\n loader: ({ user, url }) => {\n if (!user) {\n throw this.onNotAuthorized(url);\n }\n return {};\n },\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Users\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminUsers = $page({\n icon: IconUsers,\n parent: this.adminLayout,\n path: \"/users\",\n label: \"Users\",\n description: \"Manage application users and their roles.\",\n lazy: () => import(\"./components/users/AdminUsers.tsx\"),\n can: () => this.userCtrl.findUsers.can(),\n });\n\n public readonly adminUserCreate = $page({\n icon: IconPlus,\n parent: this.adminLayout,\n path: \"/users/create\",\n label: \"Create User\",\n description: \"Create a new user account\",\n lazy: () => import(\"./components/users/AdminUserCreate.tsx\"),\n can: () => this.userCtrl.createUser.can(),\n });\n\n public readonly adminUserLayout = $page({\n icon: IconUser,\n parent: this.adminLayout,\n path: \"/users/:userId\",\n label: \"User\",\n lazy: () => import(\"./components/users/AdminUserLayout.tsx\"),\n can: () => this.userCtrl.getUser.can(),\n });\n\n public readonly adminUserDetails = $page({\n parent: this.adminUserLayout,\n path: \"/details\",\n label: \"Details\",\n lazy: () => import(\"./components/users/AdminUserDetails.tsx\"),\n });\n\n public readonly adminUserSessions = $page({\n parent: this.adminUserLayout,\n path: \"/sessions\",\n label: \"Sessions\",\n lazy: () => import(\"./components/users/AdminUserSessions.tsx\"),\n });\n\n public readonly adminUserSettings = $page({\n parent: this.adminUserLayout,\n path: \"/settings\",\n label: \"Settings\",\n lazy: () => import(\"./components/users/AdminUserSettings.tsx\"),\n });\n\n public readonly adminUserAudits = $page({\n parent: this.adminUserLayout,\n path: \"/audits\",\n label: \"Audit Log\",\n lazy: () => import(\"./components/users/AdminUserAudits.tsx\"),\n can: () => this.auditCtrl.findByUser.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Audits (Global)\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminAudits = $page({\n icon: IconHistory,\n parent: this.adminLayout,\n path: \"/audits\",\n label: \"Audit Log\",\n description: \"View system-wide audit trail and activity logs.\",\n lazy: () => import(\"./components/audits/AdminAudits.tsx\"),\n can: () => this.auditCtrl.findAudits.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Sessions\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminSessions = $page({\n icon: IconDevices,\n parent: this.adminLayout,\n path: \"/sessions\",\n label: \"Sessions\",\n description: \"View and manage all active sessions.\",\n lazy: () => import(\"./components/sessions/AdminSessions.tsx\"),\n can: () => this.sessionCtrl.findSessions.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Notifications\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminNotifications = $page({\n icon: IconBell,\n parent: this.adminLayout,\n path: \"/notifications\",\n label: \"Notifications\",\n description: \"View notification history and status.\",\n lazy: () => import(\"./components/notifications/AdminNotifications.tsx\"),\n can: () => this.notificationCtrl.findNotifications.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Files\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminFiles = $page({\n icon: IconFile,\n parent: this.adminLayout,\n path: \"/files\",\n label: \"Files\",\n description: \"Manage uploaded files and storage.\",\n lazy: () => import(\"./components/files/AdminFiles.tsx\"),\n can: () => this.fileCtrl.findFiles.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Parameters\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminParameters = $page({\n icon: IconSettings,\n parent: this.adminLayout,\n path: \"/parameters\",\n label: \"Parameters\",\n description: \"View and manage application parameters.\",\n lazy: () => import(\"./components/parameters/AdminParameters.tsx\"),\n can: () => this.paramCtrl.getParameterTree.can(),\n loader: async () => {\n const treeData = await this.paramCtrl.getParameterTree({});\n return { treeData };\n },\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Jobs\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminJobDashboard = $page({\n icon: IconTerminal2,\n parent: this.adminLayout,\n path: \"/jobs\",\n label: \"Jobs\",\n description: \"Monitor and manage background jobs and scheduled tasks.\",\n lazy: () => import(\"./components/jobs/AdminJobDashboard.tsx\"),\n can: () => this.jobCtrl.getRegistry.can(),\n });\n\n public readonly adminJobRegistry = $page({\n icon: IconListDetails,\n parent: this.adminLayout,\n path: \"/jobs/registry\",\n label: \"Registry\",\n description: \"View all registered job definitions.\",\n lazy: () => import(\"./components/jobs/AdminJobRegistry.tsx\"),\n can: () => this.jobCtrl.getRegistry.can(),\n });\n\n public readonly adminJobExecutions = $page({\n icon: IconClock,\n parent: this.adminLayout,\n path: \"/jobs/executions\",\n label: \"Executions\",\n description: \"Browse and filter job execution history.\",\n lazy: () => import(\"./components/jobs/AdminJobExecutions.tsx\"),\n can: () => this.jobCtrl.findExecutions.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // API Keys\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminApiKeys = $page({\n icon: IconKey,\n parent: this.adminLayout,\n path: \"/api-keys\",\n label: \"API Keys\",\n description: \"View and manage API keys for programmatic access.\",\n lazy: () => import(\"./components/keys/AdminApiKeys.tsx\"),\n can: () => this.apiKeyCtrl.findApiKeys.can(),\n });\n}\n","import type { DashboardShellProps } from \"@alepha/ui\";\nimport { $context } from \"alepha\";\nimport { AdminRouter } from \"../AdminRouter.ts\";\n\n/**\n * Register Admin UI components and get the AdminRouter instance.\n */\nexport const $uiAdmin = (optsFn?: (a: AdminRouter) => DashboardShellProps) => {\n const { alepha } = $context();\n const adminRouter = alepha.inject(AdminRouter);\n\n if (optsFn) {\n adminRouter.configFn = optsFn;\n }\n\n return adminRouter;\n};\n","import { AlephaUI } from \"@alepha/ui\";\nimport { AlephaUIAuth } from \"@alepha/ui/auth\";\nimport { $module } from \"alepha\";\nimport { AdminRouter } from \"./AdminRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport { AdminRouter } from \"./AdminRouter.ts\";\nexport * from \"./primitives/$uiAdmin.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * | Stability | Since | Runtime |\n * |-----------|-------|---------|\n * | 2 - beta | 0.12.0 | node, bun, workerd, browser|\n *\n * Admin panel UI components.\n *\n * **Features:**\n * - AdminLayout for admin pages\n * - AdminUsers with user list, create, details, settings, sessions, audits\n * - AdminFiles for file management\n * - AdminJobs for job monitoring\n * - AdminNotifications for notification management\n * - AdminParameters for configuration management\n * - AdminSessions for session management\n * - AdminAudits for audit log viewing\n * - AdminVerifications for verification management\n *\n * @module alepha.ui.admin\n */\nexport const AlephaUIAdmin = $module({\n name: \"alepha.ui.admin\",\n services: [AlephaUI, AlephaUIAuth, AdminRouter],\n register: (alepha) => {\n alepha.with(AdminRouter);\n },\n});\n\n// ---------------------------------------------------------------------------------------------------------------------\n"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { useAuth } from "alepha/react/auth";
|
|
|
6
6
|
import { useI18n } from "alepha/react/i18n";
|
|
7
7
|
import { IconLock, IconUser } from "@tabler/icons-react";
|
|
8
8
|
import { useRouter } from "alepha/react/router";
|
|
9
|
-
import { Card, Flex,
|
|
9
|
+
import { Card, Flex, Image, Text, Title } from "@mantine/core";
|
|
10
10
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
11
11
|
import { FormValidationError, useForm } from "alepha/react/form";
|
|
12
12
|
import { HttpError } from "alepha/server";
|
|
@@ -78,17 +78,20 @@ const Login = (props) => {
|
|
|
78
78
|
flex: 1,
|
|
79
79
|
justify: "center",
|
|
80
80
|
align: "center",
|
|
81
|
-
children: /* @__PURE__ */ jsxs(
|
|
81
|
+
children: /* @__PURE__ */ jsxs(Flex, {
|
|
82
|
+
direction: "column",
|
|
82
83
|
gap: "sm",
|
|
83
84
|
w: 360,
|
|
84
85
|
children: [/* @__PURE__ */ jsx(Card, {
|
|
85
86
|
withBorder: true,
|
|
86
87
|
p: "lg",
|
|
87
88
|
bg: "var(--alepha-elevated)",
|
|
88
|
-
children: /* @__PURE__ */ jsxs(
|
|
89
|
+
children: /* @__PURE__ */ jsxs(Flex, {
|
|
90
|
+
direction: "column",
|
|
89
91
|
gap: "md",
|
|
90
92
|
children: [
|
|
91
|
-
(settings.logoUrl || settings.displayName || settings.description) && /* @__PURE__ */ jsxs(
|
|
93
|
+
(settings.logoUrl || settings.displayName || settings.description) && /* @__PURE__ */ jsxs(Flex, {
|
|
94
|
+
direction: "column",
|
|
92
95
|
gap: "xs",
|
|
93
96
|
align: "center",
|
|
94
97
|
mb: "xs",
|
|
@@ -115,7 +118,8 @@ const Login = (props) => {
|
|
|
115
118
|
}),
|
|
116
119
|
credentialsProvider && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("form", {
|
|
117
120
|
...form.props,
|
|
118
|
-
children: /* @__PURE__ */ jsxs(
|
|
121
|
+
children: /* @__PURE__ */ jsxs(Flex, {
|
|
122
|
+
direction: "column",
|
|
119
123
|
flex: 1,
|
|
120
124
|
gap: "md",
|
|
121
125
|
children: [
|
|
@@ -147,7 +151,7 @@ const Login = (props) => {
|
|
|
147
151
|
children: tr("loginForgotPassword")
|
|
148
152
|
})
|
|
149
153
|
})] }),
|
|
150
|
-
showOrDivider && /* @__PURE__ */ jsxs(
|
|
154
|
+
showOrDivider && /* @__PURE__ */ jsxs(Flex, {
|
|
151
155
|
align: "center",
|
|
152
156
|
justify: "center",
|
|
153
157
|
gap: "md",
|
|
@@ -169,7 +173,8 @@ const Login = (props) => {
|
|
|
169
173
|
})
|
|
170
174
|
]
|
|
171
175
|
}),
|
|
172
|
-
externalLoginMethods.length > 0 && /* @__PURE__ */ jsx(
|
|
176
|
+
externalLoginMethods.length > 0 && /* @__PURE__ */ jsx(Flex, {
|
|
177
|
+
direction: "column",
|
|
173
178
|
gap: "sm",
|
|
174
179
|
children: externalLoginMethods.map((method) => /* @__PURE__ */ jsx(ActionButton, {
|
|
175
180
|
variant: "default",
|
|
@@ -211,4 +216,4 @@ const leftSection = (name) => {
|
|
|
211
216
|
|
|
212
217
|
//#endregion
|
|
213
218
|
export { Login_exports as n, Login as t };
|
|
214
|
-
//# sourceMappingURL=Login-
|
|
219
|
+
//# sourceMappingURL=Login-BS_FYTy0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Login-BS_FYTy0.js","names":[],"sources":["../../src/auth/components/Login.tsx"],"sourcesContent":["import { ActionButton, Control, capitalize } from \"@alepha/ui\";\nimport { Card, Flex, Image, Text, Title } from \"@mantine/core\";\nimport { IconLock, IconUser } from \"@tabler/icons-react\";\nimport { AlephaError, t } from \"alepha\";\nimport type { RealmConfig } from \"alepha/api/users\";\nimport { useAuth } from \"alepha/react/auth\";\nimport { FormValidationError, useForm } from \"alepha/react/form\";\nimport { useI18n } from \"alepha/react/i18n\";\nimport { useRouter } from \"alepha/react/router\";\nimport { HttpError } from \"alepha/server\";\nimport { useMemo } from \"react\";\nimport type { AuthI18n } from \"../AuthI18n.ts\";\nimport type { AuthRouter } from \"../AuthRouter.ts\";\nimport IconGithub from \"./icons/IconGithub.tsx\";\nimport IconGoogle from \"./icons/IconGoogle.tsx\";\n\nexport interface LoginProps {\n realmConfig: RealmConfig;\n}\n\nconst Login = (props: LoginProps) => {\n const auth = useAuth();\n const router = useRouter<AuthRouter>();\n const { tr } = useI18n<AuthI18n, \"en\">();\n const redirect = router.query.r || \"/\";\n\n const credentialsProvider = props.realmConfig.authenticationMethods.find(\n (it) => it.type === \"CREDENTIALS\",\n );\n\n const settings = props.realmConfig.settings;\n\n // Determine what login methods are available\n const loginMethods = useMemo(() => {\n const methods = [];\n if (settings.usernameEnabled !== false) methods.push(\"username\");\n if (settings.emailEnabled !== false) methods.push(\"email\");\n if (settings.phoneEnabled === true) methods.push(\"phone\");\n return methods;\n }, [settings]);\n\n // Create identifier title based on enabled methods\n const identifierTitle = useMemo(() => {\n if (loginMethods.length === 0) return tr(\"loginUsername\");\n if (loginMethods.length === 1) {\n if (loginMethods[0] === \"username\") return tr(\"loginUsername\");\n if (loginMethods[0] === \"email\") return tr(\"loginEmail\");\n if (loginMethods[0] === \"phone\") return tr(\"loginPhone\");\n }\n const labels = loginMethods.map((m) => {\n if (m === \"username\") return tr(\"loginUsername\").toLowerCase();\n if (m === \"email\") return tr(\"loginEmail\").toLowerCase();\n if (m === \"phone\") return tr(\"loginPhone\").toLowerCase();\n return m;\n });\n return capitalize(\n `${labels.slice(0, -1).join(\", \")} or ${labels[labels.length - 1]}`,\n );\n }, [loginMethods, tr]);\n\n const form = useForm({\n schema: t.object({\n identifier: t.string({\n minLength: 1,\n }),\n password: t.string({\n minLength: settings.passwordPolicy?.minLength || 6,\n }),\n }),\n handler: async (data) => {\n if (!credentialsProvider) {\n throw new AlephaError(\"Credentials provider not configured\");\n }\n\n try {\n await auth.login(credentialsProvider.name, {\n username: data.identifier,\n password: data.password,\n realm: props.realmConfig.realmName,\n });\n await router.push(router.query.r || \"/\");\n } catch (error) {\n if (\n error instanceof HttpError &&\n error.error === \"InvalidCredentialsError\"\n ) {\n throw new FormValidationError({\n message: \"Invalid identifier or password\",\n path: \"/password\",\n });\n }\n throw error;\n }\n },\n });\n\n const getAutoCompleteType = () => {\n if (loginMethods.includes(\"email\")) {\n return \"email\";\n }\n if (loginMethods.includes(\"username\")) {\n return \"username\";\n }\n if (loginMethods.includes(\"phone\")) {\n return \"tel\";\n }\n return \"username\";\n };\n\n const externalLoginMethods = props.realmConfig.authenticationMethods.filter(\n (method) => method.type !== \"CREDENTIALS\",\n );\n\n const showOrDivider = credentialsProvider && externalLoginMethods.length > 0;\n\n return (\n <Flex flex={1} justify={\"center\"} align={\"center\"}>\n <Flex direction=\"column\" gap={\"sm\"} w={360}>\n <Card withBorder p={\"lg\"} bg={\"var(--alepha-elevated)\"}>\n <Flex direction=\"column\" gap={\"md\"}>\n {/* Realm branding */}\n {(settings.logoUrl ||\n settings.displayName ||\n settings.description) && (\n <Flex direction=\"column\" gap={\"xs\"} align=\"center\" mb=\"xs\">\n {settings.logoUrl && (\n <Image\n src={settings.logoUrl}\n alt={settings.displayName || props.realmConfig.realmName}\n h={48}\n w=\"auto\"\n fit=\"contain\"\n />\n )}\n {settings.displayName && (\n <Title order={4} ta=\"center\">\n {settings.displayName}\n </Title>\n )}\n {settings.description && (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\">\n {settings.description}\n </Text>\n )}\n </Flex>\n )}\n\n {/* Credentials login form */}\n {credentialsProvider && (\n <>\n <form {...form.props}>\n <Flex direction=\"column\" flex={1} gap={\"md\"}>\n <Control\n title={identifierTitle}\n input={form.input.identifier}\n icon={IconUser}\n text={{\n autoComplete: getAutoCompleteType(),\n }}\n />\n <Control\n title={tr(\"loginPassword\")}\n input={form.input.password}\n icon={IconLock}\n password={{\n autoComplete: \"current-password\",\n }}\n />\n <ActionButton variant={\"filled\"} form={form}>\n {tr(\"loginSignIn\")}\n </ActionButton>\n </Flex>\n </form>\n {settings.resetPasswordAllowed && (\n <Text size=\"sm\" ta=\"center\">\n <ActionButton\n href={router.path(\"resetPassword\", {\n query: { realm: props.realmConfig.realmName },\n })}\n anchorProps={{ inherit: true }}\n >\n {tr(\"loginForgotPassword\")}\n </ActionButton>\n </Text>\n )}\n </>\n )}\n\n {/* OR divider - only when both credentials AND external methods exist */}\n {showOrDivider && (\n <Flex align=\"center\" justify=\"center\" gap={\"md\"}>\n <Flex flex={1} h={\"1px\"} bg={\"var(--alepha-border)\"} />\n <Text size=\"xs\" c={\"dimmed\"}>\n {tr(\"loginOr\")}\n </Text>\n <Flex flex={1} h={\"1px\"} bg={\"var(--alepha-border)\"} />\n </Flex>\n )}\n\n {/* External login methods */}\n {externalLoginMethods.length > 0 && (\n <Flex direction=\"column\" gap={\"sm\"}>\n {externalLoginMethods.map((method) => (\n <ActionButton\n variant={\"default\"}\n key={method.type}\n leftSection={leftSection(method.name.toLowerCase())}\n onClick={() =>\n auth.login(method.name, {\n redirect,\n realm: props.realmConfig.realmName,\n })\n }\n >\n {tr(\"loginContinueWith\", {\n args: [capitalize(method.name)],\n })}\n </ActionButton>\n ))}\n </Flex>\n )}\n\n {/* Registration link */}\n {settings.registrationAllowed && (\n <Text size=\"sm\" ta=\"center\">\n {tr(\"loginNoAccount\")}{\" \"}\n <ActionButton\n href={router.path(\"register\", {\n query: { realm: props.realmConfig.realmName },\n })}\n anchorProps={{ inherit: true }}\n >\n {tr(\"loginSignUp\")}\n </ActionButton>\n </Text>\n )}\n </Flex>\n </Card>\n <ActionButton variant={\"subtle\"} href={\"/\"}>\n {tr(\"loginCancel\")}\n </ActionButton>\n </Flex>\n </Flex>\n );\n};\n\nexport default Login;\n\nconst leftSection = (name: string) => {\n if (name === \"google\") {\n return <IconGoogle />;\n }\n\n if (name === \"github\") {\n return <IconGithub />;\n }\n};\n"],"mappings":"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"}
|