@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/auth/index.d.ts
CHANGED
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
import * as alepha from "alepha";
|
|
2
|
-
import { Alepha, Static } from "alepha";
|
|
2
|
+
import { Alepha, Async, Static } from "alepha";
|
|
3
3
|
import { BaseInputField, FormModel } from "alepha/react/form";
|
|
4
|
-
import "alepha/react/head";
|
|
5
|
-
import "alepha/server/cookies";
|
|
6
4
|
import { AnchorProps, AutocompleteProps, ButtonProps, ColorInputProps, FileInputProps, MenuProps, MenuTargetProps, MultiSelectProps, NumberInputProps, PasswordInputProps, SegmentedControlProps, SelectProps, SliderProps, SwitchProps, TagsInputProps, TextInputProps, TextareaProps, ThemeIconProps, TooltipProps } from "@mantine/core";
|
|
7
|
-
import "@mantine/modals";
|
|
8
5
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
9
6
|
import { ComponentType, ReactElement, ReactNode } from "react";
|
|
10
|
-
import "@mantine/notifications";
|
|
11
7
|
import * as alepha_react_router0 from "alepha/react/router";
|
|
12
8
|
import { RouterPushOptions, UseActiveOptions } from "alepha/react/router";
|
|
13
|
-
import "@mantine/nprogress";
|
|
14
9
|
import { UseActionReturn } from "alepha/react";
|
|
15
10
|
import { DateInputProps, DateTimePickerProps, TimeInputProps } from "@mantine/dates";
|
|
16
|
-
import "alepha/datetime";
|
|
17
11
|
import { ReactAuth } from "alepha/react/auth";
|
|
18
12
|
import * as alepha_server_links0 from "alepha/server/links";
|
|
19
13
|
import { RealmConfig, RealmController } from "alepha/api/users";
|
|
@@ -36,17 +30,13 @@ declare class AuthRouter {
|
|
|
36
30
|
displayName?: string | undefined;
|
|
37
31
|
logoUrl?: string | undefined;
|
|
38
32
|
registrationAllowed: boolean;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
usernameEnabled: boolean;
|
|
42
|
-
usernameRequired: boolean;
|
|
33
|
+
email: "required" | "none" | "optional";
|
|
34
|
+
username: "required" | "none" | "optional";
|
|
43
35
|
usernameRegExp: string;
|
|
44
|
-
|
|
45
|
-
phoneRequired: boolean;
|
|
36
|
+
phoneNumber: "required" | "none" | "optional";
|
|
46
37
|
verifyEmailRequired: boolean;
|
|
47
38
|
verifyPhoneRequired: boolean;
|
|
48
|
-
|
|
49
|
-
firstNameLastNameRequired: boolean;
|
|
39
|
+
firstNameLastName: "required" | "none" | "optional";
|
|
50
40
|
resetPasswordAllowed: boolean;
|
|
51
41
|
adminEmails: string[];
|
|
52
42
|
adminUsernames: string[];
|
|
@@ -77,17 +67,13 @@ declare class AuthRouter {
|
|
|
77
67
|
displayName?: string | undefined;
|
|
78
68
|
logoUrl?: string | undefined;
|
|
79
69
|
registrationAllowed: boolean;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
usernameEnabled: boolean;
|
|
83
|
-
usernameRequired: boolean;
|
|
70
|
+
email: "required" | "none" | "optional";
|
|
71
|
+
username: "required" | "none" | "optional";
|
|
84
72
|
usernameRegExp: string;
|
|
85
|
-
|
|
86
|
-
phoneRequired: boolean;
|
|
73
|
+
phoneNumber: "required" | "none" | "optional";
|
|
87
74
|
verifyEmailRequired: boolean;
|
|
88
75
|
verifyPhoneRequired: boolean;
|
|
89
|
-
|
|
90
|
-
firstNameLastNameRequired: boolean;
|
|
76
|
+
firstNameLastName: "required" | "none" | "optional";
|
|
91
77
|
resetPasswordAllowed: boolean;
|
|
92
78
|
adminEmails: string[];
|
|
93
79
|
adminUsernames: string[];
|
|
@@ -118,17 +104,13 @@ declare class AuthRouter {
|
|
|
118
104
|
displayName?: string | undefined;
|
|
119
105
|
logoUrl?: string | undefined;
|
|
120
106
|
registrationAllowed: boolean;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
usernameEnabled: boolean;
|
|
124
|
-
usernameRequired: boolean;
|
|
107
|
+
email: "required" | "none" | "optional";
|
|
108
|
+
username: "required" | "none" | "optional";
|
|
125
109
|
usernameRegExp: string;
|
|
126
|
-
|
|
127
|
-
phoneRequired: boolean;
|
|
110
|
+
phoneNumber: "required" | "none" | "optional";
|
|
128
111
|
verifyEmailRequired: boolean;
|
|
129
112
|
verifyPhoneRequired: boolean;
|
|
130
|
-
|
|
131
|
-
firstNameLastNameRequired: boolean;
|
|
113
|
+
firstNameLastName: "required" | "none" | "optional";
|
|
132
114
|
resetPasswordAllowed: boolean;
|
|
133
115
|
adminEmails: string[];
|
|
134
116
|
adminUsernames: string[];
|
|
@@ -161,17 +143,13 @@ declare class AuthRouter {
|
|
|
161
143
|
displayName?: string | undefined;
|
|
162
144
|
logoUrl?: string | undefined;
|
|
163
145
|
registrationAllowed: boolean;
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
usernameEnabled: boolean;
|
|
167
|
-
usernameRequired: boolean;
|
|
146
|
+
email: "required" | "none" | "optional";
|
|
147
|
+
username: "required" | "none" | "optional";
|
|
168
148
|
usernameRegExp: string;
|
|
169
|
-
|
|
170
|
-
phoneRequired: boolean;
|
|
149
|
+
phoneNumber: "required" | "none" | "optional";
|
|
171
150
|
verifyEmailRequired: boolean;
|
|
172
151
|
verifyPhoneRequired: boolean;
|
|
173
|
-
|
|
174
|
-
firstNameLastNameRequired: boolean;
|
|
152
|
+
firstNameLastName: "required" | "none" | "optional";
|
|
175
153
|
resetPasswordAllowed: boolean;
|
|
176
154
|
adminEmails: string[];
|
|
177
155
|
adminUsernames: string[];
|
|
@@ -284,6 +262,9 @@ interface ActionMenuConfig {
|
|
|
284
262
|
}
|
|
285
263
|
interface ActionCommonProps extends ButtonProps {
|
|
286
264
|
children?: ReactNode;
|
|
265
|
+
/**
|
|
266
|
+
* If set, the button will show only the icon on smaller screens and reveal the text from the specified breakpoint and up.
|
|
267
|
+
*/
|
|
287
268
|
textVisibleFrom?: "xs" | "sm" | "md" | "lg" | "xl";
|
|
288
269
|
/**
|
|
289
270
|
* Tooltip to display on hover. Can be a string for simple tooltips
|
|
@@ -309,6 +290,9 @@ interface ActionCommonProps extends ButtonProps {
|
|
|
309
290
|
* If no children are provided, the button will be styled as an icon-only button.
|
|
310
291
|
*/
|
|
311
292
|
icon?: ReactNode | ComponentType;
|
|
293
|
+
/**
|
|
294
|
+
* Size of the icon. Can be a number (pixels) or a string (e.g., "1em", "20px").
|
|
295
|
+
*/
|
|
312
296
|
iconSize?: number | string;
|
|
313
297
|
/**
|
|
314
298
|
* Additional props to pass to the ThemeIcon wrapping the icon.
|
|
@@ -318,6 +302,10 @@ interface ActionCommonProps extends ButtonProps {
|
|
|
318
302
|
* Visual intent of the action button.
|
|
319
303
|
*/
|
|
320
304
|
intent?: "primary" | "success" | "danger" | "warning" | "info" | "none";
|
|
305
|
+
/**
|
|
306
|
+
* Active state styling for navigation actions. When set, the button will apply active styles based on the current route.
|
|
307
|
+
*/
|
|
308
|
+
variant?: ButtonProps["variant"] | "minimal";
|
|
321
309
|
}
|
|
322
310
|
type ActionProps = ActionCommonProps & (ActionNavigationButtonProps | ActionClickButtonProps | ActionSubmitButtonProps | ActionHookButtonProps | {});
|
|
323
311
|
interface ActionSubmitButtonProps extends ButtonProps {
|
|
@@ -346,7 +334,7 @@ interface ActionNavigationButtonProps extends ButtonProps {
|
|
|
346
334
|
//#region ../../src/core/form/utils/parseInput.d.ts
|
|
347
335
|
interface GenericControlProps {
|
|
348
336
|
input: BaseInputField;
|
|
349
|
-
|
|
337
|
+
label?: string;
|
|
350
338
|
description?: string;
|
|
351
339
|
icon?: ReactElement | ((props: {
|
|
352
340
|
size: number;
|
|
@@ -433,12 +421,51 @@ type SelectValueLabel = string | {
|
|
|
433
421
|
icon?: string;
|
|
434
422
|
};
|
|
435
423
|
interface ControlSelectProps extends GenericControlProps {
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
424
|
+
/**
|
|
425
|
+
* If true, allows creating new values not present in the options list.
|
|
426
|
+
* For single values, Select becomes an Autocomplete.
|
|
427
|
+
* For arrays, MultiSelect becomes a TagsInput.
|
|
428
|
+
*/
|
|
429
|
+
creatable?: boolean;
|
|
430
|
+
/**
|
|
431
|
+
* Configure select with optional SelectProps.
|
|
432
|
+
*/
|
|
433
|
+
selectProps?: boolean | SelectProps;
|
|
434
|
+
/**
|
|
435
|
+
* Configure select as multi-select (for array of enums) with optional MultiSelectProps.
|
|
436
|
+
*/
|
|
437
|
+
multiSelectProps?: boolean | MultiSelectProps;
|
|
438
|
+
/**
|
|
439
|
+
* If true, renders a SegmentedControl instead of Select/MultiSelect.
|
|
440
|
+
*/
|
|
441
|
+
segmentedProps?: boolean | Partial<SegmentedControlProps>;
|
|
442
|
+
/**
|
|
443
|
+
* Props passed to the Autocomplete component when creatable is true and the field is single-value.
|
|
444
|
+
*/
|
|
445
|
+
autocompleteProps?: Partial<AutocompleteProps>;
|
|
446
|
+
/**
|
|
447
|
+
* Props passed to the TagsInput component when creatable is true and the field is array-value.
|
|
448
|
+
*/
|
|
449
|
+
tagsInputProps?: Partial<TagsInputProps>;
|
|
450
|
+
/**
|
|
451
|
+
* Async loader for select options.
|
|
452
|
+
*
|
|
453
|
+
* @param search - Search text (empty string on initial load)
|
|
454
|
+
* @param resolve - Optional array of values to resolve labels for (used for default values in long mode)
|
|
455
|
+
*/
|
|
456
|
+
loader?: (search: string, resolve?: string[]) => Async<SelectValueLabel[]>;
|
|
457
|
+
/**
|
|
458
|
+
* Threshold to distinguish short (client-filtered) from long (server-filtered) lists.
|
|
459
|
+
* If initial load returns <= threshold items, mode is "short" (cached, client-filtered).
|
|
460
|
+
* If > threshold, mode is "long" (debounced server search).
|
|
461
|
+
* @default 100
|
|
462
|
+
*/
|
|
463
|
+
loaderThreshold?: number;
|
|
464
|
+
/**
|
|
465
|
+
* Debounce delay in ms for server search in long mode.
|
|
466
|
+
* @default 300
|
|
467
|
+
*/
|
|
468
|
+
loaderDebounce?: number;
|
|
442
469
|
}
|
|
443
470
|
//#endregion
|
|
444
471
|
//#region ../../src/core/form/components/Control.d.ts
|
|
@@ -462,7 +489,7 @@ interface ControlProps extends GenericControlProps {
|
|
|
462
489
|
segmented?: boolean;
|
|
463
490
|
}
|
|
464
491
|
type CustomControlProps = {
|
|
465
|
-
|
|
492
|
+
value: any;
|
|
466
493
|
onChange: (value: any) => void;
|
|
467
494
|
};
|
|
468
495
|
//#endregion
|
|
@@ -540,38 +567,50 @@ interface UserButtonProps extends Omit<ActionProps, "menu" | "icon" | "onClick">
|
|
|
540
567
|
* Menu configuration overrides
|
|
541
568
|
*/
|
|
542
569
|
menuConfig?: Partial<Omit<ActionMenuConfig, "items">>;
|
|
543
|
-
/**
|
|
544
|
-
* Whether to show a divider before logout (default: true when menuItems provided)
|
|
545
|
-
*/
|
|
546
|
-
showLogoutDivider?: boolean;
|
|
547
570
|
/**
|
|
548
571
|
* Custom icon to use instead of user avatar (default: IconUser)
|
|
549
572
|
*/
|
|
550
573
|
icon?: ReactNode;
|
|
574
|
+
/**
|
|
575
|
+
* If true, the profile link will not be shown in the menu even if a userProfile page exists and the user is authenticated.
|
|
576
|
+
*/
|
|
577
|
+
skipProfile?: boolean;
|
|
551
578
|
}
|
|
552
579
|
declare const UserButton: (props: UserButtonProps) => react_jsx_runtime0.JSX.Element;
|
|
553
580
|
//#endregion
|
|
554
581
|
//#region ../../src/auth/components/Login.d.ts
|
|
555
582
|
interface LoginProps {
|
|
556
583
|
realmConfig: RealmConfig;
|
|
584
|
+
registerPath?: string;
|
|
585
|
+
resetPasswordPath?: string;
|
|
586
|
+
variant?: "card" | "split";
|
|
587
|
+
image?: string;
|
|
557
588
|
}
|
|
558
589
|
declare const Login: (props: LoginProps) => react_jsx_runtime0.JSX.Element;
|
|
559
590
|
//#endregion
|
|
560
591
|
//#region ../../src/auth/components/Register.d.ts
|
|
561
592
|
interface RegisterProps {
|
|
562
593
|
realmConfig: RealmConfig;
|
|
594
|
+
loginPath?: string;
|
|
595
|
+
variant?: "card" | "split";
|
|
596
|
+
image?: string;
|
|
563
597
|
}
|
|
564
598
|
declare const Register: (props: RegisterProps) => react_jsx_runtime0.JSX.Element;
|
|
565
599
|
//#endregion
|
|
566
600
|
//#region ../../src/auth/components/ResetPassword.d.ts
|
|
567
601
|
interface ResetPasswordProps {
|
|
568
602
|
realmConfig: RealmConfig;
|
|
603
|
+
loginPath?: string;
|
|
569
604
|
}
|
|
570
605
|
declare const ResetPassword: (props: ResetPasswordProps) => react_jsx_runtime0.JSX.Element;
|
|
571
606
|
//#endregion
|
|
572
607
|
//#region ../../src/auth/components/VerifyEmail.d.ts
|
|
573
|
-
type
|
|
574
|
-
|
|
608
|
+
type VerifyEmailStep = "verifying" | "success" | "error";
|
|
609
|
+
interface VerifyEmailProps {
|
|
610
|
+
loginPath?: string;
|
|
611
|
+
step?: VerifyEmailStep;
|
|
612
|
+
}
|
|
613
|
+
declare const VerifyEmail: (props: VerifyEmailProps) => react_jsx_runtime0.JSX.Element;
|
|
575
614
|
//#endregion
|
|
576
615
|
//#region ../../src/auth/primitives/$uiAuth.d.ts
|
|
577
616
|
/**
|
|
@@ -594,5 +633,5 @@ declare const $uiAuth: () => AuthRouter;
|
|
|
594
633
|
*/
|
|
595
634
|
declare const AlephaUIAuth: alepha.Service<alepha.Module>;
|
|
596
635
|
//#endregion
|
|
597
|
-
export { $uiAuth, AlephaUIAuth, AuthRouter, Login, Register, ResetPassword, UserButton, type UserButtonProps, VerifyEmail };
|
|
636
|
+
export { $uiAuth, AlephaUIAuth, AuthRouter, Login, Register, ResetPassword, UserButton, type UserButtonProps, VerifyEmail, type VerifyEmailStep };
|
|
598
637
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/auth/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/auth/AuthRouter.ts","../../src/core/atoms/alephaSidebarAtom.ts","../../src/core/atoms/alephaThemeAtom.ts","../../src/core/atoms/alephaThemeOverridesAtom.ts","../../src/core/components/buttons/ActionButton.tsx","../../src/core/form/utils/parseInput.ts","../../src/core/form/components/ControlArray.tsx","../../src/core/form/components/ControlNumber.tsx","../../src/core/form/components/ControlObject.tsx","../../src/core/form/components/ControlSelect.tsx","../../src/core/form/components/Control.tsx","../../src/core/form/index.ts","../../src/core/index.ts","../../src/auth/components/buttons/UserButton.tsx","../../src/auth/components/Login.tsx","../../src/auth/components/Register.tsx","../../src/auth/components/ResetPassword.tsx","../../src/auth/components/VerifyEmail.tsx","../../src/auth/primitives/$uiAuth.ts","../../src/auth/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/auth/AuthRouter.ts","../../src/core/atoms/alephaSidebarAtom.ts","../../src/core/atoms/alephaThemeAtom.ts","../../src/core/atoms/alephaThemeOverridesAtom.ts","../../src/core/components/buttons/ActionButton.tsx","../../src/core/form/utils/parseInput.ts","../../src/core/form/components/ControlArray.tsx","../../src/core/form/components/ControlNumber.tsx","../../src/core/form/components/ControlObject.tsx","../../src/core/form/components/ControlSelect.tsx","../../src/core/form/components/Control.tsx","../../src/core/form/index.ts","../../src/core/index.ts","../../src/auth/components/buttons/UserButton.tsx","../../src/auth/components/Login.tsx","../../src/auth/components/Register.tsx","../../src/auth/components/ResetPassword.tsx","../../src/auth/components/VerifyEmail.tsx","../../src/auth/primitives/$uiAuth.ts","../../src/auth/index.ts"],"mappings":"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"}
|
package/dist/auth/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { a as ui, i as ActionButton, t as AlephaUI } from "./core-
|
|
2
|
-
import "./IconGoogle-
|
|
3
|
-
import { t as Login } from "./Login-
|
|
4
|
-
import { t as Register } from "./Register-
|
|
5
|
-
import { t as ResetPassword } from "./ResetPassword-
|
|
6
|
-
import { t as VerifyEmail } from "./VerifyEmail-
|
|
1
|
+
import { a as ui, i as ActionButton, t as AlephaUI } from "./core-C6D3pazL.js";
|
|
2
|
+
import "./IconGoogle-8Nkx6yax.js";
|
|
3
|
+
import { t as Login } from "./Login-DJyweoPS.js";
|
|
4
|
+
import { t as Register } from "./Register-CSqzzitW.js";
|
|
5
|
+
import { t as ResetPassword } from "./ResetPassword-B61QPlQi.js";
|
|
6
|
+
import { t as VerifyEmail } from "./VerifyEmail-CqBJ11id.js";
|
|
7
7
|
import { $context, $inject, $module, AlephaError, t } from "alepha";
|
|
8
8
|
import { $dictionary, AlephaReactI18n } from "alepha/react/i18n";
|
|
9
9
|
import { Avatar } from "@mantine/core";
|
|
@@ -13,7 +13,6 @@ import { $page, ReactPageProvider, Redirection, useRouter } from "alepha/react/r
|
|
|
13
13
|
import { useClient, useInject } from "alepha/react";
|
|
14
14
|
import { AlephaReactAuth, ReactAuth, useAuth } from "alepha/react/auth";
|
|
15
15
|
import { $client } from "alepha/server/links";
|
|
16
|
-
|
|
17
16
|
//#region ../../src/auth/AuthI18n.ts
|
|
18
17
|
var AuthI18n = class {
|
|
19
18
|
en = $dictionary({
|
|
@@ -130,7 +129,6 @@ var AuthI18n = class {
|
|
|
130
129
|
verifyEmailBackToSignIn: "Retour à la connexion"
|
|
131
130
|
} }) });
|
|
132
131
|
};
|
|
133
|
-
|
|
134
132
|
//#endregion
|
|
135
133
|
//#region ../../src/auth/AuthRouter.ts
|
|
136
134
|
/**
|
|
@@ -146,7 +144,7 @@ var AuthRouter = class {
|
|
|
146
144
|
authLayout = $page({
|
|
147
145
|
label: "Auth",
|
|
148
146
|
path: "/auth",
|
|
149
|
-
lazy: () => import("./AuthLayout-
|
|
147
|
+
lazy: () => import("./AuthLayout-CfRKcTqP.js"),
|
|
150
148
|
children: () => [
|
|
151
149
|
this.login,
|
|
152
150
|
this.register,
|
|
@@ -161,7 +159,7 @@ var AuthRouter = class {
|
|
|
161
159
|
description: "Sign in to your account",
|
|
162
160
|
path: "/login",
|
|
163
161
|
schema: { query: realmQuerySchema },
|
|
164
|
-
lazy: () => import("./Login-
|
|
162
|
+
lazy: () => import("./Login-DJyweoPS.js").then((n) => n.n),
|
|
165
163
|
loader: async ({ query, user }) => {
|
|
166
164
|
if (user) throw new Redirection(query.r || "/");
|
|
167
165
|
return { realmConfig: await this.loadRealmConfig(query.realm) };
|
|
@@ -173,7 +171,7 @@ var AuthRouter = class {
|
|
|
173
171
|
description: "Create a new account",
|
|
174
172
|
path: "/register",
|
|
175
173
|
schema: { query: realmQuerySchema },
|
|
176
|
-
lazy: () => import("./Register-
|
|
174
|
+
lazy: () => import("./Register-CSqzzitW.js").then((n) => n.n),
|
|
177
175
|
loader: async ({ query, user }) => {
|
|
178
176
|
if (user) throw new Redirection(query.r || "/");
|
|
179
177
|
return { realmConfig: await this.loadRealmConfig(query.realm) };
|
|
@@ -185,7 +183,7 @@ var AuthRouter = class {
|
|
|
185
183
|
description: "Reset your account password",
|
|
186
184
|
path: "/reset-password",
|
|
187
185
|
schema: { query: realmQuerySchema },
|
|
188
|
-
lazy: () => import("./ResetPassword-
|
|
186
|
+
lazy: () => import("./ResetPassword-B61QPlQi.js").then((n) => n.n),
|
|
189
187
|
loader: async ({ query, user }) => {
|
|
190
188
|
if (user) throw new Redirection(query.r || "/");
|
|
191
189
|
return { realmConfig: await this.loadRealmConfig(query.realm) };
|
|
@@ -200,7 +198,7 @@ var AuthRouter = class {
|
|
|
200
198
|
email: t.optional(t.string()),
|
|
201
199
|
token: t.optional(t.string())
|
|
202
200
|
}) },
|
|
203
|
-
lazy: () => import("./VerifyEmail-
|
|
201
|
+
lazy: () => import("./VerifyEmail-CqBJ11id.js").then((n) => n.n)
|
|
204
202
|
});
|
|
205
203
|
logout = $page({
|
|
206
204
|
icon: IconLogout2,
|
|
@@ -220,7 +218,7 @@ var AuthRouter = class {
|
|
|
220
218
|
description: "View your profile",
|
|
221
219
|
path: "/profile",
|
|
222
220
|
can: () => !!this.auth.user,
|
|
223
|
-
lazy: () => import("./Profile-
|
|
221
|
+
lazy: () => import("./Profile-Cy93pNTw.js")
|
|
224
222
|
});
|
|
225
223
|
async loadRealmConfig(realmName) {
|
|
226
224
|
try {
|
|
@@ -231,11 +229,10 @@ var AuthRouter = class {
|
|
|
231
229
|
}
|
|
232
230
|
}
|
|
233
231
|
};
|
|
234
|
-
|
|
235
232
|
//#endregion
|
|
236
233
|
//#region ../../src/auth/components/buttons/UserButton.tsx
|
|
237
234
|
const UserButton = (props) => {
|
|
238
|
-
const { menuItems = [], logoutLabel = "Sign out", loginLabel, menuConfig,
|
|
235
|
+
const { menuItems = [], logoutLabel = "Sign out", loginLabel, menuConfig, icon, skipProfile = false, children, ...buttonProps } = props;
|
|
239
236
|
buttonProps.variant ??= "default";
|
|
240
237
|
const adminUserCtrl = useClient();
|
|
241
238
|
const pages = useInject(ReactPageProvider);
|
|
@@ -256,21 +253,21 @@ const UserButton = (props) => {
|
|
|
256
253
|
type: "label",
|
|
257
254
|
label: auth.user.email
|
|
258
255
|
});
|
|
259
|
-
if (userPage && isConnected) items.push({
|
|
256
|
+
if (userPage && isConnected && !skipProfile) items.push({
|
|
260
257
|
label: "Profile",
|
|
261
|
-
icon: /* @__PURE__ */ jsx(IconUser, { size: ui.sizes.icon.
|
|
258
|
+
icon: /* @__PURE__ */ jsx(IconUser, { size: ui.sizes.icon.sm }),
|
|
262
259
|
href: authRouter.path("userProfile")
|
|
263
260
|
});
|
|
264
261
|
if (adminPage && isAdmin) items.push({
|
|
265
262
|
label: "Admin",
|
|
266
|
-
icon: /* @__PURE__ */ jsx(IconSettings, { size: ui.sizes.icon.
|
|
263
|
+
icon: /* @__PURE__ */ jsx(IconSettings, { size: ui.sizes.icon.sm }),
|
|
267
264
|
href: authRouter.path("adminLayout")
|
|
268
265
|
});
|
|
269
266
|
items.push(...menuItems);
|
|
270
|
-
if (
|
|
267
|
+
if (items.length > 0) items.push({ type: "divider" });
|
|
271
268
|
items.push({
|
|
272
269
|
label: logoutLabel,
|
|
273
|
-
icon: /* @__PURE__ */ jsx(IconLogout, { size: ui.sizes.icon.
|
|
270
|
+
icon: /* @__PURE__ */ jsx(IconLogout, { size: ui.sizes.icon.sm }),
|
|
274
271
|
color: "red",
|
|
275
272
|
onClick: () => auth.logout()
|
|
276
273
|
});
|
|
@@ -278,21 +275,24 @@ const UserButton = (props) => {
|
|
|
278
275
|
return /* @__PURE__ */ jsx(ActionButton, {
|
|
279
276
|
...buttonProps,
|
|
280
277
|
icon: hasAvatar ? void 0 : icon === null ? void 0 : icon ?? IconUser,
|
|
281
|
-
|
|
282
|
-
src: `/api/files/${auth.user.picture}`,
|
|
283
|
-
size: 24,
|
|
284
|
-
radius: "xl"
|
|
285
|
-
}) : void 0,
|
|
278
|
+
px: 8,
|
|
286
279
|
menu: {
|
|
287
|
-
|
|
280
|
+
menuProps: {
|
|
281
|
+
withArrow: true,
|
|
282
|
+
arrowSize: 12
|
|
283
|
+
},
|
|
284
|
+
position: "bottom",
|
|
288
285
|
width: 200,
|
|
289
286
|
...menuConfig,
|
|
290
287
|
items
|
|
291
288
|
},
|
|
292
|
-
children
|
|
289
|
+
children: hasAvatar ? /* @__PURE__ */ jsx(Avatar, {
|
|
290
|
+
src: `/api/files/${auth.user.picture}`,
|
|
291
|
+
size: 24,
|
|
292
|
+
radius: "xl"
|
|
293
|
+
}) : void 0
|
|
293
294
|
});
|
|
294
295
|
};
|
|
295
|
-
|
|
296
296
|
//#endregion
|
|
297
297
|
//#region ../../src/auth/primitives/$uiAuth.ts
|
|
298
298
|
/**
|
|
@@ -302,7 +302,6 @@ const $uiAuth = () => {
|
|
|
302
302
|
const { alepha } = $context();
|
|
303
303
|
return alepha.inject(AuthRouter);
|
|
304
304
|
};
|
|
305
|
-
|
|
306
305
|
//#endregion
|
|
307
306
|
//#region ../../src/auth/index.ts
|
|
308
307
|
/**
|
|
@@ -327,7 +326,7 @@ const AlephaUIAuth = $module({
|
|
|
327
326
|
AuthI18n
|
|
328
327
|
]
|
|
329
328
|
});
|
|
330
|
-
|
|
331
329
|
//#endregion
|
|
332
330
|
export { $uiAuth, AlephaUIAuth, AuthRouter, Login, Register, ResetPassword, UserButton, VerifyEmail };
|
|
331
|
+
|
|
333
332
|
//# sourceMappingURL=index.js.map
|
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/auth/AuthI18n.ts","../../src/auth/AuthRouter.ts","../../src/auth/components/buttons/UserButton.tsx","../../src/auth/primitives/$uiAuth.ts","../../src/auth/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 { $context } from \"alepha\";\nimport { AuthRouter } from \"../AuthRouter.ts\";\n\n/**\n * Register Auth UI components and get the AuthRouter instance.\n */\nexport const $uiAuth = () => {\n const { alepha } = $context();\n return alepha.inject(AuthRouter);\n};\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"],"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/primitives/$uiAuth.ts","../../src/auth/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 { $context } from \"alepha\";\nimport { AuthRouter } from \"../AuthRouter.ts\";\n\n/**\n * Register Auth UI components and get the AuthRouter instance.\n */\nexport const $uiAuth = () => {\n const { alepha } = $context();\n return alepha.inject(AuthRouter);\n};\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"],"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 };
|