@alepha/ui 0.18.2 → 0.19.0
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-BJhIwfD6.js → AdminApiKeys-Bt1PjO6o.js} +3 -4
- package/dist/admin/{AdminApiKeys-BJhIwfD6.js.map → AdminApiKeys-Bt1PjO6o.js.map} +1 -1
- package/dist/admin/{AdminAudits-DzD_4cDt.js → AdminAudits-C7c1CN4c.js} +3 -4
- package/dist/admin/{AdminAudits-DzD_4cDt.js.map → AdminAudits-C7c1CN4c.js.map} +1 -1
- package/dist/admin/{AdminDashboard-C92tIc6x.js → AdminDashboard-C3RXpTp6.js} +3 -4
- package/dist/admin/{AdminDashboard-C92tIc6x.js.map → AdminDashboard-C3RXpTp6.js.map} +1 -1
- package/dist/admin/{AdminFiles-DLpfhBkf.js → AdminFiles-31ivR6Wq.js} +3 -4
- package/dist/admin/{AdminFiles-DLpfhBkf.js.map → AdminFiles-31ivR6Wq.js.map} +1 -1
- package/dist/admin/{AdminJobDashboard-KIOkeMgE.js → AdminJobDashboard-BABLe7hL.js} +73 -25
- package/dist/admin/AdminJobDashboard-BABLe7hL.js.map +1 -0
- package/dist/admin/{AdminJobExecutions-D0Yo_PU0.js → AdminJobExecutions-D-G8RIlr.js} +3 -4
- package/dist/admin/{AdminJobExecutions-D0Yo_PU0.js.map → AdminJobExecutions-D-G8RIlr.js.map} +1 -1
- package/dist/admin/{AdminJobRegistry-PFajqaGK.js → AdminJobRegistry-oIS3K9NX.js} +3 -4
- package/dist/admin/{AdminJobRegistry-PFajqaGK.js.map → AdminJobRegistry-oIS3K9NX.js.map} +1 -1
- package/dist/admin/{AdminLayout-B1DXZHDn.js → AdminLayout-BmZ9mtXh.js} +8 -25
- package/dist/admin/AdminLayout-BmZ9mtXh.js.map +1 -0
- package/dist/admin/AdminNotifications-DHdzksww.js +541 -0
- package/dist/admin/AdminNotifications-DHdzksww.js.map +1 -0
- package/dist/admin/{AdminParameters-BspPeqp_.js → AdminParameters-CyZQSXnN.js} +118 -112
- package/dist/admin/AdminParameters-CyZQSXnN.js.map +1 -0
- package/dist/admin/{AdminSessions-BnH5CZQl.js → AdminSessions--xwELDSO.js} +3 -4
- package/dist/admin/{AdminSessions-BnH5CZQl.js.map → AdminSessions--xwELDSO.js.map} +1 -1
- package/dist/admin/{AdminUserLayout-DUbC6-BI.js → AdminUserLayout-DvBTG5gd.js} +82 -115
- package/dist/admin/AdminUserLayout-DvBTG5gd.js.map +1 -0
- package/dist/admin/{AdminUserProfile-DuTUnjdG.js → AdminUserProfile-CzsPBl6Z.js} +7 -6
- package/dist/admin/AdminUserProfile-CzsPBl6Z.js.map +1 -0
- package/dist/admin/{AdminUserSessions-DvZdAGpL.js → AdminUserSessions-C-aUnhVN.js} +3 -4
- package/dist/admin/{AdminUserSessions-DvZdAGpL.js.map → AdminUserSessions-C-aUnhVN.js.map} +1 -1
- package/dist/admin/{AdminUsers-CR9z0g_5.js → AdminUsers-BYwei5sj.js} +4 -4
- package/dist/admin/AdminUsers-BYwei5sj.js.map +1 -0
- package/dist/admin/{AuthLayout-DsUfp9RG.js → AuthLayout-CkPGLJku.js} +3 -4
- package/dist/admin/{AuthLayout-DsUfp9RG.js.map → AuthLayout-CkPGLJku.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-DSBqNsZc.js +274 -0
- package/dist/admin/Login-DSBqNsZc.js.map +1 -0
- package/dist/admin/{Profile-B2EcIDB9.js → Profile-CDRjJo0P.js} +31 -29
- package/dist/admin/Profile-CDRjJo0P.js.map +1 -0
- package/dist/admin/{Register-Z3fxRbUF.js → Register-4QGFOnfh.js} +201 -146
- package/dist/admin/Register-4QGFOnfh.js.map +1 -0
- package/dist/admin/{ResetPassword-_Y1qTTKh.js → ResetPassword-Gxc9L_mY.js} +9 -10
- package/dist/admin/ResetPassword-Gxc9L_mY.js.map +1 -0
- package/dist/admin/{VerifyEmail-Bg22bwcC.js → VerifyEmail-D7G5NnaN.js} +25 -11
- package/dist/admin/VerifyEmail-D7G5NnaN.js.map +1 -0
- package/dist/admin/adminUserAtom-DCi4wf-v.js +11 -0
- package/dist/admin/adminUserAtom-DCi4wf-v.js.map +1 -0
- package/dist/admin/{core-BVO_TQxb.js → core-D1AbU50V.js} +662 -570
- package/dist/admin/core-D1AbU50V.js.map +1 -0
- package/dist/admin/index.d.ts +141 -53
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +67 -49
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/rolldown-runtime-CiIaOW0V.js +13 -0
- package/dist/{demo/AuthLayout-DN-ClJQk.js → auth/AuthLayout-CfRKcTqP.js} +3 -4
- package/dist/auth/{AuthLayout-C161NeF6.js.map → AuthLayout-CfRKcTqP.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-DJyweoPS.js +274 -0
- package/dist/auth/Login-DJyweoPS.js.map +1 -0
- package/dist/auth/{Profile-BMpXJ0oi.js → Profile-Cy93pNTw.js} +31 -29
- package/dist/auth/Profile-Cy93pNTw.js.map +1 -0
- package/dist/auth/{Register-2gx8qll-.js → Register-CSqzzitW.js} +201 -146
- package/dist/auth/Register-CSqzzitW.js.map +1 -0
- package/dist/{demo/ResetPassword-CAPj8MO3.js → auth/ResetPassword-B61QPlQi.js} +9 -10
- package/dist/auth/ResetPassword-B61QPlQi.js.map +1 -0
- package/dist/{demo/VerifyEmail-DFmdCdYs.js → auth/VerifyEmail-CqBJ11id.js} +25 -11
- package/dist/auth/VerifyEmail-CqBJ11id.js.map +1 -0
- package/dist/auth/{core-DyfeVr5c.js → core-C6D3pazL.js} +403 -343
- package/dist/auth/core-C6D3pazL.js.map +1 -0
- package/dist/auth/index.d.ts +93 -54
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +30 -31
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/rolldown-runtime-CiIaOW0V.js +13 -0
- package/dist/core/index.d.ts +123 -62
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +878 -776
- package/dist/core/index.js.map +1 -1
- package/dist/{auth/AuthLayout-C161NeF6.js → demo/AuthLayout-Dq5tSLSc.js} +3 -4
- package/dist/demo/{AuthLayout-DN-ClJQk.js.map → AuthLayout-Dq5tSLSc.js.map} +1 -1
- package/dist/demo/DemoButton-_Ws2w-J0.js +181 -0
- package/dist/demo/DemoButton-_Ws2w-J0.js.map +1 -0
- package/dist/demo/DemoControlSelect-ChP4ZOpQ.js +304 -0
- package/dist/demo/DemoControlSelect-ChP4ZOpQ.js.map +1 -0
- package/dist/demo/DemoDataTable-Hwf_UUni.js +361 -0
- package/dist/demo/DemoDataTable-Hwf_UUni.js.map +1 -0
- package/dist/demo/{DemoDialog-DW8QEvD1.js → DemoDialog-B01OMVRd.js} +3 -4
- package/dist/demo/{DemoDialog-DW8QEvD1.js.map → DemoDialog-B01OMVRd.js.map} +1 -1
- package/dist/demo/{DemoFlex-CAhLUanT.js → DemoFlex-870PEl0V.js} +4 -5
- package/dist/demo/{DemoFlex-CAhLUanT.js.map → DemoFlex-870PEl0V.js.map} +1 -1
- package/dist/demo/{DemoHeading-yIFmNjHB.js → DemoHeading-C1YR27fz.js} +4 -5
- package/dist/demo/{DemoHeading-yIFmNjHB.js.map → DemoHeading-C1YR27fz.js.map} +1 -1
- package/dist/demo/{DemoHome-BSGuBHus.js → DemoHome-DRbL2eGf.js} +4 -5
- package/dist/demo/{DemoHome-BSGuBHus.js.map → DemoHome-DRbL2eGf.js.map} +1 -1
- package/dist/demo/{DemoJsonViewer-DsA2IpgV.js → DemoJsonViewer-DoABiqBW.js} +4 -5
- package/dist/demo/{DemoJsonViewer-DsA2IpgV.js.map → DemoJsonViewer-DoABiqBW.js.map} +1 -1
- package/dist/demo/{DemoLayout-Cy6xjn6P.js → DemoLayout-CN_PDCX2.js} +16 -8
- package/dist/demo/DemoLayout-CN_PDCX2.js.map +1 -0
- package/dist/demo/{DemoLogin-vqxgTu4P.js → DemoLogin-B5x-ug3Q.js} +51 -35
- package/dist/demo/DemoLogin-B5x-ug3Q.js.map +1 -0
- package/dist/demo/{DemoRegister-YHPvPg77.js → DemoRegister-Q6sg2xuV.js} +51 -53
- package/dist/demo/DemoRegister-Q6sg2xuV.js.map +1 -0
- package/dist/demo/{DemoResetPassword-mOW18Zlm.js → DemoResetPassword-DrqZfmEw.js} +14 -19
- package/dist/demo/DemoResetPassword-DrqZfmEw.js.map +1 -0
- package/dist/demo/{DemoSidebar-od7aLjP_.js → DemoSidebar-CfKS6w1o.js} +4 -5
- package/dist/demo/{DemoSidebar-od7aLjP_.js.map → DemoSidebar-CfKS6w1o.js.map} +1 -1
- package/dist/demo/{DemoText-DU3JeRS0.js → DemoText-pT6Gi5b5.js} +4 -5
- package/dist/demo/{DemoText-DU3JeRS0.js.map → DemoText-pT6Gi5b5.js.map} +1 -1
- package/dist/demo/{DemoToast-CUJEiPRa.js → DemoToast-I13NBzQQ.js} +3 -4
- package/dist/demo/{DemoToast-CUJEiPRa.js.map → DemoToast-I13NBzQQ.js.map} +1 -1
- package/dist/demo/{DemoTypeForm-C1dNkahD.js → DemoTypeForm-BqzcrtvN.js} +9 -6
- package/dist/demo/DemoTypeForm-BqzcrtvN.js.map +1 -0
- package/dist/demo/DemoVerifyEmail-HwD8xfQw.js +33 -0
- package/dist/demo/DemoVerifyEmail-HwD8xfQw.js.map +1 -0
- 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-CqG1iJbn.js +274 -0
- package/dist/demo/Login-CqG1iJbn.js.map +1 -0
- package/dist/demo/{Profile-BE_Y3co2.js → Profile-C0ojJCaG.js} +31 -29
- package/dist/demo/Profile-C0ojJCaG.js.map +1 -0
- package/dist/demo/{Register-fXHmBpr3.js → Register-KKZwr_lL.js} +201 -146
- package/dist/demo/Register-KKZwr_lL.js.map +1 -0
- package/dist/{auth/ResetPassword-DBxt9hKk.js → demo/ResetPassword-DMrLFEtr.js} +9 -10
- package/dist/demo/ResetPassword-DMrLFEtr.js.map +1 -0
- package/dist/demo/{Showcase-BtEU0pY9.js → Showcase-D49Wud2v.js} +65 -68
- package/dist/demo/Showcase-D49Wud2v.js.map +1 -0
- package/dist/{auth/VerifyEmail-Z80Ubajk.js → demo/VerifyEmail-BFCAFz6T.js} +25 -11
- package/dist/demo/VerifyEmail-BFCAFz6T.js.map +1 -0
- package/dist/demo/{auth-Djd7SKiw.js → auth-D9qTZzCa.js} +18 -35
- package/dist/demo/{auth-Djd7SKiw.js.map → auth-D9qTZzCa.js.map} +1 -1
- package/dist/demo/{core-B7LNjM78.js → core-DRtQklr3.js} +752 -647
- package/dist/demo/core-DRtQklr3.js.map +1 -0
- package/dist/demo/index.d.ts +1 -0
- package/dist/demo/index.d.ts.map +1 -1
- package/dist/demo/index.js +25 -22
- package/dist/demo/index.js.map +1 -1
- package/dist/demo/rolldown-runtime-CiIaOW0V.js +13 -0
- package/package.json +19 -19
- package/src/admin/AdminRouter.tsx +42 -2
- package/src/admin/atoms/adminUserAtom.ts +7 -0
- package/src/admin/components/AdminLayout.tsx +2 -14
- package/src/admin/components/jobs/AdminJobDashboard.tsx +51 -20
- package/src/admin/components/notifications/AdminNotifications.tsx +519 -0
- package/src/admin/components/parameters/ParameterDetails.tsx +12 -270
- package/src/admin/components/parameters/ParameterDetailsConfigForm.tsx +238 -0
- package/src/admin/components/parameters/ParameterDetailsLoading.tsx +24 -0
- package/src/admin/components/parameters/ParameterHistory.tsx +10 -11
- package/src/admin/components/parameters/ParameterTree.tsx +28 -184
- package/src/admin/components/parameters/ParameterTreeNode.tsx +151 -0
- package/src/admin/components/shared/AdminResourceHeader.tsx +2 -25
- package/src/admin/components/shared/AdminResourceHeaderMenuItem.tsx +37 -0
- package/src/admin/components/shared/AdminResourceTabs.tsx +2 -26
- package/src/admin/components/shared/AdminResourceTabsItem.tsx +36 -0
- 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/auth/components/Login.tsx +188 -121
- package/src/auth/components/Profile.tsx +1 -22
- package/src/auth/components/ProfileField.tsx +39 -0
- package/src/auth/components/Register.tsx +215 -158
- package/src/auth/components/ResetPassword.tsx +7 -11
- package/src/auth/components/VerifyEmail.tsx +35 -10
- package/src/auth/components/buttons/UserButton.tsx +19 -21
- package/src/auth/index.ts +1 -0
- package/src/core/components/Flex.tsx +34 -0
- package/src/core/components/buttons/ActionButton.tsx +105 -78
- package/src/core/components/data/DetailDrawer.tsx +102 -96
- package/src/core/components/data/DetailList.tsx +2 -1
- package/src/core/components/dialogs/PromptDialog.tsx +1 -1
- package/src/core/components/layout/Breadcrumb.tsx +4 -7
- package/src/core/components/layout/DashboardShell.tsx +18 -4
- package/src/core/components/layout/Sidebar.tsx +16 -241
- package/src/core/components/layout/SidebarCollapsedItem.tsx +91 -0
- package/src/core/components/layout/SidebarItem.tsx +146 -0
- package/src/core/components/layout/index.ts +3 -1
- package/src/core/form/components/Control.tsx +31 -29
- package/src/core/form/components/ControlArray.tsx +13 -39
- package/src/core/form/components/ControlDate.tsx +10 -21
- package/src/core/form/components/ControlNumber.tsx +4 -33
- package/src/core/form/components/ControlQueryBuilder.tsx +12 -175
- package/src/core/form/components/ControlQueryBuilderHelp.tsx +165 -0
- package/src/core/form/components/ControlSelect.browser.spec.tsx +343 -0
- package/src/core/form/components/ControlSelect.tsx +294 -92
- package/src/core/form/components/TypeForm.browser.spec.tsx +3 -3
- package/src/core/form/components/TypeForm.tsx +5 -2
- package/src/core/form/index.ts +8 -1
- package/src/core/form/utils/parseInput.ts +7 -3
- package/src/core/index.ts +3 -1
- package/src/core/json/components/JsonViewer.tsx +103 -319
- package/src/core/json/components/JsonViewerCopyButton.tsx +46 -0
- package/src/core/json/components/JsonViewerRowNode.tsx +120 -0
- package/src/core/json/components/JsonViewerShared.ts +76 -0
- package/src/core/services/DialogService.tsx +2 -2
- package/src/core/styles.css +13 -2
- package/src/core/table/components/ColumnPicker.tsx +3 -3
- package/src/core/table/components/DataTable.tsx +88 -29
- package/src/core/table/components/DataTableFilters.tsx +6 -11
- package/src/core/table/components/DataTablePagination.tsx +9 -3
- package/src/core/table/components/DataTableToolbar.tsx +7 -3
- package/src/core/table/components/FilterPicker.tsx +3 -3
- package/src/core/table/interfaces/types.ts +29 -0
- package/src/core/utils/icons.tsx +2 -2
- package/src/demo/DemoRouter.ts +8 -1
- package/src/demo/components/DemoLayout.tsx +12 -2
- package/src/demo/components/auth/DemoLogin.tsx +35 -28
- package/src/demo/components/auth/DemoRegister.tsx +35 -49
- package/src/demo/components/auth/DemoResetPassword.tsx +5 -9
- package/src/demo/components/auth/DemoVerifyEmail.tsx +7 -6
- package/src/demo/components/core/DemoButton.tsx +123 -103
- package/src/demo/components/core/DemoControlSelect.tsx +325 -0
- package/src/demo/components/core/DemoDataTable.tsx +255 -237
- package/src/demo/components/core/DemoTypeForm.tsx +7 -2
- package/src/demo/components/shared/MacWindow.tsx +5 -11
- package/src/demo/components/shared/Showcase.tsx +28 -42
- package/dist/admin/AdminJobDashboard-KIOkeMgE.js.map +0 -1
- package/dist/admin/AdminLayout-B1DXZHDn.js.map +0 -1
- package/dist/admin/AdminParameters-BspPeqp_.js.map +0 -1
- package/dist/admin/AdminUserLayout-DUbC6-BI.js.map +0 -1
- package/dist/admin/AdminUserProfile-DuTUnjdG.js.map +0 -1
- package/dist/admin/AdminUsers-CR9z0g_5.js.map +0 -1
- package/dist/admin/Login-DHbYJKwg.js +0 -219
- package/dist/admin/Login-DHbYJKwg.js.map +0 -1
- package/dist/admin/Profile-B2EcIDB9.js.map +0 -1
- package/dist/admin/Register-Z3fxRbUF.js.map +0 -1
- package/dist/admin/ResetPassword-_Y1qTTKh.js.map +0 -1
- package/dist/admin/VerifyEmail-Bg22bwcC.js.map +0 -1
- package/dist/admin/core-BVO_TQxb.js.map +0 -1
- package/dist/admin/rolldown-runtime-CjeV3_4I.js +0 -18
- package/dist/auth/Login-C7jIqf00.js +0 -219
- package/dist/auth/Login-C7jIqf00.js.map +0 -1
- package/dist/auth/Profile-BMpXJ0oi.js.map +0 -1
- package/dist/auth/Register-2gx8qll-.js.map +0 -1
- package/dist/auth/ResetPassword-DBxt9hKk.js.map +0 -1
- package/dist/auth/VerifyEmail-Z80Ubajk.js.map +0 -1
- package/dist/auth/core-DyfeVr5c.js.map +0 -1
- package/dist/auth/rolldown-runtime-CjeV3_4I.js +0 -18
- package/dist/demo/DemoButton-CGUyR9eM.js +0 -178
- package/dist/demo/DemoButton-CGUyR9eM.js.map +0 -1
- package/dist/demo/DemoDataTable-QFG-xXSx.js +0 -358
- package/dist/demo/DemoDataTable-QFG-xXSx.js.map +0 -1
- package/dist/demo/DemoLayout-Cy6xjn6P.js.map +0 -1
- package/dist/demo/DemoLogin-vqxgTu4P.js.map +0 -1
- package/dist/demo/DemoRegister-YHPvPg77.js.map +0 -1
- package/dist/demo/DemoResetPassword-mOW18Zlm.js.map +0 -1
- package/dist/demo/DemoTypeForm-C1dNkahD.js.map +0 -1
- package/dist/demo/DemoVerifyEmail-D9EcXZ38.js +0 -30
- package/dist/demo/DemoVerifyEmail-D9EcXZ38.js.map +0 -1
- package/dist/demo/Login-CoYf_P_F.js +0 -219
- package/dist/demo/Login-CoYf_P_F.js.map +0 -1
- package/dist/demo/Profile-BE_Y3co2.js.map +0 -1
- package/dist/demo/Register-fXHmBpr3.js.map +0 -1
- package/dist/demo/ResetPassword-CAPj8MO3.js.map +0 -1
- package/dist/demo/Showcase-BtEU0pY9.js.map +0 -1
- package/dist/demo/VerifyEmail-DFmdCdYs.js.map +0 -1
- package/dist/demo/core-B7LNjM78.js.map +0 -1
- package/dist/demo/rolldown-runtime-CjeV3_4I.js +0 -18
- package/src/demo/styles.css +0 -0
package/dist/admin/index.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { _ as ActionButton, c as
|
|
2
|
-
import "./IconGoogle-
|
|
3
|
-
import "./Login-
|
|
4
|
-
import "./Register-
|
|
5
|
-
import "./ResetPassword-
|
|
6
|
-
import "./VerifyEmail-
|
|
1
|
+
import { _ as ActionButton, c as Breadcrumbs, h as LanguageButton, p as ThemeButton, t as AlephaUI, v as ui, x as alephaSidebarAtom } from "./core-D1AbU50V.js";
|
|
2
|
+
import "./IconGoogle-8Nkx6yax.js";
|
|
3
|
+
import "./Login-DSBqNsZc.js";
|
|
4
|
+
import "./Register-4QGFOnfh.js";
|
|
5
|
+
import "./ResetPassword-Gxc9L_mY.js";
|
|
6
|
+
import "./VerifyEmail-D7G5NnaN.js";
|
|
7
7
|
import { $context, $inject, $module, AlephaError, t } from "alepha";
|
|
8
8
|
import { $dictionary, AlephaReactI18n } from "alepha/react/i18n";
|
|
9
9
|
import { $cookie } from "alepha/server/cookies";
|
|
10
10
|
import { Avatar } from "@mantine/core";
|
|
11
11
|
import { jsx } from "react/jsx-runtime";
|
|
12
|
-
import { IconClock, IconDashboard, IconDevices, IconFile, IconHistory, IconKey, IconLayoutDashboard, IconListDetails, IconLockPassword, IconLogin2, IconLogout, IconLogout2, IconMailCheck, IconPasswordUser, IconSettings, IconTerminal2, IconUser, IconUserPlus, IconUsers } from "@tabler/icons-react";
|
|
12
|
+
import { IconBell, IconClock, IconDashboard, IconDevices, IconFile, IconHistory, IconKey, IconLayoutDashboard, IconListDetails, IconLockPassword, IconLogin2, IconLogout, IconLogout2, IconMailCheck, IconPasswordUser, IconSettings, IconTerminal2, IconUser, IconUserPlus, IconUsers } from "@tabler/icons-react";
|
|
13
13
|
import { $page, ReactPageProvider, ReactRouter, Redirection, useRouter } from "alepha/react/router";
|
|
14
14
|
import { useClient, useInject } from "alepha/react";
|
|
15
|
+
import { $secure } from "alepha/security";
|
|
15
16
|
import { AlephaReactAuth, ReactAuth, useAuth } from "alepha/react/auth";
|
|
16
17
|
import { $client } from "alepha/server/links";
|
|
17
|
-
|
|
18
18
|
//#region ../../src/auth/AuthI18n.ts
|
|
19
19
|
var AuthI18n = class {
|
|
20
20
|
en = $dictionary({
|
|
@@ -131,7 +131,6 @@ var AuthI18n = class {
|
|
|
131
131
|
verifyEmailBackToSignIn: "Retour à la connexion"
|
|
132
132
|
} }) });
|
|
133
133
|
};
|
|
134
|
-
|
|
135
134
|
//#endregion
|
|
136
135
|
//#region ../../src/auth/AuthRouter.ts
|
|
137
136
|
/**
|
|
@@ -147,7 +146,7 @@ var AuthRouter = class {
|
|
|
147
146
|
authLayout = $page({
|
|
148
147
|
label: "Auth",
|
|
149
148
|
path: "/auth",
|
|
150
|
-
lazy: () => import("./AuthLayout-
|
|
149
|
+
lazy: () => import("./AuthLayout-CkPGLJku.js"),
|
|
151
150
|
children: () => [
|
|
152
151
|
this.login,
|
|
153
152
|
this.register,
|
|
@@ -162,7 +161,7 @@ var AuthRouter = class {
|
|
|
162
161
|
description: "Sign in to your account",
|
|
163
162
|
path: "/login",
|
|
164
163
|
schema: { query: realmQuerySchema },
|
|
165
|
-
lazy: () => import("./Login-
|
|
164
|
+
lazy: () => import("./Login-DSBqNsZc.js").then((n) => n.t),
|
|
166
165
|
loader: async ({ query, user }) => {
|
|
167
166
|
if (user) throw new Redirection(query.r || "/");
|
|
168
167
|
return { realmConfig: await this.loadRealmConfig(query.realm) };
|
|
@@ -174,7 +173,7 @@ var AuthRouter = class {
|
|
|
174
173
|
description: "Create a new account",
|
|
175
174
|
path: "/register",
|
|
176
175
|
schema: { query: realmQuerySchema },
|
|
177
|
-
lazy: () => import("./Register-
|
|
176
|
+
lazy: () => import("./Register-4QGFOnfh.js").then((n) => n.t),
|
|
178
177
|
loader: async ({ query, user }) => {
|
|
179
178
|
if (user) throw new Redirection(query.r || "/");
|
|
180
179
|
return { realmConfig: await this.loadRealmConfig(query.realm) };
|
|
@@ -186,7 +185,7 @@ var AuthRouter = class {
|
|
|
186
185
|
description: "Reset your account password",
|
|
187
186
|
path: "/reset-password",
|
|
188
187
|
schema: { query: realmQuerySchema },
|
|
189
|
-
lazy: () => import("./ResetPassword-
|
|
188
|
+
lazy: () => import("./ResetPassword-Gxc9L_mY.js").then((n) => n.t),
|
|
190
189
|
loader: async ({ query, user }) => {
|
|
191
190
|
if (user) throw new Redirection(query.r || "/");
|
|
192
191
|
return { realmConfig: await this.loadRealmConfig(query.realm) };
|
|
@@ -201,7 +200,7 @@ var AuthRouter = class {
|
|
|
201
200
|
email: t.optional(t.string()),
|
|
202
201
|
token: t.optional(t.string())
|
|
203
202
|
}) },
|
|
204
|
-
lazy: () => import("./VerifyEmail-
|
|
203
|
+
lazy: () => import("./VerifyEmail-D7G5NnaN.js").then((n) => n.t)
|
|
205
204
|
});
|
|
206
205
|
logout = $page({
|
|
207
206
|
icon: IconLogout2,
|
|
@@ -221,7 +220,7 @@ var AuthRouter = class {
|
|
|
221
220
|
description: "View your profile",
|
|
222
221
|
path: "/profile",
|
|
223
222
|
can: () => !!this.auth.user,
|
|
224
|
-
lazy: () => import("./Profile-
|
|
223
|
+
lazy: () => import("./Profile-CDRjJo0P.js")
|
|
225
224
|
});
|
|
226
225
|
async loadRealmConfig(realmName) {
|
|
227
226
|
try {
|
|
@@ -232,11 +231,10 @@ var AuthRouter = class {
|
|
|
232
231
|
}
|
|
233
232
|
}
|
|
234
233
|
};
|
|
235
|
-
|
|
236
234
|
//#endregion
|
|
237
235
|
//#region ../../src/auth/components/buttons/UserButton.tsx
|
|
238
236
|
const UserButton = (props) => {
|
|
239
|
-
const { menuItems = [], logoutLabel = "Sign out", loginLabel, menuConfig,
|
|
237
|
+
const { menuItems = [], logoutLabel = "Sign out", loginLabel, menuConfig, icon, skipProfile = false, children, ...buttonProps } = props;
|
|
240
238
|
buttonProps.variant ??= "default";
|
|
241
239
|
const adminUserCtrl = useClient();
|
|
242
240
|
const pages = useInject(ReactPageProvider);
|
|
@@ -257,21 +255,21 @@ const UserButton = (props) => {
|
|
|
257
255
|
type: "label",
|
|
258
256
|
label: auth.user.email
|
|
259
257
|
});
|
|
260
|
-
if (userPage && isConnected) items.push({
|
|
258
|
+
if (userPage && isConnected && !skipProfile) items.push({
|
|
261
259
|
label: "Profile",
|
|
262
|
-
icon: /* @__PURE__ */ jsx(IconUser, { size: ui.sizes.icon.
|
|
260
|
+
icon: /* @__PURE__ */ jsx(IconUser, { size: ui.sizes.icon.sm }),
|
|
263
261
|
href: authRouter.path("userProfile")
|
|
264
262
|
});
|
|
265
263
|
if (adminPage && isAdmin) items.push({
|
|
266
264
|
label: "Admin",
|
|
267
|
-
icon: /* @__PURE__ */ jsx(IconSettings, { size: ui.sizes.icon.
|
|
265
|
+
icon: /* @__PURE__ */ jsx(IconSettings, { size: ui.sizes.icon.sm }),
|
|
268
266
|
href: authRouter.path("adminLayout")
|
|
269
267
|
});
|
|
270
268
|
items.push(...menuItems);
|
|
271
|
-
if (
|
|
269
|
+
if (items.length > 0) items.push({ type: "divider" });
|
|
272
270
|
items.push({
|
|
273
271
|
label: logoutLabel,
|
|
274
|
-
icon: /* @__PURE__ */ jsx(IconLogout, { size: ui.sizes.icon.
|
|
272
|
+
icon: /* @__PURE__ */ jsx(IconLogout, { size: ui.sizes.icon.sm }),
|
|
275
273
|
color: "red",
|
|
276
274
|
onClick: () => auth.logout()
|
|
277
275
|
});
|
|
@@ -279,21 +277,24 @@ const UserButton = (props) => {
|
|
|
279
277
|
return /* @__PURE__ */ jsx(ActionButton, {
|
|
280
278
|
...buttonProps,
|
|
281
279
|
icon: hasAvatar ? void 0 : icon === null ? void 0 : icon ?? IconUser,
|
|
282
|
-
|
|
283
|
-
src: `/api/files/${auth.user.picture}`,
|
|
284
|
-
size: 24,
|
|
285
|
-
radius: "xl"
|
|
286
|
-
}) : void 0,
|
|
280
|
+
px: 8,
|
|
287
281
|
menu: {
|
|
288
|
-
|
|
282
|
+
menuProps: {
|
|
283
|
+
withArrow: true,
|
|
284
|
+
arrowSize: 12
|
|
285
|
+
},
|
|
286
|
+
position: "bottom",
|
|
289
287
|
width: 200,
|
|
290
288
|
...menuConfig,
|
|
291
289
|
items
|
|
292
290
|
},
|
|
293
|
-
children
|
|
291
|
+
children: hasAvatar ? /* @__PURE__ */ jsx(Avatar, {
|
|
292
|
+
src: `/api/files/${auth.user.picture}`,
|
|
293
|
+
size: 24,
|
|
294
|
+
radius: "xl"
|
|
295
|
+
}) : void 0
|
|
294
296
|
});
|
|
295
297
|
};
|
|
296
|
-
|
|
297
298
|
//#endregion
|
|
298
299
|
//#region ../../src/auth/index.ts
|
|
299
300
|
/**
|
|
@@ -318,7 +319,6 @@ const AlephaUIAuth = $module({
|
|
|
318
319
|
AuthI18n
|
|
319
320
|
]
|
|
320
321
|
});
|
|
321
|
-
|
|
322
322
|
//#endregion
|
|
323
323
|
//#region ../../src/admin/AdminRouter.tsx
|
|
324
324
|
var AdminRouter = class {
|
|
@@ -332,6 +332,7 @@ var AdminRouter = class {
|
|
|
332
332
|
auditCtrl = $client();
|
|
333
333
|
jobCtrl = $client();
|
|
334
334
|
apiKeyCtrl = $client();
|
|
335
|
+
notificationCtrl = $client();
|
|
335
336
|
adminCookie = $cookie(alephaSidebarAtom, { name: "admin.sidebar" });
|
|
336
337
|
configFn = () => {
|
|
337
338
|
return {
|
|
@@ -346,7 +347,7 @@ var AdminRouter = class {
|
|
|
346
347
|
position: "left"
|
|
347
348
|
},
|
|
348
349
|
{
|
|
349
|
-
element: /* @__PURE__ */ jsx(
|
|
350
|
+
element: /* @__PURE__ */ jsx(Breadcrumbs, {}),
|
|
350
351
|
position: "left"
|
|
351
352
|
},
|
|
352
353
|
{
|
|
@@ -427,6 +428,10 @@ var AdminRouter = class {
|
|
|
427
428
|
{ ...this.router.node(this.adminJobExecutions.name) }
|
|
428
429
|
]
|
|
429
430
|
},
|
|
431
|
+
{
|
|
432
|
+
...this.router.node(this.adminNotifications.name),
|
|
433
|
+
can: () => this.notificationCtrl.findNotifications.can()
|
|
434
|
+
},
|
|
430
435
|
{
|
|
431
436
|
...this.router.node(this.adminParameters.name),
|
|
432
437
|
can: () => this.paramCtrl.getParameterTree.can()
|
|
@@ -449,7 +454,8 @@ var AdminRouter = class {
|
|
|
449
454
|
title: "Admin Panel",
|
|
450
455
|
titleSeparator: " | "
|
|
451
456
|
},
|
|
452
|
-
|
|
457
|
+
use: [$secure({ permissions: ["admin:access"] })],
|
|
458
|
+
lazy: () => import("./AdminLayout-BmZ9mtXh.js"),
|
|
453
459
|
props: () => ({ adminShellProps: this.adminShellProps() }),
|
|
454
460
|
loader: ({ user, url }) => {
|
|
455
461
|
if (!user) throw this.onNotAuthorized(url);
|
|
@@ -461,7 +467,7 @@ var AdminRouter = class {
|
|
|
461
467
|
parent: this.adminLayout,
|
|
462
468
|
path: "/",
|
|
463
469
|
label: "Dashboard",
|
|
464
|
-
lazy: () => import("./AdminDashboard-
|
|
470
|
+
lazy: () => import("./AdminDashboard-C3RXpTp6.js")
|
|
465
471
|
});
|
|
466
472
|
adminUsers = $page({
|
|
467
473
|
icon: IconUsers,
|
|
@@ -470,14 +476,18 @@ var AdminRouter = class {
|
|
|
470
476
|
label: "Users",
|
|
471
477
|
head: { title: "Users" },
|
|
472
478
|
description: "Manage application users and their roles.",
|
|
473
|
-
lazy: () => import("./AdminUsers-
|
|
479
|
+
lazy: () => import("./AdminUsers-BYwei5sj.js"),
|
|
474
480
|
can: () => this.userCtrl.findUsers.can()
|
|
475
481
|
});
|
|
476
482
|
adminUserLayout = $page({
|
|
477
483
|
parent: this.adminLayout,
|
|
478
484
|
path: "/users/:userId",
|
|
479
485
|
head: { title: "Users" },
|
|
480
|
-
|
|
486
|
+
schema: { params: t.object({ userId: t.text() }) },
|
|
487
|
+
lazy: () => import("./AdminUserLayout-DvBTG5gd.js"),
|
|
488
|
+
loader: async ({ params }) => {
|
|
489
|
+
return { user: await this.userCtrl.getUser({ params: { id: params.userId } }) };
|
|
490
|
+
}
|
|
481
491
|
});
|
|
482
492
|
adminUserProfile = $page({
|
|
483
493
|
icon: IconUser,
|
|
@@ -485,7 +495,7 @@ var AdminRouter = class {
|
|
|
485
495
|
path: "/",
|
|
486
496
|
label: "Profile",
|
|
487
497
|
head: { title: "User Profile" },
|
|
488
|
-
lazy: () => import("./AdminUserProfile-
|
|
498
|
+
lazy: () => import("./AdminUserProfile-CzsPBl6Z.js")
|
|
489
499
|
});
|
|
490
500
|
adminUserSessions = $page({
|
|
491
501
|
icon: IconDevices,
|
|
@@ -493,7 +503,7 @@ var AdminRouter = class {
|
|
|
493
503
|
path: "/sessions",
|
|
494
504
|
label: "Sessions",
|
|
495
505
|
head: { title: "User Sessions" },
|
|
496
|
-
lazy: () => import("./AdminUserSessions-
|
|
506
|
+
lazy: () => import("./AdminUserSessions-C-aUnhVN.js")
|
|
497
507
|
});
|
|
498
508
|
adminAudits = $page({
|
|
499
509
|
icon: IconHistory,
|
|
@@ -502,7 +512,7 @@ var AdminRouter = class {
|
|
|
502
512
|
label: "Audit Log",
|
|
503
513
|
head: { title: "Audit Logs" },
|
|
504
514
|
description: "View system-wide audit trail and activity logs.",
|
|
505
|
-
lazy: () => import("./AdminAudits-
|
|
515
|
+
lazy: () => import("./AdminAudits-C7c1CN4c.js"),
|
|
506
516
|
can: () => this.auditCtrl.findAudits.can()
|
|
507
517
|
});
|
|
508
518
|
adminSessions = $page({
|
|
@@ -512,7 +522,7 @@ var AdminRouter = class {
|
|
|
512
522
|
label: "Sessions",
|
|
513
523
|
description: "View and manage all active sessions.",
|
|
514
524
|
head: { title: "Sessions" },
|
|
515
|
-
lazy: () => import("./AdminSessions
|
|
525
|
+
lazy: () => import("./AdminSessions--xwELDSO.js"),
|
|
516
526
|
can: () => this.sessionCtrl.findSessions.can()
|
|
517
527
|
});
|
|
518
528
|
adminFiles = $page({
|
|
@@ -522,7 +532,7 @@ var AdminRouter = class {
|
|
|
522
532
|
label: "Files",
|
|
523
533
|
description: "Manage uploaded files and storage.",
|
|
524
534
|
head: { title: "Files" },
|
|
525
|
-
lazy: () => import("./AdminFiles-
|
|
535
|
+
lazy: () => import("./AdminFiles-31ivR6Wq.js"),
|
|
526
536
|
can: () => this.fileCtrl.findFiles.can()
|
|
527
537
|
});
|
|
528
538
|
adminParameters = $page({
|
|
@@ -531,7 +541,7 @@ var AdminRouter = class {
|
|
|
531
541
|
path: "/parameters",
|
|
532
542
|
label: "Parameters",
|
|
533
543
|
description: "View and manage application parameters.",
|
|
534
|
-
lazy: () => import("./AdminParameters-
|
|
544
|
+
lazy: () => import("./AdminParameters-CyZQSXnN.js"),
|
|
535
545
|
can: () => this.paramCtrl.getParameterTree.can(),
|
|
536
546
|
head: { title: "Parameters" },
|
|
537
547
|
loader: async () => {
|
|
@@ -544,7 +554,7 @@ var AdminRouter = class {
|
|
|
544
554
|
path: "/jobs",
|
|
545
555
|
label: "Jobs",
|
|
546
556
|
description: "Monitor and manage background jobs and scheduled tasks.",
|
|
547
|
-
lazy: () => import("./AdminJobDashboard-
|
|
557
|
+
lazy: () => import("./AdminJobDashboard-BABLe7hL.js"),
|
|
548
558
|
can: () => this.jobCtrl.getJobRegistry.can()
|
|
549
559
|
});
|
|
550
560
|
adminJobRegistry = $page({
|
|
@@ -553,7 +563,7 @@ var AdminRouter = class {
|
|
|
553
563
|
path: "/jobs/registry",
|
|
554
564
|
label: "Registry",
|
|
555
565
|
description: "View all registered job definitions.",
|
|
556
|
-
lazy: () => import("./AdminJobRegistry-
|
|
566
|
+
lazy: () => import("./AdminJobRegistry-oIS3K9NX.js"),
|
|
557
567
|
can: () => this.jobCtrl.getJobRegistry.can()
|
|
558
568
|
});
|
|
559
569
|
adminJobExecutions = $page({
|
|
@@ -562,7 +572,7 @@ var AdminRouter = class {
|
|
|
562
572
|
path: "/jobs/executions",
|
|
563
573
|
label: "Executions",
|
|
564
574
|
description: "Browse and filter job execution history.",
|
|
565
|
-
lazy: () => import("./AdminJobExecutions-
|
|
575
|
+
lazy: () => import("./AdminJobExecutions-D-G8RIlr.js"),
|
|
566
576
|
can: () => this.jobCtrl.findJobExecutions.can()
|
|
567
577
|
});
|
|
568
578
|
adminApiKeys = $page({
|
|
@@ -572,11 +582,20 @@ var AdminRouter = class {
|
|
|
572
582
|
label: "API Keys",
|
|
573
583
|
head: { title: "API Keys" },
|
|
574
584
|
description: "View and manage API keys for programmatic access.",
|
|
575
|
-
lazy: () => import("./AdminApiKeys-
|
|
585
|
+
lazy: () => import("./AdminApiKeys-Bt1PjO6o.js"),
|
|
576
586
|
can: () => this.apiKeyCtrl.findApiKeys.can()
|
|
577
587
|
});
|
|
588
|
+
adminNotifications = $page({
|
|
589
|
+
icon: IconBell,
|
|
590
|
+
parent: this.adminLayout,
|
|
591
|
+
path: "/notifications",
|
|
592
|
+
label: "Notifications",
|
|
593
|
+
description: "View sent notifications and their delivery status.",
|
|
594
|
+
head: { title: "Notifications" },
|
|
595
|
+
lazy: () => import("./AdminNotifications-DHdzksww.js"),
|
|
596
|
+
can: () => this.notificationCtrl.findNotifications.can()
|
|
597
|
+
});
|
|
578
598
|
};
|
|
579
|
-
|
|
580
599
|
//#endregion
|
|
581
600
|
//#region ../../src/admin/primitives/$uiAdmin.ts
|
|
582
601
|
/**
|
|
@@ -588,7 +607,6 @@ const $uiAdmin = (optsFn) => {
|
|
|
588
607
|
if (optsFn) adminRouter.configFn = optsFn;
|
|
589
608
|
return adminRouter;
|
|
590
609
|
};
|
|
591
|
-
|
|
592
610
|
//#endregion
|
|
593
611
|
//#region ../../src/admin/index.ts
|
|
594
612
|
/**
|
|
@@ -618,7 +636,7 @@ const AlephaUIAdmin = $module({
|
|
|
618
636
|
alepha.with(AdminRouter);
|
|
619
637
|
}
|
|
620
638
|
});
|
|
621
|
-
|
|
622
639
|
//#endregion
|
|
623
640
|
export { $uiAdmin, AdminRouter, AlephaUIAdmin };
|
|
641
|
+
|
|
624
642
|
//# sourceMappingURL=index.js.map
|
package/dist/admin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Breadcrumbs"],"sources":["../../src/auth/AuthI18n.ts","../../src/auth/AuthRouter.ts","../../src/auth/components/buttons/UserButton.tsx","../../src/auth/index.ts","../../src/admin/AdminRouter.tsx","../../src/admin/primitives/$uiAdmin.ts","../../src/admin/index.ts"],"sourcesContent":["import { $dictionary } from \"alepha/react/i18n\";\n\nexport class AuthI18n {\n en = $dictionary({\n name: \"alepha.ui.auth.en\",\n lazy: () => ({\n default: {\n loginSignIn: \"Sign in\",\n loginContinueWith: \"Continue with $1\",\n loginOr: \"OR\",\n loginCancel: \"Cancel\",\n loginForgotPassword: \"Forgot password?\",\n loginNoAccount: \"Don't have an account?\",\n loginSignUp: \"Sign up\",\n loginUsername: \"Username\",\n loginEmail: \"Email\",\n loginPhone: \"Phone number\",\n loginPassword: \"Password\",\n registerCreateAccount: \"Create account\",\n registerContinueWith: \"Continue with $1\",\n registerOr: \"OR\",\n registerCancel: \"Cancel\",\n registerHaveAccount: \"Already have an account?\",\n registerSignIn: \"Sign in\",\n registerUsername: \"Username\",\n registerEmail: \"Email\",\n registerPhone: \"Phone number\",\n registerPassword: \"Password\",\n registerConfirmPassword: \"Confirm password\",\n registerDisabled:\n \"Registration is not available. Please contact your administrator.\",\n registerBackToSignIn: \"Back to sign in\",\n registerVerifyTitle: \"Verify your account\",\n registerVerifyDescription:\n \"Please enter the verification code(s) sent to you.\",\n registerEmailCode: \"Email verification code\",\n registerPhoneCode: \"Phone verification code\",\n registerVerifySubmit: \"Complete Registration\",\n registerVerifyBack: \"Back to registration\",\n resetPasswordTitle: \"Reset password\",\n resetPasswordEmail: \"Email\",\n resetPasswordEnterEmail:\n \"Enter your email address to reset your password\",\n resetPasswordSendCode: \"Send verification code\",\n resetPasswordCodeSent: \"We've sent a verification code to your email.\",\n resetPasswordEnterCode: \"Enter the 6-digit code\",\n resetPasswordResendCode: \"Resend code\",\n resetPasswordEnterNewPassword: \"Create your new password\",\n resetPasswordNewPassword: \"New password\",\n resetPasswordConfirmPassword: \"Confirm password\",\n resetPasswordSetNewPassword: \"Set new password\",\n resetPasswordSuccess: \"Your password has been reset successfully.\",\n resetPasswordBackToSignIn: \"Back to sign in\",\n resetPasswordCancel: \"Cancel\",\n resetPasswordDisabled:\n \"Password reset is not available. Please contact your administrator.\",\n verifyEmailTitle: \"Email Verification\",\n verifyEmailVerifying: \"Verifying your email...\",\n verifyEmailPleaseWait:\n \"Please wait while we verify your email address.\",\n verifyEmailSuccess: \"Your email has been verified successfully.\",\n verifyEmailFailed:\n \"Failed to verify your email. The link may have expired or is invalid.\",\n verifyEmailMissingParams:\n \"Invalid verification link. Email and token are required.\",\n verifyEmailSignIn: \"Sign in to your account\",\n verifyEmailBackToSignIn: \"Back to sign in\",\n },\n }),\n });\n\n fr = $dictionary({\n lazy: () => ({\n default: {\n loginSignIn: \"Se connecter\",\n loginContinueWith: \"Continuer avec $1\",\n loginOr: \"OU\",\n loginCancel: \"Annuler\",\n loginForgotPassword: \"Mot de passe oublié ?\",\n loginNoAccount: \"Vous n'avez pas de compte ?\",\n loginSignUp: \"S'inscrire\",\n loginUsername: \"Nom d'utilisateur\",\n loginEmail: \"E-mail\",\n loginPhone: \"Numéro de téléphone\",\n loginPassword: \"Mot de passe\",\n registerCreateAccount: \"Créer un compte\",\n registerContinueWith: \"Continuer avec $1\",\n registerOr: \"OU\",\n registerCancel: \"Annuler\",\n registerHaveAccount: \"Vous avez déjà un compte ?\",\n registerSignIn: \"Se connecter\",\n registerUsername: \"Nom d'utilisateur\",\n registerEmail: \"E-mail\",\n registerPhone: \"Numéro de téléphone\",\n registerPassword: \"Mot de passe\",\n registerConfirmPassword: \"Confirmer le mot de passe\",\n registerDisabled:\n \"L'inscription n'est pas disponible. Veuillez contacter votre administrateur.\",\n registerBackToSignIn: \"Retour à la connexion\",\n registerVerifyTitle: \"Vérifiez votre compte\",\n registerVerifyDescription:\n \"Veuillez entrer le(s) code(s) de vérification qui vous ont été envoyés.\",\n registerEmailCode: \"Code de vérification par e-mail\",\n registerPhoneCode: \"Code de vérification par téléphone\",\n registerVerifySubmit: \"Terminer l'inscription\",\n registerVerifyBack: \"Retour à l'inscription\",\n resetPasswordTitle: \"Réinitialiser le mot de passe\",\n resetPasswordEmail: \"E-mail\",\n resetPasswordEnterEmail:\n \"Entrez votre adresse e-mail pour réinitialiser votre mot de passe\",\n resetPasswordSendCode: \"Envoyer le code de vérification\",\n resetPasswordCodeSent:\n \"Nous avons envoyé un code de vérification à votre e-mail.\",\n resetPasswordEnterCode: \"Entrez le code à 6 chiffres\",\n resetPasswordResendCode: \"Renvoyer le code\",\n resetPasswordEnterNewPassword: \"Créez votre nouveau mot de passe\",\n resetPasswordNewPassword: \"Nouveau mot de passe\",\n resetPasswordConfirmPassword: \"Confirmer le mot de passe\",\n resetPasswordSetNewPassword: \"Définir le nouveau mot de passe\",\n resetPasswordSuccess:\n \"Votre mot de passe a été réinitialisé avec succès.\",\n resetPasswordBackToSignIn: \"Retour à la connexion\",\n resetPasswordCancel: \"Annuler\",\n resetPasswordDisabled:\n \"La réinitialisation du mot de passe n'est pas disponible. Veuillez contacter votre administrateur.\",\n verifyEmailTitle: \"Vérification de l'e-mail\",\n verifyEmailVerifying: \"Vérification de votre e-mail...\",\n verifyEmailPleaseWait:\n \"Veuillez patienter pendant que nous vérifions votre adresse e-mail.\",\n verifyEmailSuccess: \"Votre e-mail a été vérifié avec succès.\",\n verifyEmailFailed:\n \"Échec de la vérification de votre e-mail. Le lien a peut-être expiré ou est invalide.\",\n verifyEmailMissingParams:\n \"Lien de vérification invalide. L'e-mail et le jeton sont requis.\",\n verifyEmailSignIn: \"Se connecter à votre compte\",\n verifyEmailBackToSignIn: \"Retour à la connexion\",\n },\n }),\n });\n}\n","import {\n IconLogin2,\n IconLogout2,\n IconMailCheck,\n IconPasswordUser,\n IconUser,\n IconUserPlus,\n} from \"@tabler/icons-react\";\nimport { $inject, AlephaError, t } from \"alepha\";\nimport type { RealmController } from \"alepha/api/users\";\nimport { ReactAuth } from \"alepha/react/auth\";\nimport { $page, Redirection } from \"alepha/react/router\";\nimport { $client } from \"alepha/server/links\";\n\n/**\n * Schema for realm query parameter used across auth pages.\n */\nconst realmQuerySchema = t.object({\n r: t.optional(t.string({ description: \"Redirect URL after authentication\" })),\n realm: t.optional(\n t.string({ description: \"User realm name for multi-tenant auth\" }),\n ),\n});\n\nexport class AuthRouter {\n protected readonly realmClient = $client<RealmController>();\n protected readonly auth = $inject(ReactAuth);\n\n authLayout = $page({\n label: \"Auth\",\n path: \"/auth\",\n lazy: () => import(\"./components/AuthLayout.tsx\"),\n children: () => [\n this.login,\n this.register,\n this.resetPassword,\n this.verifyEmail,\n this.profile,\n ],\n });\n\n login = $page({\n icon: IconLogin2,\n label: \"Sign In\",\n description: \"Sign in to your account\",\n path: \"/login\",\n schema: {\n query: realmQuerySchema,\n },\n lazy: () => import(\"./components/Login.tsx\"),\n loader: async ({ query, user }) => {\n if (user) {\n throw new Redirection(query.r || \"/\");\n }\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n register = $page({\n icon: IconUserPlus,\n label: \"Register\",\n description: \"Create a new account\",\n path: \"/register\",\n schema: {\n query: realmQuerySchema,\n },\n lazy: () => import(\"./components/Register.tsx\"),\n loader: async ({ query, user }) => {\n if (user) {\n throw new Redirection(query.r || \"/\");\n }\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n resetPassword = $page({\n icon: IconPasswordUser,\n label: \"Reset Password\",\n description: \"Reset your account password\",\n path: \"/reset-password\",\n schema: {\n query: realmQuerySchema,\n },\n lazy: () => import(\"./components/ResetPassword.tsx\"),\n loader: async ({ query, user }) => {\n if (user) {\n throw new Redirection(query.r || \"/\");\n }\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n verifyEmail = $page({\n icon: IconMailCheck,\n label: \"Verify Email\",\n description: \"Verify your email address\",\n path: \"/verify-email\",\n schema: {\n query: t.object({\n email: t.optional(t.string()),\n token: t.optional(t.string()),\n }),\n },\n lazy: () => import(\"./components/VerifyEmail.tsx\"),\n });\n\n logout = $page({\n icon: IconLogout2,\n label: \"Sign Out\",\n description: \"Sign out of your account\",\n path: \"/logout\",\n component: () => null,\n loader: () => {\n this.auth.logout();\n return {};\n },\n });\n\n profile = $page({\n name: \"userProfile\",\n icon: IconUser,\n label: \"Profile\",\n description: \"View your profile\",\n path: \"/profile\",\n can: () => !!this.auth.user,\n lazy: () => import(\"./components/Profile.tsx\"),\n });\n\n protected async loadRealmConfig(realmName?: string) {\n try {\n return await this.realmClient.getRealmConfig({\n query: { realmName },\n });\n } catch (e) {\n if (e instanceof AlephaError) {\n throw new AlephaError(\n \"Missing Realm Configuration - Did you forget to add '$realm()' to your application?\",\n e,\n );\n }\n throw e;\n }\n }\n}\n","import {\n ActionButton,\n type ActionMenuConfig,\n type ActionMenuItem,\n type ActionProps,\n ui,\n} from \"@alepha/ui\";\nimport { Avatar } from \"@mantine/core\";\nimport {\n IconLogin2,\n IconLogout,\n IconSettings,\n IconUser,\n} from \"@tabler/icons-react\";\nimport type { AdminUserController } from \"alepha/api/users\";\nimport { useClient, useInject } from \"alepha/react\";\nimport { useAuth } from \"alepha/react/auth\";\nimport { ReactPageProvider, useRouter } from \"alepha/react/router\";\nimport type { ReactNode } from \"react\";\nimport type { AuthRouter } from \"../../AuthRouter.ts\";\n\nexport interface UserButtonProps\n extends Omit<ActionProps, \"menu\" | \"icon\" | \"onClick\"> {\n /**\n * Additional menu items to display before the logout option\n */\n menuItems?: ActionMenuItem[];\n\n /**\n * Custom logout label (default: \"Sign out\")\n */\n logoutLabel?: string;\n\n /**\n * Custom label for the login button when user is not authenticated\n */\n loginLabel?: string;\n\n /**\n * Menu configuration overrides\n */\n menuConfig?: Partial<Omit<ActionMenuConfig, \"items\">>;\n\n /**\n * Whether to show a divider before logout (default: true when menuItems provided)\n */\n showLogoutDivider?: boolean;\n\n /**\n * Custom icon to use instead of user avatar (default: IconUser)\n */\n icon?: ReactNode;\n}\n\nconst UserButton = (props: UserButtonProps) => {\n const {\n menuItems = [],\n logoutLabel = \"Sign out\",\n loginLabel,\n menuConfig,\n showLogoutDivider = menuItems.length > 0,\n icon,\n children,\n ...buttonProps\n } = props;\n\n buttonProps.variant ??= \"default\";\n\n const adminUserCtrl = useClient<AdminUserController>();\n const pages = useInject(ReactPageProvider);\n\n const auth = useAuth<{\n username?: string;\n email?: string;\n picture?: string;\n }>();\n\n const isConnected = !!auth.user;\n const isAdmin = isConnected && adminUserCtrl.findUsers.can();\n const userPage = pages.getPages().find((it) => it.name === \"userProfile\");\n const adminPage = pages.getPages().find((it) => it.name === \"adminLayout\");\n const authRouter = useRouter<AuthRouter>();\n\n if (!auth.user) {\n return (\n <ActionButton\n {...buttonProps}\n icon={icon === null ? undefined : (icon ?? IconLogin2)}\n href={authRouter.path(\"login\")}\n >\n {loginLabel ?? children}\n </ActionButton>\n );\n }\n\n const items: ActionMenuItem[] = [];\n\n // Add user info label if available\n if (auth.user.email && auth.user.username) {\n items.push({\n type: \"label\",\n label: auth.user.email,\n });\n }\n\n // Add profile page link if available\n if (userPage && isConnected) {\n items.push({\n label: \"Profile\",\n icon: <IconUser size={ui.sizes.icon.md} />,\n href: authRouter.path(\"userProfile\"),\n });\n }\n\n // Add admin page link if available and user is admin\n if (adminPage && isAdmin) {\n items.push({\n label: \"Admin\",\n icon: <IconSettings size={ui.sizes.icon.md} />,\n href: authRouter.path(\"adminLayout\"),\n });\n }\n\n // Add custom menu items\n items.push(...menuItems);\n\n // Add divider before logout if needed\n if (showLogoutDivider && items.length > 0) {\n items.push({ type: \"divider\" });\n }\n\n // Add logout item\n items.push({\n label: logoutLabel,\n icon: <IconLogout size={ui.sizes.icon.md} />,\n color: \"red\",\n onClick: () => auth.logout(),\n });\n\n // Use leftSection for Avatar (JSX element), icon prop for component types\n const hasAvatar = icon === undefined && auth.user.picture;\n\n return (\n <ActionButton\n {...buttonProps}\n icon={\n hasAvatar ? undefined : icon === null ? undefined : (icon ?? IconUser)\n }\n leftSection={\n hasAvatar ? (\n <Avatar\n src={`/api/files/${auth.user.picture}`}\n size={24}\n radius=\"xl\"\n />\n ) : undefined\n }\n menu={{\n position: \"bottom-end\",\n width: 200,\n ...menuConfig,\n items,\n }}\n >\n {children}\n </ActionButton>\n );\n};\n\nexport default UserButton;\n","import { AlephaUI } from \"@alepha/ui\";\nimport { $module } from \"alepha\";\nimport { AlephaReactAuth } from \"alepha/react/auth\";\nimport { AlephaReactI18n } from \"alepha/react/i18n\";\nimport { AuthI18n } from \"./AuthI18n.ts\";\nimport { AuthRouter } from \"./AuthRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./AuthRouter.ts\";\nexport type { UserButtonProps } from \"./components/buttons/UserButton.tsx\";\nexport { default as UserButton } from \"./components/buttons/UserButton.tsx\";\nexport { default as Login } from \"./components/Login.tsx\";\nexport { default as Register } from \"./components/Register.tsx\";\nexport { default as ResetPassword } from \"./components/ResetPassword.tsx\";\nexport { default as VerifyEmail } from \"./components/VerifyEmail.tsx\";\nexport * from \"./primitives/$uiAuth.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Authentication UI components.\n *\n * **Features:**\n * - Login page component\n * - Register page component\n * - Reset password page component\n * - Email verification page component\n * - UserButton for user menu\n *\n * @module alepha.ui.auth\n */\nexport const AlephaUIAuth = $module({\n name: \"alepha.ui.auth\",\n services: [AlephaUI, AlephaReactAuth, AlephaReactI18n, AuthRouter, AuthI18n],\n});\n","import {\n type AppBarItem,\n alephaSidebarAtom,\n Breadcrumbs,\n type DashboardShellProps,\n LanguageButton,\n type SidebarNode,\n ThemeButton,\n} from \"@alepha/ui\";\nimport { AuthRouter, UserButton } from \"@alepha/ui/auth\";\nimport {\n IconClock,\n IconDashboard,\n IconDevices,\n IconFile,\n IconHistory,\n IconKey,\n IconLayoutDashboard,\n IconListDetails,\n IconLockPassword,\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\";\n\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 { $cookie } from \"alepha/server/cookies\";\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\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 readonly adminCookie = $cookie(alephaSidebarAtom, {\n name: \"admin.sidebar\",\n });\n\n public configFn?: (adminRouter: AdminRouter) => DashboardShellProps = () => {\n return {\n sidebarProps: {\n items: this.getDefaultSidebarItems(),\n },\n appBarProps: {\n items: this.getDefaultAppBarItems(),\n },\n };\n };\n\n public getDefaultAppBarItems(): AppBarItem[] {\n return [\n {\n type: \"burger\",\n position: \"left\",\n },\n {\n element: <Breadcrumbs />,\n position: \"left\",\n },\n {\n element: <UserButton />,\n position: \"right\",\n },\n {\n element: <ThemeButton expert />,\n position: \"right\",\n },\n {\n element: <LanguageButton />,\n position: \"right\",\n },\n {\n type: \"dark\",\n position: \"right\",\n },\n ];\n }\n\n public getDefaultSidebarItems(): SidebarNode[] {\n return [\n {\n position: \"top\",\n type: \"search\",\n },\n {\n position: \"top\",\n type: \"spacer\",\n },\n {\n label: \"Dashboard\",\n href: \"/admin\",\n icon: IconLayoutDashboard,\n },\n {\n type: \"section\",\n label: \"Security\",\n children: [\n {\n label: \"Identity\",\n icon: IconLockPassword,\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 ...this.router.node(this.adminAudits.name),\n can: () => this.auditCtrl.findAudits.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 label: \"Jobs\",\n icon: IconTerminal2,\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.adminParameters.name),\n can: () => this.paramCtrl.getParameterTree.can(),\n },\n ],\n },\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 head: {\n title: \"Admin Panel\",\n titleSeparator: \" | \",\n },\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 // Dashboard\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminDashboard = $page({\n icon: IconLayoutDashboard,\n parent: this.adminLayout,\n path: \"/\",\n label: \"Dashboard\",\n lazy: () => import(\"./components/AdminDashboard.tsx\"),\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 head: {\n title: \"Users\",\n },\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 adminUserLayout = $page({\n parent: this.adminLayout,\n path: \"/users/:userId\",\n head: {\n title: \"Users\",\n },\n lazy: () => import(\"./components/users/AdminUserLayout.tsx\"),\n });\n\n public readonly adminUserProfile = $page({\n icon: IconUser,\n parent: this.adminUserLayout,\n path: \"/\",\n label: \"Profile\",\n head: {\n title: \"User Profile\",\n },\n lazy: () => import(\"./components/users/AdminUserProfile.tsx\"),\n });\n\n public readonly adminUserSessions = $page({\n icon: IconDevices,\n parent: this.adminUserLayout,\n path: \"/sessions\",\n label: \"Sessions\",\n head: {\n title: \"User Sessions\",\n },\n lazy: () => import(\"./components/users/AdminUserSessions.tsx\"),\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 head: {\n title: \"Audit Logs\",\n },\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 head: {\n title: \"Sessions\",\n },\n lazy: () => import(\"./components/sessions/AdminSessions.tsx\"),\n can: () => this.sessionCtrl.findSessions.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 head: {\n title: \"Files\",\n },\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 head: {\n title: \"Parameters\",\n },\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: IconDashboard,\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.getJobRegistry.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.getJobRegistry.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.findJobExecutions.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 head: {\n title: \"API Keys\",\n },\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.tsx\";\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.tsx\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport { AdminRouter } from \"./AdminRouter.tsx\";\nexport * from \"./primitives/$uiAdmin.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\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\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/auth/AuthI18n.ts","../../src/auth/AuthRouter.ts","../../src/auth/components/buttons/UserButton.tsx","../../src/auth/index.ts","../../src/admin/AdminRouter.tsx","../../src/admin/primitives/$uiAdmin.ts","../../src/admin/index.ts"],"sourcesContent":["import { $dictionary } from \"alepha/react/i18n\";\n\nexport class AuthI18n {\n en = $dictionary({\n name: \"alepha.ui.auth.en\",\n lazy: () => ({\n default: {\n loginSignIn: \"Sign in\",\n loginContinueWith: \"Continue with $1\",\n loginOr: \"OR\",\n loginCancel: \"Cancel\",\n loginForgotPassword: \"Forgot password?\",\n loginNoAccount: \"Don't have an account?\",\n loginSignUp: \"Sign up\",\n loginUsername: \"Username\",\n loginEmail: \"Email\",\n loginPhone: \"Phone number\",\n loginPassword: \"Password\",\n registerCreateAccount: \"Create account\",\n registerContinueWith: \"Continue with $1\",\n registerOr: \"OR\",\n registerCancel: \"Cancel\",\n registerHaveAccount: \"Already have an account?\",\n registerSignIn: \"Sign in\",\n registerUsername: \"Username\",\n registerEmail: \"Email\",\n registerPhone: \"Phone number\",\n registerPassword: \"Password\",\n registerConfirmPassword: \"Confirm password\",\n registerDisabled:\n \"Registration is not available. Please contact your administrator.\",\n registerBackToSignIn: \"Back to sign in\",\n registerVerifyTitle: \"Verify your account\",\n registerVerifyDescription:\n \"Please enter the verification code(s) sent to you.\",\n registerEmailCode: \"Email verification code\",\n registerPhoneCode: \"Phone verification code\",\n registerVerifySubmit: \"Complete Registration\",\n registerVerifyBack: \"Back to registration\",\n resetPasswordTitle: \"Reset password\",\n resetPasswordEmail: \"Email\",\n resetPasswordEnterEmail:\n \"Enter your email address to reset your password\",\n resetPasswordSendCode: \"Send verification code\",\n resetPasswordCodeSent: \"We've sent a verification code to your email.\",\n resetPasswordEnterCode: \"Enter the 6-digit code\",\n resetPasswordResendCode: \"Resend code\",\n resetPasswordEnterNewPassword: \"Create your new password\",\n resetPasswordNewPassword: \"New password\",\n resetPasswordConfirmPassword: \"Confirm password\",\n resetPasswordSetNewPassword: \"Set new password\",\n resetPasswordSuccess: \"Your password has been reset successfully.\",\n resetPasswordBackToSignIn: \"Back to sign in\",\n resetPasswordCancel: \"Cancel\",\n resetPasswordDisabled:\n \"Password reset is not available. Please contact your administrator.\",\n verifyEmailTitle: \"Email Verification\",\n verifyEmailVerifying: \"Verifying your email...\",\n verifyEmailPleaseWait:\n \"Please wait while we verify your email address.\",\n verifyEmailSuccess: \"Your email has been verified successfully.\",\n verifyEmailFailed:\n \"Failed to verify your email. The link may have expired or is invalid.\",\n verifyEmailMissingParams:\n \"Invalid verification link. Email and token are required.\",\n verifyEmailSignIn: \"Sign in to your account\",\n verifyEmailBackToSignIn: \"Back to sign in\",\n },\n }),\n });\n\n fr = $dictionary({\n lazy: () => ({\n default: {\n loginSignIn: \"Se connecter\",\n loginContinueWith: \"Continuer avec $1\",\n loginOr: \"OU\",\n loginCancel: \"Annuler\",\n loginForgotPassword: \"Mot de passe oublié ?\",\n loginNoAccount: \"Vous n'avez pas de compte ?\",\n loginSignUp: \"S'inscrire\",\n loginUsername: \"Nom d'utilisateur\",\n loginEmail: \"E-mail\",\n loginPhone: \"Numéro de téléphone\",\n loginPassword: \"Mot de passe\",\n registerCreateAccount: \"Créer un compte\",\n registerContinueWith: \"Continuer avec $1\",\n registerOr: \"OU\",\n registerCancel: \"Annuler\",\n registerHaveAccount: \"Vous avez déjà un compte ?\",\n registerSignIn: \"Se connecter\",\n registerUsername: \"Nom d'utilisateur\",\n registerEmail: \"E-mail\",\n registerPhone: \"Numéro de téléphone\",\n registerPassword: \"Mot de passe\",\n registerConfirmPassword: \"Confirmer le mot de passe\",\n registerDisabled:\n \"L'inscription n'est pas disponible. Veuillez contacter votre administrateur.\",\n registerBackToSignIn: \"Retour à la connexion\",\n registerVerifyTitle: \"Vérifiez votre compte\",\n registerVerifyDescription:\n \"Veuillez entrer le(s) code(s) de vérification qui vous ont été envoyés.\",\n registerEmailCode: \"Code de vérification par e-mail\",\n registerPhoneCode: \"Code de vérification par téléphone\",\n registerVerifySubmit: \"Terminer l'inscription\",\n registerVerifyBack: \"Retour à l'inscription\",\n resetPasswordTitle: \"Réinitialiser le mot de passe\",\n resetPasswordEmail: \"E-mail\",\n resetPasswordEnterEmail:\n \"Entrez votre adresse e-mail pour réinitialiser votre mot de passe\",\n resetPasswordSendCode: \"Envoyer le code de vérification\",\n resetPasswordCodeSent:\n \"Nous avons envoyé un code de vérification à votre e-mail.\",\n resetPasswordEnterCode: \"Entrez le code à 6 chiffres\",\n resetPasswordResendCode: \"Renvoyer le code\",\n resetPasswordEnterNewPassword: \"Créez votre nouveau mot de passe\",\n resetPasswordNewPassword: \"Nouveau mot de passe\",\n resetPasswordConfirmPassword: \"Confirmer le mot de passe\",\n resetPasswordSetNewPassword: \"Définir le nouveau mot de passe\",\n resetPasswordSuccess:\n \"Votre mot de passe a été réinitialisé avec succès.\",\n resetPasswordBackToSignIn: \"Retour à la connexion\",\n resetPasswordCancel: \"Annuler\",\n resetPasswordDisabled:\n \"La réinitialisation du mot de passe n'est pas disponible. Veuillez contacter votre administrateur.\",\n verifyEmailTitle: \"Vérification de l'e-mail\",\n verifyEmailVerifying: \"Vérification de votre e-mail...\",\n verifyEmailPleaseWait:\n \"Veuillez patienter pendant que nous vérifions votre adresse e-mail.\",\n verifyEmailSuccess: \"Votre e-mail a été vérifié avec succès.\",\n verifyEmailFailed:\n \"Échec de la vérification de votre e-mail. Le lien a peut-être expiré ou est invalide.\",\n verifyEmailMissingParams:\n \"Lien de vérification invalide. L'e-mail et le jeton sont requis.\",\n verifyEmailSignIn: \"Se connecter à votre compte\",\n verifyEmailBackToSignIn: \"Retour à la connexion\",\n },\n }),\n });\n}\n","import {\n IconLogin2,\n IconLogout2,\n IconMailCheck,\n IconPasswordUser,\n IconUser,\n IconUserPlus,\n} from \"@tabler/icons-react\";\nimport { $inject, AlephaError, t } from \"alepha\";\nimport type { RealmController } from \"alepha/api/users\";\nimport { ReactAuth } from \"alepha/react/auth\";\nimport { $page, Redirection } from \"alepha/react/router\";\nimport { $client } from \"alepha/server/links\";\n\n/**\n * Schema for realm query parameter used across auth pages.\n */\nconst realmQuerySchema = t.object({\n r: t.optional(t.string({ description: \"Redirect URL after authentication\" })),\n realm: t.optional(\n t.string({ description: \"User realm name for multi-tenant auth\" }),\n ),\n});\n\nexport class AuthRouter {\n protected readonly realmClient = $client<RealmController>();\n protected readonly auth = $inject(ReactAuth);\n\n authLayout = $page({\n label: \"Auth\",\n path: \"/auth\",\n lazy: () => import(\"./components/AuthLayout.tsx\"),\n children: () => [\n this.login,\n this.register,\n this.resetPassword,\n this.verifyEmail,\n this.profile,\n ],\n });\n\n login = $page({\n icon: IconLogin2,\n label: \"Sign In\",\n description: \"Sign in to your account\",\n path: \"/login\",\n schema: {\n query: realmQuerySchema,\n },\n lazy: () => import(\"./components/Login.tsx\"),\n loader: async ({ query, user }) => {\n if (user) {\n throw new Redirection(query.r || \"/\");\n }\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n register = $page({\n icon: IconUserPlus,\n label: \"Register\",\n description: \"Create a new account\",\n path: \"/register\",\n schema: {\n query: realmQuerySchema,\n },\n lazy: () => import(\"./components/Register.tsx\"),\n loader: async ({ query, user }) => {\n if (user) {\n throw new Redirection(query.r || \"/\");\n }\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n resetPassword = $page({\n icon: IconPasswordUser,\n label: \"Reset Password\",\n description: \"Reset your account password\",\n path: \"/reset-password\",\n schema: {\n query: realmQuerySchema,\n },\n lazy: () => import(\"./components/ResetPassword.tsx\"),\n loader: async ({ query, user }) => {\n if (user) {\n throw new Redirection(query.r || \"/\");\n }\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n verifyEmail = $page({\n icon: IconMailCheck,\n label: \"Verify Email\",\n description: \"Verify your email address\",\n path: \"/verify-email\",\n schema: {\n query: t.object({\n email: t.optional(t.string()),\n token: t.optional(t.string()),\n }),\n },\n lazy: () => import(\"./components/VerifyEmail.tsx\"),\n });\n\n logout = $page({\n icon: IconLogout2,\n label: \"Sign Out\",\n description: \"Sign out of your account\",\n path: \"/logout\",\n component: () => null,\n loader: () => {\n this.auth.logout();\n return {};\n },\n });\n\n profile = $page({\n name: \"userProfile\",\n icon: IconUser,\n label: \"Profile\",\n description: \"View your profile\",\n path: \"/profile\",\n can: () => !!this.auth.user,\n lazy: () => import(\"./components/Profile.tsx\"),\n });\n\n protected async loadRealmConfig(realmName?: string) {\n try {\n return await this.realmClient.getRealmConfig({\n query: { realmName },\n });\n } catch (e) {\n if (e instanceof AlephaError) {\n throw new AlephaError(\n \"Missing Realm Configuration - Did you forget to add '$realm()' to your application?\",\n e,\n );\n }\n throw e;\n }\n }\n}\n","import {\n ActionButton,\n type ActionMenuConfig,\n type ActionMenuItem,\n type ActionProps,\n ui,\n} from \"@alepha/ui\";\nimport { Avatar } from \"@mantine/core\";\nimport {\n IconLogin2,\n IconLogout,\n IconSettings,\n IconUser,\n} from \"@tabler/icons-react\";\nimport type { AdminUserController } from \"alepha/api/users\";\nimport { useClient, useInject } from \"alepha/react\";\nimport { useAuth } from \"alepha/react/auth\";\nimport { ReactPageProvider, useRouter } from \"alepha/react/router\";\nimport type { ReactNode } from \"react\";\nimport type { AuthRouter } from \"../../AuthRouter.ts\";\n\nexport interface UserButtonProps\n extends Omit<ActionProps, \"menu\" | \"icon\" | \"onClick\"> {\n /**\n * Additional menu items to display before the logout option\n */\n menuItems?: ActionMenuItem[];\n\n /**\n * Custom logout label (default: \"Sign out\")\n */\n logoutLabel?: string;\n\n /**\n * Custom label for the login button when user is not authenticated\n */\n loginLabel?: string;\n\n /**\n * Menu configuration overrides\n */\n menuConfig?: Partial<Omit<ActionMenuConfig, \"items\">>;\n\n /**\n * Custom icon to use instead of user avatar (default: IconUser)\n */\n icon?: ReactNode;\n\n /**\n * If true, the profile link will not be shown in the menu even if a userProfile page exists and the user is authenticated.\n */\n skipProfile?: boolean;\n}\n\nconst UserButton = (props: UserButtonProps) => {\n const {\n menuItems = [],\n logoutLabel = \"Sign out\",\n loginLabel,\n menuConfig,\n icon,\n skipProfile = false,\n children,\n ...buttonProps\n } = props;\n\n buttonProps.variant ??= \"default\";\n\n const adminUserCtrl = useClient<AdminUserController>();\n const pages = useInject(ReactPageProvider);\n\n const auth = useAuth<{\n username?: string;\n email?: string;\n picture?: string;\n }>();\n\n const isConnected = !!auth.user;\n const isAdmin = isConnected && adminUserCtrl.findUsers.can();\n const userPage = pages.getPages().find((it) => it.name === \"userProfile\");\n const adminPage = pages.getPages().find((it) => it.name === \"adminLayout\");\n const authRouter = useRouter<AuthRouter>();\n\n if (!auth.user) {\n return (\n <ActionButton\n {...buttonProps}\n icon={icon === null ? undefined : (icon ?? IconLogin2)}\n href={authRouter.path(\"login\")}\n >\n {loginLabel ?? children}\n </ActionButton>\n );\n }\n\n const items: ActionMenuItem[] = [];\n\n // Add user info label if available\n if (auth.user.email && auth.user.username) {\n items.push({\n type: \"label\",\n label: auth.user.email,\n });\n }\n\n // Add profile page link if available\n if (userPage && isConnected && !skipProfile) {\n items.push({\n label: \"Profile\",\n icon: <IconUser size={ui.sizes.icon.sm} />,\n href: authRouter.path(\"userProfile\"),\n });\n }\n\n // Add admin page link if available and user is admin\n if (adminPage && isAdmin) {\n items.push({\n label: \"Admin\",\n icon: <IconSettings size={ui.sizes.icon.sm} />,\n href: authRouter.path(\"adminLayout\"),\n });\n }\n\n // Add custom menu items\n items.push(...menuItems);\n\n // Add divider before logout if needed\n if (items.length > 0) {\n items.push({ type: \"divider\" });\n }\n\n // Add logout item\n items.push({\n label: logoutLabel,\n icon: <IconLogout size={ui.sizes.icon.sm} />,\n color: \"red\",\n onClick: () => auth.logout(),\n });\n\n // Use leftSection for Avatar (JSX element), icon prop for component types\n const hasAvatar = icon === undefined && auth.user.picture;\n\n return (\n <ActionButton\n {...buttonProps}\n icon={\n hasAvatar ? undefined : icon === null ? undefined : (icon ?? IconUser)\n }\n px={8}\n menu={{\n menuProps: {\n withArrow: true,\n arrowSize: 12,\n },\n position: \"bottom\",\n width: 200,\n ...menuConfig,\n items,\n }}\n >\n {hasAvatar ? (\n <Avatar src={`/api/files/${auth.user.picture}`} size={24} radius=\"xl\" />\n ) : undefined}\n </ActionButton>\n );\n};\n\nexport default UserButton;\n","import { AlephaUI } from \"@alepha/ui\";\nimport { $module } from \"alepha\";\nimport { AlephaReactAuth } from \"alepha/react/auth\";\nimport { AlephaReactI18n } from \"alepha/react/i18n\";\nimport { AuthI18n } from \"./AuthI18n.ts\";\nimport { AuthRouter } from \"./AuthRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./AuthRouter.ts\";\nexport type { UserButtonProps } from \"./components/buttons/UserButton.tsx\";\nexport { default as UserButton } from \"./components/buttons/UserButton.tsx\";\nexport { default as Login } from \"./components/Login.tsx\";\nexport { default as Register } from \"./components/Register.tsx\";\nexport { default as ResetPassword } from \"./components/ResetPassword.tsx\";\nexport type { VerifyEmailStep } from \"./components/VerifyEmail.tsx\";\nexport { default as VerifyEmail } from \"./components/VerifyEmail.tsx\";\nexport * from \"./primitives/$uiAuth.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Authentication UI components.\n *\n * **Features:**\n * - Login page component\n * - Register page component\n * - Reset password page component\n * - Email verification page component\n * - UserButton for user menu\n *\n * @module alepha.ui.auth\n */\nexport const AlephaUIAuth = $module({\n name: \"alepha.ui.auth\",\n services: [AlephaUI, AlephaReactAuth, AlephaReactI18n, AuthRouter, AuthI18n],\n});\n","import {\n type AppBarItem,\n alephaSidebarAtom,\n Breadcrumbs,\n type DashboardShellProps,\n LanguageButton,\n type SidebarNode,\n ThemeButton,\n} from \"@alepha/ui\";\nimport { AuthRouter, UserButton } from \"@alepha/ui/auth\";\nimport {\n IconBell,\n IconClock,\n IconDashboard,\n IconDevices,\n IconFile,\n IconHistory,\n IconKey,\n IconLayoutDashboard,\n IconListDetails,\n IconLockPassword,\n IconSettings,\n IconTerminal2,\n IconUser,\n IconUsers,\n} from \"@tabler/icons-react\";\nimport { $inject, t } 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 { $secure } from \"alepha/security\";\nimport { $cookie } from \"alepha/server/cookies\";\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\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 protected readonly notificationCtrl = $client<AdminNotificationController>();\n\n public readonly adminCookie = $cookie(alephaSidebarAtom, {\n name: \"admin.sidebar\",\n });\n\n public configFn?: (adminRouter: AdminRouter) => DashboardShellProps = () => {\n return {\n sidebarProps: {\n items: this.getDefaultSidebarItems(),\n },\n appBarProps: {\n items: this.getDefaultAppBarItems(),\n },\n };\n };\n\n public getDefaultAppBarItems(): AppBarItem[] {\n return [\n {\n type: \"burger\",\n position: \"left\",\n },\n {\n element: <Breadcrumbs />,\n position: \"left\",\n },\n {\n element: <UserButton />,\n position: \"right\",\n },\n {\n element: <ThemeButton expert />,\n position: \"right\",\n },\n {\n element: <LanguageButton />,\n position: \"right\",\n },\n {\n type: \"dark\",\n position: \"right\",\n },\n ];\n }\n\n public getDefaultSidebarItems(): SidebarNode[] {\n return [\n {\n position: \"top\",\n type: \"search\",\n },\n {\n position: \"top\",\n type: \"spacer\",\n },\n {\n label: \"Dashboard\",\n href: \"/admin\",\n icon: IconLayoutDashboard,\n },\n {\n type: \"section\",\n label: \"Security\",\n children: [\n {\n label: \"Identity\",\n icon: IconLockPassword,\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 ...this.router.node(this.adminAudits.name),\n can: () => this.auditCtrl.findAudits.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 label: \"Jobs\",\n icon: IconTerminal2,\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.adminNotifications.name),\n can: () => this.notificationCtrl.findNotifications.can(),\n },\n {\n ...this.router.node(this.adminParameters.name),\n can: () => this.paramCtrl.getParameterTree.can(),\n },\n ],\n },\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 head: {\n title: \"Admin Panel\",\n titleSeparator: \" | \",\n },\n use: [\n $secure({\n permissions: [\"admin:access\"],\n }),\n ],\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 // Dashboard\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminDashboard = $page({\n icon: IconLayoutDashboard,\n parent: this.adminLayout,\n path: \"/\",\n label: \"Dashboard\",\n lazy: () => import(\"./components/AdminDashboard.tsx\"),\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 head: {\n title: \"Users\",\n },\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 adminUserLayout = $page({\n parent: this.adminLayout,\n path: \"/users/:userId\",\n head: {\n title: \"Users\",\n },\n schema: {\n params: t.object({\n userId: t.text(),\n }),\n },\n lazy: () => import(\"./components/users/AdminUserLayout.tsx\"),\n loader: async ({ params }) => {\n const user = await this.userCtrl.getUser({\n params: { id: params.userId },\n });\n return { user };\n },\n });\n\n public readonly adminUserProfile = $page({\n icon: IconUser,\n parent: this.adminUserLayout,\n path: \"/\",\n label: \"Profile\",\n head: {\n title: \"User Profile\",\n },\n lazy: () => import(\"./components/users/AdminUserProfile.tsx\"),\n });\n\n public readonly adminUserSessions = $page({\n icon: IconDevices,\n parent: this.adminUserLayout,\n path: \"/sessions\",\n label: \"Sessions\",\n head: {\n title: \"User Sessions\",\n },\n lazy: () => import(\"./components/users/AdminUserSessions.tsx\"),\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 head: {\n title: \"Audit Logs\",\n },\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 head: {\n title: \"Sessions\",\n },\n lazy: () => import(\"./components/sessions/AdminSessions.tsx\"),\n can: () => this.sessionCtrl.findSessions.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 head: {\n title: \"Files\",\n },\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 head: {\n title: \"Parameters\",\n },\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: IconDashboard,\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.getJobRegistry.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.getJobRegistry.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.findJobExecutions.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 head: {\n title: \"API Keys\",\n },\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 // ─────────────────────────────────────────────────────────────────────────────\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 sent notifications and their delivery status.\",\n head: {\n title: \"Notifications\",\n },\n lazy: () => import(\"./components/notifications/AdminNotifications.tsx\"),\n can: () => this.notificationCtrl.findNotifications.can(),\n });\n}\n","import type { DashboardShellProps } from \"@alepha/ui\";\nimport { $context } from \"alepha\";\nimport { AdminRouter } from \"../AdminRouter.tsx\";\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.tsx\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport { AdminRouter } from \"./AdminRouter.tsx\";\nexport * from \"./primitives/$uiAdmin.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\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\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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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __exportAll = (all, no_symbols) => {
|
|
4
|
+
let target = {};
|
|
5
|
+
for (var name in all) __defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true
|
|
8
|
+
});
|
|
9
|
+
if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
10
|
+
return target;
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { __exportAll as t };
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { o as AlephaMantineProvider } from "./core-C6D3pazL.js";
|
|
2
2
|
import { Flex } from "@mantine/core";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
import { NestedView } from "alepha/react/router";
|
|
5
|
-
|
|
6
5
|
//#region ../../src/auth/components/AuthLayout.tsx
|
|
7
6
|
const AuthLayout = () => {
|
|
8
7
|
return /* @__PURE__ */ jsx(AlephaMantineProvider, {
|
|
@@ -16,7 +15,7 @@ const AuthLayout = () => {
|
|
|
16
15
|
})
|
|
17
16
|
});
|
|
18
17
|
};
|
|
19
|
-
|
|
20
18
|
//#endregion
|
|
21
19
|
export { AuthLayout as default };
|
|
22
|
-
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=AuthLayout-CfRKcTqP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthLayout-
|
|
1
|
+
{"version":3,"file":"AuthLayout-CfRKcTqP.js","names":[],"sources":["../../src/auth/components/AuthLayout.tsx"],"sourcesContent":["import { AlephaMantineProvider } from \"@alepha/ui\";\nimport { Flex } from \"@mantine/core\";\nimport { NestedView } from \"alepha/react/router\";\n\nconst AuthLayout = () => {\n return (\n <AlephaMantineProvider omnibar={false}>\n <Flex flex={1} align={\"center\"} h={\"100vh\"} justify={\"center\"}>\n <NestedView />\n </Flex>\n </AlephaMantineProvider>\n );\n};\n\nexport default AuthLayout;\n"],"mappings":";;;;;AAIA,MAAM,mBAAmB;AACvB,QACE,oBAAC,uBAAD;EAAuB,SAAS;YAC9B,oBAAC,MAAD;GAAM,MAAM;GAAG,OAAO;GAAU,GAAG;GAAS,SAAS;aACnD,oBAAC,YAAD,EAAc,CAAA;GACT,CAAA;EACe,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
|
|
3
2
|
//#region ../../src/auth/components/icons/IconGithub.tsx
|
|
4
3
|
const IconGithub = () => {
|
|
5
4
|
return /* @__PURE__ */ jsx("svg", {
|
|
@@ -17,7 +16,6 @@ const IconGithub = () => {
|
|
|
17
16
|
})
|
|
18
17
|
});
|
|
19
18
|
};
|
|
20
|
-
|
|
21
19
|
//#endregion
|
|
22
20
|
//#region ../../src/auth/components/icons/IconGoogle.tsx
|
|
23
21
|
const IconGoogle = () => {
|
|
@@ -50,7 +48,7 @@ const IconGoogle = () => {
|
|
|
50
48
|
]
|
|
51
49
|
});
|
|
52
50
|
};
|
|
53
|
-
|
|
54
51
|
//#endregion
|
|
55
52
|
export { IconGithub as n, IconGoogle as t };
|
|
56
|
-
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=IconGoogle-8Nkx6yax.js.map
|