@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
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { a as TypeForm,
|
|
1
|
+
import { a as TypeForm, f as Flex$1, l as Text$1 } from "./core-DRtQklr3.js";
|
|
2
2
|
import { useForm } from "alepha/react/form";
|
|
3
|
-
import {
|
|
3
|
+
import { Portal, SegmentedControl, Tooltip } from "@mantine/core";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { useState } from "react";
|
|
6
6
|
import { IconArrowsMaximize, IconDeviceDesktop, IconDeviceMobile, IconDeviceTablet } from "@tabler/icons-react";
|
|
7
|
-
|
|
8
7
|
//#region ../../src/demo/components/shared/MacWindow.tsx
|
|
9
8
|
const DEVICE_WIDTHS = {
|
|
10
9
|
phone: "375px",
|
|
@@ -15,7 +14,7 @@ const DEVICE_WIDTHS = {
|
|
|
15
14
|
const MacWindow = ({ children, title, containerProps }) => {
|
|
16
15
|
const [device, setDevice] = useState("desktop");
|
|
17
16
|
const isFullPage = device === "full";
|
|
18
|
-
const header = /* @__PURE__ */ jsxs(Flex, {
|
|
17
|
+
const header = /* @__PURE__ */ jsxs(Flex$1, {
|
|
19
18
|
h: 36,
|
|
20
19
|
px: "sm",
|
|
21
20
|
align: "center",
|
|
@@ -25,10 +24,10 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
25
24
|
borderBottom: "1px solid var(--mantine-color-default-border)"
|
|
26
25
|
},
|
|
27
26
|
children: [
|
|
28
|
-
/* @__PURE__ */ jsxs(Flex, {
|
|
27
|
+
/* @__PURE__ */ jsxs(Flex$1, {
|
|
29
28
|
gap: 6,
|
|
30
29
|
children: [
|
|
31
|
-
/* @__PURE__ */ jsx(Flex, {
|
|
30
|
+
/* @__PURE__ */ jsx(Flex$1, {
|
|
32
31
|
w: 12,
|
|
33
32
|
h: 12,
|
|
34
33
|
style: {
|
|
@@ -36,7 +35,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
36
35
|
background: "#ff5f57"
|
|
37
36
|
}
|
|
38
37
|
}),
|
|
39
|
-
/* @__PURE__ */ jsx(Flex, {
|
|
38
|
+
/* @__PURE__ */ jsx(Flex$1, {
|
|
40
39
|
w: 12,
|
|
41
40
|
h: 12,
|
|
42
41
|
style: {
|
|
@@ -44,7 +43,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
44
43
|
background: "#febc2e"
|
|
45
44
|
}
|
|
46
45
|
}),
|
|
47
|
-
/* @__PURE__ */ jsx(Flex, {
|
|
46
|
+
/* @__PURE__ */ jsx(Flex$1, {
|
|
48
47
|
w: 12,
|
|
49
48
|
h: 12,
|
|
50
49
|
style: {
|
|
@@ -54,7 +53,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
54
53
|
})
|
|
55
54
|
]
|
|
56
55
|
}),
|
|
57
|
-
/* @__PURE__ */ jsx(Flex, {
|
|
56
|
+
/* @__PURE__ */ jsx(Flex$1, {
|
|
58
57
|
style: {
|
|
59
58
|
flex: 1,
|
|
60
59
|
textAlign: "center",
|
|
@@ -72,7 +71,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
72
71
|
label: /* @__PURE__ */ jsx(Tooltip, {
|
|
73
72
|
label: "Phone (375px)",
|
|
74
73
|
openDelay: 400,
|
|
75
|
-
children: /* @__PURE__ */ jsx(Flex, {
|
|
74
|
+
children: /* @__PURE__ */ jsx(Flex$1, {
|
|
76
75
|
align: "center",
|
|
77
76
|
children: /* @__PURE__ */ jsx(IconDeviceMobile, { size: 14 })
|
|
78
77
|
})
|
|
@@ -83,7 +82,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
83
82
|
label: /* @__PURE__ */ jsx(Tooltip, {
|
|
84
83
|
label: "Tablet (768px)",
|
|
85
84
|
openDelay: 400,
|
|
86
|
-
children: /* @__PURE__ */ jsx(Flex, {
|
|
85
|
+
children: /* @__PURE__ */ jsx(Flex$1, {
|
|
87
86
|
align: "center",
|
|
88
87
|
children: /* @__PURE__ */ jsx(IconDeviceTablet, { size: 14 })
|
|
89
88
|
})
|
|
@@ -94,7 +93,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
94
93
|
label: /* @__PURE__ */ jsx(Tooltip, {
|
|
95
94
|
label: "Desktop (100%)",
|
|
96
95
|
openDelay: 400,
|
|
97
|
-
children: /* @__PURE__ */ jsx(Flex, {
|
|
96
|
+
children: /* @__PURE__ */ jsx(Flex$1, {
|
|
98
97
|
align: "center",
|
|
99
98
|
children: /* @__PURE__ */ jsx(IconDeviceDesktop, { size: 14 })
|
|
100
99
|
})
|
|
@@ -105,7 +104,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
105
104
|
label: /* @__PURE__ */ jsx(Tooltip, {
|
|
106
105
|
label: "Full page",
|
|
107
106
|
openDelay: 400,
|
|
108
|
-
children: /* @__PURE__ */ jsx(Flex, {
|
|
107
|
+
children: /* @__PURE__ */ jsx(Flex$1, {
|
|
109
108
|
align: "center",
|
|
110
109
|
children: /* @__PURE__ */ jsx(IconArrowsMaximize, { size: 14 })
|
|
111
110
|
})
|
|
@@ -116,15 +115,15 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
116
115
|
})
|
|
117
116
|
]
|
|
118
117
|
});
|
|
119
|
-
const body = /* @__PURE__ */ jsx(Flex, {
|
|
118
|
+
const body = /* @__PURE__ */ jsx(Flex$1, {
|
|
119
|
+
overflow: true,
|
|
120
120
|
direction: "column",
|
|
121
121
|
flex: 1,
|
|
122
122
|
p: "md",
|
|
123
|
-
style: { overflow: "auto" },
|
|
124
123
|
...containerProps,
|
|
125
124
|
children
|
|
126
125
|
});
|
|
127
|
-
if (isFullPage) return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs(Flex, {
|
|
126
|
+
if (isFullPage) return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs(Flex$1, {
|
|
128
127
|
direction: "column",
|
|
129
128
|
style: {
|
|
130
129
|
position: "fixed",
|
|
@@ -134,29 +133,30 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
134
133
|
},
|
|
135
134
|
children: [header, body]
|
|
136
135
|
}) });
|
|
137
|
-
return /* @__PURE__ */ jsxs(Flex, {
|
|
138
|
-
|
|
136
|
+
return /* @__PURE__ */ jsxs(Flex$1, {
|
|
137
|
+
col: true,
|
|
138
|
+
overflow: true,
|
|
139
|
+
h: "100%",
|
|
139
140
|
bdrs: "md",
|
|
140
141
|
style: {
|
|
141
142
|
width: DEVICE_WIDTHS[device],
|
|
142
143
|
maxWidth: "100%",
|
|
143
144
|
border: "1px solid var(--mantine-color-default-border)",
|
|
144
145
|
overflow: "hidden",
|
|
145
|
-
background: "var(--mantine-color-body)",
|
|
146
146
|
boxShadow: "0 4px 12px rgba(0, 0, 0, 0.15)",
|
|
147
147
|
transition: "width 0.3s ease"
|
|
148
148
|
},
|
|
149
149
|
children: [header, body]
|
|
150
150
|
});
|
|
151
151
|
};
|
|
152
|
-
|
|
153
152
|
//#endregion
|
|
154
153
|
//#region ../../src/demo/components/shared/Showcase.tsx
|
|
155
154
|
/**
|
|
156
155
|
* Showcase component for demonstrating UI components with interactive props configuration.
|
|
157
156
|
* Uses TypeForm to render a form based on the props schema and displays the component preview.
|
|
158
157
|
*/
|
|
159
|
-
const Showcase = (
|
|
158
|
+
const Showcase = (props) => {
|
|
159
|
+
const { title, schema, initialValues, columns = 3, children, windowProps } = props;
|
|
160
160
|
const [values, setValues] = useState(initialValues ?? {});
|
|
161
161
|
const form = useForm({
|
|
162
162
|
schema,
|
|
@@ -168,65 +168,62 @@ const Showcase = ({ title, schema, initialValues, columns = 3, children, windowP
|
|
|
168
168
|
return form.submit();
|
|
169
169
|
}
|
|
170
170
|
}, [schema]);
|
|
171
|
-
return /* @__PURE__ */ jsxs(Flex, {
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
return /* @__PURE__ */ jsxs(Flex$1, {
|
|
172
|
+
fill: true,
|
|
173
|
+
p: "md",
|
|
174
|
+
pt: 0,
|
|
174
175
|
gap: "md",
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
176
|
+
overflow: true,
|
|
177
|
+
children: [/* @__PURE__ */ jsx(Flex$1, {
|
|
178
|
+
fill: true,
|
|
179
|
+
overflow: true,
|
|
180
|
+
ground: true,
|
|
178
181
|
h: "100%",
|
|
179
182
|
justify: "center",
|
|
180
183
|
align: "flex-start",
|
|
181
|
-
style: {
|
|
182
|
-
flex: 1,
|
|
183
|
-
minWidth: 0,
|
|
184
|
-
overflow: "auto"
|
|
185
|
-
},
|
|
186
184
|
children: /* @__PURE__ */ jsx(MacWindow, {
|
|
187
185
|
title,
|
|
188
186
|
...windowProps,
|
|
189
187
|
children: children(values)
|
|
190
188
|
})
|
|
191
|
-
}), /* @__PURE__ */
|
|
189
|
+
}), /* @__PURE__ */ jsxs(Flex$1, {
|
|
192
190
|
h: "100%",
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
})
|
|
191
|
+
col: true,
|
|
192
|
+
surface: true,
|
|
193
|
+
bordered: true,
|
|
194
|
+
rounded: true,
|
|
195
|
+
shadowed: true,
|
|
196
|
+
w: 300,
|
|
197
|
+
children: [/* @__PURE__ */ jsx(Flex$1, {
|
|
198
|
+
p: "xs",
|
|
199
|
+
borderedBottom: true,
|
|
200
|
+
children: /* @__PURE__ */ jsxs(Text$1, {
|
|
201
|
+
size: "xs",
|
|
202
|
+
fw: 500,
|
|
203
|
+
children: [title, " Props"]
|
|
204
|
+
})
|
|
205
|
+
}), /* @__PURE__ */ jsx(Flex$1, {
|
|
206
|
+
px: "md",
|
|
207
|
+
py: "xs",
|
|
208
|
+
children: /* @__PURE__ */ jsx(TypeForm, {
|
|
209
|
+
fill: true,
|
|
210
|
+
form,
|
|
211
|
+
columns: {
|
|
212
|
+
base: 1,
|
|
213
|
+
xs: 1,
|
|
214
|
+
sm: 1,
|
|
215
|
+
md: 1,
|
|
216
|
+
lg: 1,
|
|
217
|
+
xl: 1
|
|
218
|
+
},
|
|
219
|
+
skipSubmitButton: true,
|
|
220
|
+
skipFormElement: true
|
|
221
|
+
})
|
|
222
|
+
})]
|
|
226
223
|
})]
|
|
227
224
|
});
|
|
228
225
|
};
|
|
229
|
-
|
|
230
226
|
//#endregion
|
|
231
227
|
export { Showcase as t };
|
|
232
|
-
|
|
228
|
+
|
|
229
|
+
//# sourceMappingURL=Showcase-D49Wud2v.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Showcase-D49Wud2v.js","names":["Flex","Flex","Text"],"sources":["../../src/demo/components/shared/MacWindow.tsx","../../src/demo/components/shared/Showcase.tsx"],"sourcesContent":["import { Flex } from \"@alepha/ui\";\nimport {\n type FlexProps,\n Portal,\n SegmentedControl,\n Tooltip,\n} from \"@mantine/core\";\nimport {\n IconArrowsMaximize,\n IconDeviceDesktop,\n IconDeviceMobile,\n IconDeviceTablet,\n} from \"@tabler/icons-react\";\nimport { type ReactNode, useState } from \"react\";\nexport interface MacWindowProps {\n children: ReactNode;\n title?: string;\n containerProps?: FlexProps;\n}\n\ntype DeviceSize = \"phone\" | \"tablet\" | \"desktop\" | \"full\";\n\nconst DEVICE_WIDTHS: Record<DeviceSize, string> = {\n phone: \"375px\",\n tablet: \"768px\",\n desktop: \"100%\",\n full: \"100%\",\n};\n\nconst MacWindow = ({ children, title, containerProps }: MacWindowProps) => {\n const [device, setDevice] = useState<DeviceSize>(\"desktop\");\n const isFullPage = device === \"full\";\n\n const controls = (\n <SegmentedControl\n size=\"xs\"\n value={device}\n onChange={(v) => setDevice(v as DeviceSize)}\n data={[\n {\n label: (\n <Tooltip label=\"Phone (375px)\" openDelay={400}>\n <Flex align=\"center\">\n <IconDeviceMobile size={14} />\n </Flex>\n </Tooltip>\n ),\n value: \"phone\",\n },\n {\n label: (\n <Tooltip label=\"Tablet (768px)\" openDelay={400}>\n <Flex align=\"center\">\n <IconDeviceTablet size={14} />\n </Flex>\n </Tooltip>\n ),\n value: \"tablet\",\n },\n {\n label: (\n <Tooltip label=\"Desktop (100%)\" openDelay={400}>\n <Flex align=\"center\">\n <IconDeviceDesktop size={14} />\n </Flex>\n </Tooltip>\n ),\n value: \"desktop\",\n },\n {\n label: (\n <Tooltip label=\"Full page\" openDelay={400}>\n <Flex align=\"center\">\n <IconArrowsMaximize size={14} />\n </Flex>\n </Tooltip>\n ),\n value: \"full\",\n },\n ]}\n />\n );\n\n const header = (\n <Flex\n h={36}\n px=\"sm\"\n align=\"center\"\n gap={8}\n style={{\n background: \"var(--mantine-color-default)\",\n borderBottom: \"1px solid var(--mantine-color-default-border)\",\n }}\n >\n <Flex gap={6}>\n <Flex\n w={12}\n h={12}\n style={{ borderRadius: \"50%\", background: \"#ff5f57\" }}\n />\n <Flex\n w={12}\n h={12}\n style={{ borderRadius: \"50%\", background: \"#febc2e\" }}\n />\n <Flex\n w={12}\n h={12}\n style={{ borderRadius: \"50%\", background: \"#28c840\" }}\n />\n </Flex>\n\n <Flex\n style={{\n flex: 1,\n textAlign: \"center\",\n fontSize: 13,\n color: \"var(--mantine-color-dimmed)\",\n }}\n >\n {title}\n </Flex>\n\n {controls}\n </Flex>\n );\n\n const body = (\n <Flex overflow direction={\"column\"} flex={1} p=\"md\" {...containerProps}>\n {children}\n </Flex>\n );\n\n if (isFullPage) {\n return (\n <Portal>\n <Flex\n direction=\"column\"\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 1000,\n background: \"var(--mantine-color-body)\",\n }}\n >\n {header}\n {body}\n </Flex>\n </Portal>\n );\n }\n\n return (\n <Flex\n col\n overflow\n h={\"100%\"}\n bdrs={\"md\"}\n style={{\n width: DEVICE_WIDTHS[device],\n maxWidth: \"100%\",\n border: \"1px solid var(--mantine-color-default-border)\",\n overflow: \"hidden\",\n boxShadow: \"0 4px 12px rgba(0, 0, 0, 0.15)\",\n transition: \"width 0.3s ease\",\n }}\n >\n {header}\n {body}\n </Flex>\n );\n};\n\nexport default MacWindow;\n","import { Flex, Text, TypeForm } from \"@alepha/ui\";\nimport type { Static, TObject } from \"alepha\";\nimport { useForm } from \"alepha/react/form\";\nimport { type ReactNode, useState } from \"react\";\nimport MacWindow, { type MacWindowProps } from \"./MacWindow.tsx\";\n\nexport interface ShowcaseProps<T extends TObject> {\n /**\n * Component title\n */\n title: string;\n /**\n * Schema for the props configuration\n */\n schema: T;\n /**\n * Initial values for the props\n */\n initialValues?: Partial<Static<T>>;\n /**\n * Number of columns for the props form\n */\n columns?: number;\n /**\n * Render function that receives the current props values\n */\n children: (props: Static<T>) => ReactNode;\n /**\n * Additional props for the MacWindow container\n */\n windowProps?: Partial<MacWindowProps>;\n}\n\n/**\n * Showcase component for demonstrating UI components with interactive props configuration.\n * Uses TypeForm to render a form based on the props schema and displays the component preview.\n */\nconst Showcase = <T extends TObject>(props: ShowcaseProps<T>) => {\n const {\n title,\n schema,\n initialValues,\n columns = 3,\n children,\n windowProps,\n } = props;\n\n const [values, setValues] = useState<Record<string, any>>(\n initialValues ?? {},\n );\n\n const form = useForm(\n {\n schema,\n initialValues,\n handler: (values) => {\n setValues(values as Record<string, any>);\n },\n onChange: (key, value) => {\n return form.submit();\n },\n },\n [schema],\n );\n\n return (\n <Flex fill p={\"md\"} pt={0} gap={\"md\"} overflow>\n <Flex fill overflow ground h={\"100%\"} justify=\"center\" align=\"flex-start\">\n <MacWindow title={title} {...windowProps}>\n {children(values as Static<T>)}\n </MacWindow>\n </Flex>\n\n <Flex h={\"100%\"} col surface bordered rounded shadowed w={300}>\n <Flex p={\"xs\"} borderedBottom>\n <Text size={\"xs\"} fw={500}>\n {title} Props\n </Text>\n </Flex>\n <Flex px={\"md\"} py={\"xs\"}>\n <TypeForm\n fill\n form={form}\n columns={{ base: 1, xs: 1, sm: 1, md: 1, lg: 1, xl: 1 }}\n skipSubmitButton\n skipFormElement\n />\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nexport default Showcase;\n"],"mappings":"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"}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import { t as __exportAll } from "./rolldown-runtime-
|
|
2
|
-
import {
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-CiIaOW0V.js";
|
|
2
|
+
import { h as ActionButton } from "./core-DRtQklr3.js";
|
|
3
3
|
import { useI18n } from "alepha/react/i18n";
|
|
4
4
|
import { Alert, Card, Flex, Loader, Text } from "@mantine/core";
|
|
5
5
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import { useEffect, useState } from "react";
|
|
7
7
|
import { IconAlertCircle, IconCheck, IconMailCheck } from "@tabler/icons-react";
|
|
8
|
-
import {
|
|
8
|
+
import { useRouterState } from "alepha/react/router";
|
|
9
9
|
import { useClient } from "alepha/react";
|
|
10
|
-
|
|
11
10
|
//#region ../../src/auth/components/VerifyEmail.tsx
|
|
12
11
|
var VerifyEmail_exports = /* @__PURE__ */ __exportAll({ default: () => VerifyEmail });
|
|
13
|
-
const
|
|
14
|
-
const router = useRouter();
|
|
12
|
+
const VerifyEmailStateful = (props) => {
|
|
15
13
|
const state = useRouterState();
|
|
16
14
|
const userCtrl = useClient();
|
|
17
15
|
const { tr } = useI18n();
|
|
@@ -39,6 +37,15 @@ const VerifyEmail = (_props) => {
|
|
|
39
37
|
};
|
|
40
38
|
verify();
|
|
41
39
|
}, [email, token]);
|
|
40
|
+
return /* @__PURE__ */ jsx(VerifyEmailView, {
|
|
41
|
+
step,
|
|
42
|
+
error,
|
|
43
|
+
loginPath: props.loginPath
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
const VerifyEmailView = (props) => {
|
|
47
|
+
const { tr } = useI18n();
|
|
48
|
+
const { step } = props;
|
|
42
49
|
return /* @__PURE__ */ jsx(Flex, {
|
|
43
50
|
flex: 1,
|
|
44
51
|
justify: "center",
|
|
@@ -92,7 +99,7 @@ const VerifyEmail = (_props) => {
|
|
|
92
99
|
})
|
|
93
100
|
}),
|
|
94
101
|
/* @__PURE__ */ jsx(ActionButton, {
|
|
95
|
-
href:
|
|
102
|
+
href: props.loginPath ?? "/auth/login",
|
|
96
103
|
fullWidth: true,
|
|
97
104
|
children: tr("verifyEmailSignIn")
|
|
98
105
|
})
|
|
@@ -114,11 +121,11 @@ const VerifyEmail = (_props) => {
|
|
|
114
121
|
icon: /* @__PURE__ */ jsx(IconAlertCircle, {}),
|
|
115
122
|
children: /* @__PURE__ */ jsx(Text, {
|
|
116
123
|
size: "sm",
|
|
117
|
-
children: error || tr("verifyEmailFailed")
|
|
124
|
+
children: props.error || tr("verifyEmailFailed")
|
|
118
125
|
})
|
|
119
126
|
}),
|
|
120
127
|
/* @__PURE__ */ jsx(ActionButton, {
|
|
121
|
-
href:
|
|
128
|
+
href: props.loginPath ?? "/auth/login",
|
|
122
129
|
fullWidth: true,
|
|
123
130
|
children: tr("verifyEmailBackToSignIn")
|
|
124
131
|
})
|
|
@@ -129,7 +136,14 @@ const VerifyEmail = (_props) => {
|
|
|
129
136
|
})
|
|
130
137
|
});
|
|
131
138
|
};
|
|
132
|
-
|
|
139
|
+
const VerifyEmail = (props) => {
|
|
140
|
+
if (props.step) return /* @__PURE__ */ jsx(VerifyEmailView, {
|
|
141
|
+
step: props.step,
|
|
142
|
+
loginPath: props.loginPath
|
|
143
|
+
});
|
|
144
|
+
return /* @__PURE__ */ jsx(VerifyEmailStateful, { ...props });
|
|
145
|
+
};
|
|
133
146
|
//#endregion
|
|
134
147
|
export { VerifyEmail_exports as n, VerifyEmail as t };
|
|
135
|
-
|
|
148
|
+
|
|
149
|
+
//# sourceMappingURL=VerifyEmail-BFCAFz6T.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VerifyEmail-BFCAFz6T.js","names":[],"sources":["../../src/auth/components/VerifyEmail.tsx"],"sourcesContent":["import { ActionButton } from \"@alepha/ui\";\nimport { Alert, Card, Flex, Loader, Text } from \"@mantine/core\";\nimport { IconAlertCircle, IconCheck, IconMailCheck } from \"@tabler/icons-react\";\nimport type { UserController } from \"alepha/api/users\";\nimport { useClient } from \"alepha/react\";\nimport { useI18n } from \"alepha/react/i18n\";\nimport { useRouterState } from \"alepha/react/router\";\nimport { useEffect, useState } from \"react\";\nimport type { AuthI18n } from \"../AuthI18n.ts\";\n\nexport type VerifyEmailStep = \"verifying\" | \"success\" | \"error\";\n\nexport interface VerifyEmailProps {\n loginPath?: string;\n step?: VerifyEmailStep;\n}\n\nconst VerifyEmailStateful = (props: VerifyEmailProps) => {\n const state = useRouterState();\n const userCtrl = useClient<UserController>();\n const { tr } = useI18n<AuthI18n, \"en\">();\n\n const [step, setStep] = useState<VerifyEmailStep>(\"verifying\");\n const [error, setError] = useState<string | null>(null);\n\n const email = state.query.email as string | undefined;\n const token = state.query.token as string | undefined;\n\n useEffect(() => {\n const verify = async () => {\n if (!email || !token) {\n setError(tr(\"verifyEmailMissingParams\"));\n setStep(\"error\");\n return;\n }\n\n try {\n await userCtrl.verifyEmail({\n body: { email, token },\n });\n setStep(\"success\");\n } catch (err) {\n setError(err instanceof Error ? err.message : tr(\"verifyEmailFailed\"));\n setStep(\"error\");\n }\n };\n\n verify();\n }, [email, token]);\n\n return (\n <VerifyEmailView step={step} error={error} loginPath={props.loginPath} />\n );\n};\n\ninterface VerifyEmailViewProps {\n step: VerifyEmailStep;\n error?: string | null;\n loginPath?: string;\n}\n\nconst VerifyEmailView = (props: VerifyEmailViewProps) => {\n const { tr } = useI18n<AuthI18n, \"en\">();\n const { step } = props;\n\n return (\n <Flex flex={1} justify=\"center\" align=\"center\">\n <Flex direction=\"column\" gap=\"sm\" w={400}>\n <Card withBorder p=\"lg\" bg=\"var(--alepha-elevated)\">\n <Flex direction=\"column\" gap=\"md\" align=\"center\">\n {step === \"verifying\" && (\n <>\n <Loader size=\"lg\" />\n <Text size=\"lg\" fw={500} ta=\"center\">\n {tr(\"verifyEmailVerifying\")}\n </Text>\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\">\n {tr(\"verifyEmailPleaseWait\")}\n </Text>\n </>\n )}\n\n {step === \"success\" && (\n <>\n <IconMailCheck size={48} color=\"var(--mantine-color-green-6)\" />\n <Text size=\"lg\" fw={500} ta=\"center\">\n {tr(\"verifyEmailTitle\")}\n </Text>\n <Alert variant=\"light\" color=\"green\" icon={<IconCheck />}>\n <Text size=\"sm\">{tr(\"verifyEmailSuccess\")}</Text>\n </Alert>\n <ActionButton href={props.loginPath ?? \"/auth/login\"} fullWidth>\n {tr(\"verifyEmailSignIn\")}\n </ActionButton>\n </>\n )}\n\n {step === \"error\" && (\n <>\n <IconAlertCircle size={48} color=\"var(--mantine-color-red-6)\" />\n <Text size=\"lg\" fw={500} ta=\"center\">\n {tr(\"verifyEmailTitle\")}\n </Text>\n <Alert variant=\"light\" color=\"red\" icon={<IconAlertCircle />}>\n <Text size=\"sm\">\n {props.error || tr(\"verifyEmailFailed\")}\n </Text>\n </Alert>\n <ActionButton href={props.loginPath ?? \"/auth/login\"} fullWidth>\n {tr(\"verifyEmailBackToSignIn\")}\n </ActionButton>\n </>\n )}\n </Flex>\n </Card>\n </Flex>\n </Flex>\n );\n};\n\nconst VerifyEmail = (props: VerifyEmailProps) => {\n if (props.step) {\n return <VerifyEmailView step={props.step} loginPath={props.loginPath} />;\n }\n return <VerifyEmailStateful {...props} />;\n};\n\nexport default VerifyEmail;\n"],"mappings":"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"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { t as AlephaUI } from "./core-
|
|
2
|
-
import { $
|
|
1
|
+
import { t as AlephaUI } from "./core-DRtQklr3.js";
|
|
2
|
+
import { $inject, $module, AlephaError, t } from "alepha";
|
|
3
3
|
import { $dictionary, AlephaReactI18n } from "alepha/react/i18n";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import { IconLogin2, IconLogout2, IconMailCheck, IconPasswordUser,
|
|
7
|
-
import { $page, Redirection
|
|
8
|
-
import
|
|
9
|
-
import { AlephaReactAuth, ReactAuth
|
|
4
|
+
import "@mantine/core";
|
|
5
|
+
import "react/jsx-runtime";
|
|
6
|
+
import { IconLogin2, IconLogout2, IconMailCheck, IconPasswordUser, IconUser, IconUserPlus } from "@tabler/icons-react";
|
|
7
|
+
import { $page, Redirection } from "alepha/react/router";
|
|
8
|
+
import "alepha/react";
|
|
9
|
+
import { AlephaReactAuth, ReactAuth } from "alepha/react/auth";
|
|
10
10
|
import { $client } from "alepha/server/links";
|
|
11
|
-
|
|
12
11
|
//#region ../../src/auth/AuthI18n.ts
|
|
13
12
|
var AuthI18n = class {
|
|
14
13
|
en = $dictionary({
|
|
@@ -125,7 +124,6 @@ var AuthI18n = class {
|
|
|
125
124
|
verifyEmailBackToSignIn: "Retour à la connexion"
|
|
126
125
|
} }) });
|
|
127
126
|
};
|
|
128
|
-
|
|
129
127
|
//#endregion
|
|
130
128
|
//#region ../../src/auth/AuthRouter.ts
|
|
131
129
|
/**
|
|
@@ -141,7 +139,7 @@ var AuthRouter = class {
|
|
|
141
139
|
authLayout = $page({
|
|
142
140
|
label: "Auth",
|
|
143
141
|
path: "/auth",
|
|
144
|
-
lazy: () => import("./AuthLayout-
|
|
142
|
+
lazy: () => import("./AuthLayout-Dq5tSLSc.js"),
|
|
145
143
|
children: () => [
|
|
146
144
|
this.login,
|
|
147
145
|
this.register,
|
|
@@ -156,7 +154,7 @@ var AuthRouter = class {
|
|
|
156
154
|
description: "Sign in to your account",
|
|
157
155
|
path: "/login",
|
|
158
156
|
schema: { query: realmQuerySchema },
|
|
159
|
-
lazy: () => import("./Login-
|
|
157
|
+
lazy: () => import("./Login-CqG1iJbn.js").then((n) => n.n),
|
|
160
158
|
loader: async ({ query, user }) => {
|
|
161
159
|
if (user) throw new Redirection(query.r || "/");
|
|
162
160
|
return { realmConfig: await this.loadRealmConfig(query.realm) };
|
|
@@ -168,7 +166,7 @@ var AuthRouter = class {
|
|
|
168
166
|
description: "Create a new account",
|
|
169
167
|
path: "/register",
|
|
170
168
|
schema: { query: realmQuerySchema },
|
|
171
|
-
lazy: () => import("./Register-
|
|
169
|
+
lazy: () => import("./Register-KKZwr_lL.js").then((n) => n.n),
|
|
172
170
|
loader: async ({ query, user }) => {
|
|
173
171
|
if (user) throw new Redirection(query.r || "/");
|
|
174
172
|
return { realmConfig: await this.loadRealmConfig(query.realm) };
|
|
@@ -180,7 +178,7 @@ var AuthRouter = class {
|
|
|
180
178
|
description: "Reset your account password",
|
|
181
179
|
path: "/reset-password",
|
|
182
180
|
schema: { query: realmQuerySchema },
|
|
183
|
-
lazy: () => import("./ResetPassword-
|
|
181
|
+
lazy: () => import("./ResetPassword-DMrLFEtr.js").then((n) => n.n),
|
|
184
182
|
loader: async ({ query, user }) => {
|
|
185
183
|
if (user) throw new Redirection(query.r || "/");
|
|
186
184
|
return { realmConfig: await this.loadRealmConfig(query.realm) };
|
|
@@ -195,7 +193,7 @@ var AuthRouter = class {
|
|
|
195
193
|
email: t.optional(t.string()),
|
|
196
194
|
token: t.optional(t.string())
|
|
197
195
|
}) },
|
|
198
|
-
lazy: () => import("./VerifyEmail-
|
|
196
|
+
lazy: () => import("./VerifyEmail-BFCAFz6T.js").then((n) => n.n)
|
|
199
197
|
});
|
|
200
198
|
logout = $page({
|
|
201
199
|
icon: IconLogout2,
|
|
@@ -215,7 +213,7 @@ var AuthRouter = class {
|
|
|
215
213
|
description: "View your profile",
|
|
216
214
|
path: "/profile",
|
|
217
215
|
can: () => !!this.auth.user,
|
|
218
|
-
lazy: () => import("./Profile-
|
|
216
|
+
lazy: () => import("./Profile-C0ojJCaG.js")
|
|
219
217
|
});
|
|
220
218
|
async loadRealmConfig(realmName) {
|
|
221
219
|
try {
|
|
@@ -226,22 +224,7 @@ var AuthRouter = class {
|
|
|
226
224
|
}
|
|
227
225
|
}
|
|
228
226
|
};
|
|
229
|
-
|
|
230
|
-
//#endregion
|
|
231
|
-
//#region ../../src/auth/index.ts
|
|
232
|
-
/**
|
|
233
|
-
* Authentication UI components.
|
|
234
|
-
*
|
|
235
|
-
* **Features:**
|
|
236
|
-
* - Login page component
|
|
237
|
-
* - Register page component
|
|
238
|
-
* - Reset password page component
|
|
239
|
-
* - Email verification page component
|
|
240
|
-
* - UserButton for user menu
|
|
241
|
-
*
|
|
242
|
-
* @module alepha.ui.auth
|
|
243
|
-
*/
|
|
244
|
-
const AlephaUIAuth = $module({
|
|
227
|
+
$module({
|
|
245
228
|
name: "alepha.ui.auth",
|
|
246
229
|
services: [
|
|
247
230
|
AlephaUI,
|
|
@@ -251,7 +234,7 @@ const AlephaUIAuth = $module({
|
|
|
251
234
|
AuthI18n
|
|
252
235
|
]
|
|
253
236
|
});
|
|
254
|
-
|
|
255
237
|
//#endregion
|
|
256
|
-
export {
|
|
257
|
-
|
|
238
|
+
export {};
|
|
239
|
+
|
|
240
|
+
//# sourceMappingURL=auth-D9qTZzCa.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-Djd7SKiw.js","names":[],"sources":["../../src/auth/AuthI18n.ts","../../src/auth/AuthRouter.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 { 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":"auth-D9qTZzCa.js","names":[],"sources":["../../src/auth/AuthI18n.ts","../../src/auth/AuthRouter.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 { 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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"}
|