@alepha/ui 0.18.2 → 0.18.3
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-Dy_k-4Vd.js} +2 -2
- package/dist/admin/{AdminApiKeys-BJhIwfD6.js.map → AdminApiKeys-Dy_k-4Vd.js.map} +1 -1
- package/dist/admin/{AdminAudits-DzD_4cDt.js → AdminAudits-CKiFMSSU.js} +2 -2
- package/dist/admin/{AdminAudits-DzD_4cDt.js.map → AdminAudits-CKiFMSSU.js.map} +1 -1
- package/dist/admin/{AdminDashboard-C92tIc6x.js → AdminDashboard-PhC_dZqo.js} +2 -2
- package/dist/admin/{AdminDashboard-C92tIc6x.js.map → AdminDashboard-PhC_dZqo.js.map} +1 -1
- package/dist/admin/{AdminFiles-DLpfhBkf.js → AdminFiles-DFTjijGp.js} +2 -2
- package/dist/admin/{AdminFiles-DLpfhBkf.js.map → AdminFiles-DFTjijGp.js.map} +1 -1
- package/dist/admin/{AdminJobDashboard-KIOkeMgE.js → AdminJobDashboard-BL8gGPDp.js} +2 -2
- package/dist/admin/{AdminJobDashboard-KIOkeMgE.js.map → AdminJobDashboard-BL8gGPDp.js.map} +1 -1
- package/dist/admin/{AdminJobExecutions-D0Yo_PU0.js → AdminJobExecutions-D9E-CS-U.js} +2 -2
- package/dist/admin/{AdminJobExecutions-D0Yo_PU0.js.map → AdminJobExecutions-D9E-CS-U.js.map} +1 -1
- package/dist/admin/{AdminJobRegistry-PFajqaGK.js → AdminJobRegistry-Ci9ue1zC.js} +2 -2
- package/dist/admin/{AdminJobRegistry-PFajqaGK.js.map → AdminJobRegistry-Ci9ue1zC.js.map} +1 -1
- package/dist/admin/{AdminLayout-B1DXZHDn.js → AdminLayout-I6TlUMPc.js} +2 -2
- package/dist/admin/{AdminLayout-B1DXZHDn.js.map → AdminLayout-I6TlUMPc.js.map} +1 -1
- package/dist/admin/AdminNotifications-ZPHCYrv7.js +542 -0
- package/dist/admin/AdminNotifications-ZPHCYrv7.js.map +1 -0
- package/dist/admin/{AdminParameters-BspPeqp_.js → AdminParameters-CqgvhRsb.js} +120 -105
- package/dist/admin/AdminParameters-CqgvhRsb.js.map +1 -0
- package/dist/admin/{AdminSessions-BnH5CZQl.js → AdminSessions-Bz5NRuoW.js} +2 -2
- package/dist/admin/{AdminSessions-BnH5CZQl.js.map → AdminSessions-Bz5NRuoW.js.map} +1 -1
- package/dist/admin/{AdminUserLayout-DUbC6-BI.js → AdminUserLayout-lXT6I0Qq.js} +14 -8
- package/dist/admin/AdminUserLayout-lXT6I0Qq.js.map +1 -0
- package/dist/admin/{AdminUserProfile-DuTUnjdG.js → AdminUserProfile-vFBLoJ3h.js} +3 -3
- package/dist/admin/{AdminUserProfile-DuTUnjdG.js.map → AdminUserProfile-vFBLoJ3h.js.map} +1 -1
- package/dist/admin/{AdminUserSessions-DvZdAGpL.js → AdminUserSessions-CT_YDim0.js} +2 -2
- package/dist/admin/{AdminUserSessions-DvZdAGpL.js.map → AdminUserSessions-CT_YDim0.js.map} +1 -1
- package/dist/admin/{AdminUsers-CR9z0g_5.js → AdminUsers-D1UfGya9.js} +2 -2
- package/dist/admin/{AdminUsers-CR9z0g_5.js.map → AdminUsers-D1UfGya9.js.map} +1 -1
- package/dist/admin/{AuthLayout-DsUfp9RG.js → AuthLayout-_frhdgOO.js} +2 -2
- package/dist/admin/{AuthLayout-DsUfp9RG.js.map → AuthLayout-_frhdgOO.js.map} +1 -1
- package/dist/admin/Login-xtNmQtGh.js +275 -0
- package/dist/admin/Login-xtNmQtGh.js.map +1 -0
- package/dist/admin/{Profile-B2EcIDB9.js → Profile-_AtPUwAP.js} +31 -27
- package/dist/admin/Profile-_AtPUwAP.js.map +1 -0
- package/dist/admin/{Register-Z3fxRbUF.js → Register-JcCjHUUn.js} +198 -142
- package/dist/admin/Register-JcCjHUUn.js.map +1 -0
- package/dist/admin/{ResetPassword-_Y1qTTKh.js → ResetPassword-CwGBPLJO.js} +7 -7
- package/dist/admin/ResetPassword-CwGBPLJO.js.map +1 -0
- package/dist/admin/{VerifyEmail-Bg22bwcC.js → VerifyEmail-hNxWejWf.js} +23 -8
- package/dist/admin/VerifyEmail-hNxWejWf.js.map +1 -0
- package/dist/admin/{core-BVO_TQxb.js → core-CYaRQ8O-.js} +709 -556
- package/dist/admin/core-CYaRQ8O-.js.map +1 -0
- package/dist/admin/index.d.ts +83 -44
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +58 -39
- package/dist/admin/index.js.map +1 -1
- package/dist/auth/{AuthLayout-C161NeF6.js → AuthLayout-AvLlcLjS.js} +2 -2
- package/dist/auth/{AuthLayout-C161NeF6.js.map → AuthLayout-AvLlcLjS.js.map} +1 -1
- package/dist/auth/Login-BA1E8IZl.js +275 -0
- package/dist/auth/Login-BA1E8IZl.js.map +1 -0
- package/dist/auth/{Profile-BMpXJ0oi.js → Profile-YcWdeuFz.js} +31 -27
- package/dist/auth/Profile-YcWdeuFz.js.map +1 -0
- package/dist/auth/{Register-2gx8qll-.js → Register-CPhEO5MG.js} +198 -142
- package/dist/auth/Register-CPhEO5MG.js.map +1 -0
- package/dist/{demo/ResetPassword-CAPj8MO3.js → auth/ResetPassword-DCtGcneA.js} +7 -7
- package/dist/auth/ResetPassword-DCtGcneA.js.map +1 -0
- package/dist/{demo/VerifyEmail-DFmdCdYs.js → auth/VerifyEmail-DkH7NBfn.js} +23 -8
- package/dist/auth/VerifyEmail-DkH7NBfn.js.map +1 -0
- package/dist/auth/{core-DyfeVr5c.js → core-D5jIAVF2.js} +386 -294
- package/dist/auth/core-D5jIAVF2.js.map +1 -0
- package/dist/auth/index.d.ts +93 -48
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +28 -24
- package/dist/auth/index.js.map +1 -1
- package/dist/core/index.d.ts +116 -61
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +873 -701
- package/dist/core/index.js.map +1 -1
- package/dist/demo/{AuthLayout-DN-ClJQk.js → AuthLayout-Brri4A-L.js} +2 -2
- package/dist/demo/{AuthLayout-DN-ClJQk.js.map → AuthLayout-Brri4A-L.js.map} +1 -1
- package/dist/demo/DemoButton-wiCxZZ_L.js +182 -0
- package/dist/demo/DemoButton-wiCxZZ_L.js.map +1 -0
- package/dist/demo/DemoControlSelect-D7ILObVg.js +305 -0
- package/dist/demo/DemoControlSelect-D7ILObVg.js.map +1 -0
- package/dist/demo/DemoDataTable-DZ5Y8pFX.js +362 -0
- package/dist/demo/DemoDataTable-DZ5Y8pFX.js.map +1 -0
- package/dist/demo/{DemoDialog-DW8QEvD1.js → DemoDialog-CUWdLHim.js} +2 -2
- package/dist/demo/{DemoDialog-DW8QEvD1.js.map → DemoDialog-CUWdLHim.js.map} +1 -1
- package/dist/demo/{DemoFlex-CAhLUanT.js → DemoFlex-a8OhMMvq.js} +3 -3
- package/dist/demo/{DemoFlex-CAhLUanT.js.map → DemoFlex-a8OhMMvq.js.map} +1 -1
- package/dist/demo/{DemoHeading-yIFmNjHB.js → DemoHeading-C13OVDfS.js} +3 -3
- package/dist/demo/{DemoHeading-yIFmNjHB.js.map → DemoHeading-C13OVDfS.js.map} +1 -1
- package/dist/demo/{DemoHome-BSGuBHus.js → DemoHome-D_De3UiT.js} +2 -2
- package/dist/demo/{DemoHome-BSGuBHus.js.map → DemoHome-D_De3UiT.js.map} +1 -1
- package/dist/demo/{DemoJsonViewer-DsA2IpgV.js → DemoJsonViewer-B50s9aGM.js} +3 -3
- package/dist/demo/{DemoJsonViewer-DsA2IpgV.js.map → DemoJsonViewer-B50s9aGM.js.map} +1 -1
- package/dist/demo/{DemoLayout-Cy6xjn6P.js → DemoLayout-CHU8WTwO.js} +14 -5
- package/dist/demo/DemoLayout-CHU8WTwO.js.map +1 -0
- package/dist/demo/{DemoLogin-vqxgTu4P.js → DemoLogin-BBlrWpml.js} +49 -32
- package/dist/demo/DemoLogin-BBlrWpml.js.map +1 -0
- package/dist/demo/{DemoRegister-YHPvPg77.js → DemoRegister-BuNE3_-f.js} +49 -50
- package/dist/demo/DemoRegister-BuNE3_-f.js.map +1 -0
- package/dist/demo/{DemoResetPassword-mOW18Zlm.js → DemoResetPassword-D_IjjjOJ.js} +12 -16
- package/dist/demo/DemoResetPassword-D_IjjjOJ.js.map +1 -0
- package/dist/demo/{DemoSidebar-od7aLjP_.js → DemoSidebar-Giy2HRBD.js} +3 -3
- package/dist/demo/{DemoSidebar-od7aLjP_.js.map → DemoSidebar-Giy2HRBD.js.map} +1 -1
- package/dist/demo/{DemoText-DU3JeRS0.js → DemoText-ubcw-vog.js} +3 -3
- package/dist/demo/{DemoText-DU3JeRS0.js.map → DemoText-ubcw-vog.js.map} +1 -1
- package/dist/demo/{DemoToast-CUJEiPRa.js → DemoToast-9die_dYT.js} +2 -2
- package/dist/demo/{DemoToast-CUJEiPRa.js.map → DemoToast-9die_dYT.js.map} +1 -1
- package/dist/demo/{DemoTypeForm-C1dNkahD.js → DemoTypeForm-D_d6OVKL.js} +8 -4
- package/dist/demo/DemoTypeForm-D_d6OVKL.js.map +1 -0
- package/dist/demo/DemoVerifyEmail-B43KlF4F.js +34 -0
- package/dist/demo/DemoVerifyEmail-B43KlF4F.js.map +1 -0
- package/dist/demo/Login-C12N4oGs.js +275 -0
- package/dist/demo/Login-C12N4oGs.js.map +1 -0
- package/dist/demo/{Profile-BE_Y3co2.js → Profile-DS5q4vOh.js} +31 -27
- package/dist/demo/Profile-DS5q4vOh.js.map +1 -0
- package/dist/demo/{Register-fXHmBpr3.js → Register-B4hLBeEv.js} +198 -142
- package/dist/demo/Register-B4hLBeEv.js.map +1 -0
- package/dist/{auth/ResetPassword-DBxt9hKk.js → demo/ResetPassword-D8g9ha1N.js} +7 -7
- package/dist/demo/ResetPassword-D8g9ha1N.js.map +1 -0
- package/dist/demo/{Showcase-BtEU0pY9.js → Showcase-D6Fxt4X4.js} +64 -65
- package/dist/demo/Showcase-D6Fxt4X4.js.map +1 -0
- package/dist/{auth/VerifyEmail-Z80Ubajk.js → demo/VerifyEmail-BjDo0cZA.js} +23 -8
- package/dist/demo/VerifyEmail-BjDo0cZA.js.map +1 -0
- package/dist/demo/{auth-Djd7SKiw.js → auth-ByVTreDl.js} +8 -8
- package/dist/demo/{auth-Djd7SKiw.js.map → auth-ByVTreDl.js.map} +1 -1
- package/dist/demo/{core-B7LNjM78.js → core-DFgB3yU4.js} +741 -573
- package/dist/demo/core-DFgB3yU4.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 +24 -18
- package/dist/demo/index.js.map +1 -1
- package/package.json +7 -7
- package/src/admin/AdminRouter.tsx +24 -1
- 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/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 +10 -0
- package/src/core/components/buttons/ActionButton.tsx +104 -78
- package/src/core/components/data/DetailDrawer.tsx +102 -96
- package/src/core/components/data/DetailList.tsx +2 -1
- package/src/core/components/layout/Breadcrumb.tsx +3 -6
- 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/styles.css +12 -2
- package/src/core/table/components/ColumnPicker.tsx +3 -3
- package/src/core/table/components/DataTable.tsx +89 -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/AdminParameters-BspPeqp_.js.map +0 -1
- package/dist/admin/AdminUserLayout-DUbC6-BI.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/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/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/src/demo/styles.css +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a as TypeForm,
|
|
1
|
+
import { a as TypeForm, f as Flex$1, l as Text$1 } from "./core-DFgB3yU4.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";
|
|
@@ -15,7 +15,7 @@ const DEVICE_WIDTHS = {
|
|
|
15
15
|
const MacWindow = ({ children, title, containerProps }) => {
|
|
16
16
|
const [device, setDevice] = useState("desktop");
|
|
17
17
|
const isFullPage = device === "full";
|
|
18
|
-
const header = /* @__PURE__ */ jsxs(Flex, {
|
|
18
|
+
const header = /* @__PURE__ */ jsxs(Flex$1, {
|
|
19
19
|
h: 36,
|
|
20
20
|
px: "sm",
|
|
21
21
|
align: "center",
|
|
@@ -25,10 +25,10 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
25
25
|
borderBottom: "1px solid var(--mantine-color-default-border)"
|
|
26
26
|
},
|
|
27
27
|
children: [
|
|
28
|
-
/* @__PURE__ */ jsxs(Flex, {
|
|
28
|
+
/* @__PURE__ */ jsxs(Flex$1, {
|
|
29
29
|
gap: 6,
|
|
30
30
|
children: [
|
|
31
|
-
/* @__PURE__ */ jsx(Flex, {
|
|
31
|
+
/* @__PURE__ */ jsx(Flex$1, {
|
|
32
32
|
w: 12,
|
|
33
33
|
h: 12,
|
|
34
34
|
style: {
|
|
@@ -36,7 +36,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
36
36
|
background: "#ff5f57"
|
|
37
37
|
}
|
|
38
38
|
}),
|
|
39
|
-
/* @__PURE__ */ jsx(Flex, {
|
|
39
|
+
/* @__PURE__ */ jsx(Flex$1, {
|
|
40
40
|
w: 12,
|
|
41
41
|
h: 12,
|
|
42
42
|
style: {
|
|
@@ -44,7 +44,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
44
44
|
background: "#febc2e"
|
|
45
45
|
}
|
|
46
46
|
}),
|
|
47
|
-
/* @__PURE__ */ jsx(Flex, {
|
|
47
|
+
/* @__PURE__ */ jsx(Flex$1, {
|
|
48
48
|
w: 12,
|
|
49
49
|
h: 12,
|
|
50
50
|
style: {
|
|
@@ -54,7 +54,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
54
54
|
})
|
|
55
55
|
]
|
|
56
56
|
}),
|
|
57
|
-
/* @__PURE__ */ jsx(Flex, {
|
|
57
|
+
/* @__PURE__ */ jsx(Flex$1, {
|
|
58
58
|
style: {
|
|
59
59
|
flex: 1,
|
|
60
60
|
textAlign: "center",
|
|
@@ -72,7 +72,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
72
72
|
label: /* @__PURE__ */ jsx(Tooltip, {
|
|
73
73
|
label: "Phone (375px)",
|
|
74
74
|
openDelay: 400,
|
|
75
|
-
children: /* @__PURE__ */ jsx(Flex, {
|
|
75
|
+
children: /* @__PURE__ */ jsx(Flex$1, {
|
|
76
76
|
align: "center",
|
|
77
77
|
children: /* @__PURE__ */ jsx(IconDeviceMobile, { size: 14 })
|
|
78
78
|
})
|
|
@@ -83,7 +83,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
83
83
|
label: /* @__PURE__ */ jsx(Tooltip, {
|
|
84
84
|
label: "Tablet (768px)",
|
|
85
85
|
openDelay: 400,
|
|
86
|
-
children: /* @__PURE__ */ jsx(Flex, {
|
|
86
|
+
children: /* @__PURE__ */ jsx(Flex$1, {
|
|
87
87
|
align: "center",
|
|
88
88
|
children: /* @__PURE__ */ jsx(IconDeviceTablet, { size: 14 })
|
|
89
89
|
})
|
|
@@ -94,7 +94,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
94
94
|
label: /* @__PURE__ */ jsx(Tooltip, {
|
|
95
95
|
label: "Desktop (100%)",
|
|
96
96
|
openDelay: 400,
|
|
97
|
-
children: /* @__PURE__ */ jsx(Flex, {
|
|
97
|
+
children: /* @__PURE__ */ jsx(Flex$1, {
|
|
98
98
|
align: "center",
|
|
99
99
|
children: /* @__PURE__ */ jsx(IconDeviceDesktop, { size: 14 })
|
|
100
100
|
})
|
|
@@ -105,7 +105,7 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
105
105
|
label: /* @__PURE__ */ jsx(Tooltip, {
|
|
106
106
|
label: "Full page",
|
|
107
107
|
openDelay: 400,
|
|
108
|
-
children: /* @__PURE__ */ jsx(Flex, {
|
|
108
|
+
children: /* @__PURE__ */ jsx(Flex$1, {
|
|
109
109
|
align: "center",
|
|
110
110
|
children: /* @__PURE__ */ jsx(IconArrowsMaximize, { size: 14 })
|
|
111
111
|
})
|
|
@@ -116,15 +116,15 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
116
116
|
})
|
|
117
117
|
]
|
|
118
118
|
});
|
|
119
|
-
const body = /* @__PURE__ */ jsx(Flex, {
|
|
119
|
+
const body = /* @__PURE__ */ jsx(Flex$1, {
|
|
120
|
+
overflow: true,
|
|
120
121
|
direction: "column",
|
|
121
122
|
flex: 1,
|
|
122
123
|
p: "md",
|
|
123
|
-
style: { overflow: "auto" },
|
|
124
124
|
...containerProps,
|
|
125
125
|
children
|
|
126
126
|
});
|
|
127
|
-
if (isFullPage) return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs(Flex, {
|
|
127
|
+
if (isFullPage) return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs(Flex$1, {
|
|
128
128
|
direction: "column",
|
|
129
129
|
style: {
|
|
130
130
|
position: "fixed",
|
|
@@ -134,15 +134,16 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
134
134
|
},
|
|
135
135
|
children: [header, body]
|
|
136
136
|
}) });
|
|
137
|
-
return /* @__PURE__ */ jsxs(Flex, {
|
|
138
|
-
|
|
137
|
+
return /* @__PURE__ */ jsxs(Flex$1, {
|
|
138
|
+
col: true,
|
|
139
|
+
overflow: true,
|
|
140
|
+
h: "100%",
|
|
139
141
|
bdrs: "md",
|
|
140
142
|
style: {
|
|
141
143
|
width: DEVICE_WIDTHS[device],
|
|
142
144
|
maxWidth: "100%",
|
|
143
145
|
border: "1px solid var(--mantine-color-default-border)",
|
|
144
146
|
overflow: "hidden",
|
|
145
|
-
background: "var(--mantine-color-body)",
|
|
146
147
|
boxShadow: "0 4px 12px rgba(0, 0, 0, 0.15)",
|
|
147
148
|
transition: "width 0.3s ease"
|
|
148
149
|
},
|
|
@@ -156,7 +157,8 @@ const MacWindow = ({ children, title, containerProps }) => {
|
|
|
156
157
|
* Showcase component for demonstrating UI components with interactive props configuration.
|
|
157
158
|
* Uses TypeForm to render a form based on the props schema and displays the component preview.
|
|
158
159
|
*/
|
|
159
|
-
const Showcase = (
|
|
160
|
+
const Showcase = (props) => {
|
|
161
|
+
const { title, schema, initialValues, columns = 3, children, windowProps } = props;
|
|
160
162
|
const [values, setValues] = useState(initialValues ?? {});
|
|
161
163
|
const form = useForm({
|
|
162
164
|
schema,
|
|
@@ -168,65 +170,62 @@ const Showcase = ({ title, schema, initialValues, columns = 3, children, windowP
|
|
|
168
170
|
return form.submit();
|
|
169
171
|
}
|
|
170
172
|
}, [schema]);
|
|
171
|
-
return /* @__PURE__ */ jsxs(Flex, {
|
|
172
|
-
|
|
173
|
-
|
|
173
|
+
return /* @__PURE__ */ jsxs(Flex$1, {
|
|
174
|
+
fill: true,
|
|
175
|
+
p: "md",
|
|
176
|
+
pt: 0,
|
|
174
177
|
gap: "md",
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
+
overflow: true,
|
|
179
|
+
children: [/* @__PURE__ */ jsx(Flex$1, {
|
|
180
|
+
fill: true,
|
|
181
|
+
overflow: true,
|
|
182
|
+
ground: true,
|
|
178
183
|
h: "100%",
|
|
179
184
|
justify: "center",
|
|
180
185
|
align: "flex-start",
|
|
181
|
-
style: {
|
|
182
|
-
flex: 1,
|
|
183
|
-
minWidth: 0,
|
|
184
|
-
overflow: "auto"
|
|
185
|
-
},
|
|
186
186
|
children: /* @__PURE__ */ jsx(MacWindow, {
|
|
187
187
|
title,
|
|
188
188
|
...windowProps,
|
|
189
189
|
children: children(values)
|
|
190
190
|
})
|
|
191
|
-
}), /* @__PURE__ */
|
|
191
|
+
}), /* @__PURE__ */ jsxs(Flex$1, {
|
|
192
192
|
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
|
-
})
|
|
193
|
+
col: true,
|
|
194
|
+
surface: true,
|
|
195
|
+
bordered: true,
|
|
196
|
+
rounded: true,
|
|
197
|
+
shadowed: true,
|
|
198
|
+
w: 300,
|
|
199
|
+
children: [/* @__PURE__ */ jsx(Flex$1, {
|
|
200
|
+
p: "xs",
|
|
201
|
+
borderedBottom: true,
|
|
202
|
+
children: /* @__PURE__ */ jsxs(Text$1, {
|
|
203
|
+
size: "xs",
|
|
204
|
+
fw: 500,
|
|
205
|
+
children: [title, " Props"]
|
|
206
|
+
})
|
|
207
|
+
}), /* @__PURE__ */ jsx(Flex$1, {
|
|
208
|
+
px: "md",
|
|
209
|
+
py: "xs",
|
|
210
|
+
children: /* @__PURE__ */ jsx(TypeForm, {
|
|
211
|
+
fill: true,
|
|
212
|
+
form,
|
|
213
|
+
columns: {
|
|
214
|
+
base: 1,
|
|
215
|
+
xs: 1,
|
|
216
|
+
sm: 1,
|
|
217
|
+
md: 1,
|
|
218
|
+
lg: 1,
|
|
219
|
+
xl: 1
|
|
220
|
+
},
|
|
221
|
+
skipSubmitButton: true,
|
|
222
|
+
skipFormElement: true
|
|
223
|
+
})
|
|
224
|
+
})]
|
|
226
225
|
})]
|
|
227
226
|
});
|
|
228
227
|
};
|
|
229
228
|
|
|
230
229
|
//#endregion
|
|
231
230
|
export { Showcase as t };
|
|
232
|
-
//# sourceMappingURL=Showcase-
|
|
231
|
+
//# sourceMappingURL=Showcase-D6Fxt4X4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Showcase-D6Fxt4X4.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,16 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-CjeV3_4I.js";
|
|
2
|
-
import {
|
|
2
|
+
import { h as ActionButton } from "./core-DFgB3yU4.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
10
|
|
|
11
11
|
//#region ../../src/auth/components/VerifyEmail.tsx
|
|
12
12
|
var VerifyEmail_exports = /* @__PURE__ */ __exportAll({ default: () => VerifyEmail });
|
|
13
|
-
const
|
|
14
|
-
const router = useRouter();
|
|
13
|
+
const VerifyEmailStateful = (props) => {
|
|
15
14
|
const state = useRouterState();
|
|
16
15
|
const userCtrl = useClient();
|
|
17
16
|
const { tr } = useI18n();
|
|
@@ -39,6 +38,15 @@ const VerifyEmail = (_props) => {
|
|
|
39
38
|
};
|
|
40
39
|
verify();
|
|
41
40
|
}, [email, token]);
|
|
41
|
+
return /* @__PURE__ */ jsx(VerifyEmailView, {
|
|
42
|
+
step,
|
|
43
|
+
error,
|
|
44
|
+
loginPath: props.loginPath
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
const VerifyEmailView = (props) => {
|
|
48
|
+
const { tr } = useI18n();
|
|
49
|
+
const { step } = props;
|
|
42
50
|
return /* @__PURE__ */ jsx(Flex, {
|
|
43
51
|
flex: 1,
|
|
44
52
|
justify: "center",
|
|
@@ -92,7 +100,7 @@ const VerifyEmail = (_props) => {
|
|
|
92
100
|
})
|
|
93
101
|
}),
|
|
94
102
|
/* @__PURE__ */ jsx(ActionButton, {
|
|
95
|
-
href:
|
|
103
|
+
href: props.loginPath ?? "/auth/login",
|
|
96
104
|
fullWidth: true,
|
|
97
105
|
children: tr("verifyEmailSignIn")
|
|
98
106
|
})
|
|
@@ -114,11 +122,11 @@ const VerifyEmail = (_props) => {
|
|
|
114
122
|
icon: /* @__PURE__ */ jsx(IconAlertCircle, {}),
|
|
115
123
|
children: /* @__PURE__ */ jsx(Text, {
|
|
116
124
|
size: "sm",
|
|
117
|
-
children: error || tr("verifyEmailFailed")
|
|
125
|
+
children: props.error || tr("verifyEmailFailed")
|
|
118
126
|
})
|
|
119
127
|
}),
|
|
120
128
|
/* @__PURE__ */ jsx(ActionButton, {
|
|
121
|
-
href:
|
|
129
|
+
href: props.loginPath ?? "/auth/login",
|
|
122
130
|
fullWidth: true,
|
|
123
131
|
children: tr("verifyEmailBackToSignIn")
|
|
124
132
|
})
|
|
@@ -129,7 +137,14 @@ const VerifyEmail = (_props) => {
|
|
|
129
137
|
})
|
|
130
138
|
});
|
|
131
139
|
};
|
|
140
|
+
const VerifyEmail = (props) => {
|
|
141
|
+
if (props.step) return /* @__PURE__ */ jsx(VerifyEmailView, {
|
|
142
|
+
step: props.step,
|
|
143
|
+
loginPath: props.loginPath
|
|
144
|
+
});
|
|
145
|
+
return /* @__PURE__ */ jsx(VerifyEmailStateful, { ...props });
|
|
146
|
+
};
|
|
132
147
|
|
|
133
148
|
//#endregion
|
|
134
149
|
export { VerifyEmail_exports as n, VerifyEmail as t };
|
|
135
|
-
//# sourceMappingURL=VerifyEmail-
|
|
150
|
+
//# sourceMappingURL=VerifyEmail-BjDo0cZA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VerifyEmail-BjDo0cZA.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":";;;;;;;;;;;;AAiBA,MAAM,uBAAuB,UAA4B;CACvD,MAAM,QAAQ,gBAAgB;CAC9B,MAAM,WAAW,WAA2B;CAC5C,MAAM,EAAE,OAAO,SAAyB;CAExC,MAAM,CAAC,MAAM,WAAW,SAA0B,YAAY;CAC9D,MAAM,CAAC,OAAO,YAAY,SAAwB,KAAK;CAEvD,MAAM,QAAQ,MAAM,MAAM;CAC1B,MAAM,QAAQ,MAAM,MAAM;AAE1B,iBAAgB;EACd,MAAM,SAAS,YAAY;AACzB,OAAI,CAAC,SAAS,CAAC,OAAO;AACpB,aAAS,GAAG,2BAA2B,CAAC;AACxC,YAAQ,QAAQ;AAChB;;AAGF,OAAI;AACF,UAAM,SAAS,YAAY,EACzB,MAAM;KAAE;KAAO;KAAO,EACvB,CAAC;AACF,YAAQ,UAAU;YACX,KAAK;AACZ,aAAS,eAAe,QAAQ,IAAI,UAAU,GAAG,oBAAoB,CAAC;AACtE,YAAQ,QAAQ;;;AAIpB,UAAQ;IACP,CAAC,OAAO,MAAM,CAAC;AAElB,QACE,oBAAC;EAAsB;EAAa;EAAO,WAAW,MAAM;GAAa;;AAU7E,MAAM,mBAAmB,UAAgC;CACvD,MAAM,EAAE,OAAO,SAAyB;CACxC,MAAM,EAAE,SAAS;AAEjB,QACE,oBAAC;EAAK,MAAM;EAAG,SAAQ;EAAS,OAAM;YACpC,oBAAC;GAAK,WAAU;GAAS,KAAI;GAAK,GAAG;aACnC,oBAAC;IAAK;IAAW,GAAE;IAAK,IAAG;cACzB,qBAAC;KAAK,WAAU;KAAS,KAAI;KAAK,OAAM;;MACrC,SAAS,eACR;OACE,oBAAC,UAAO,MAAK,OAAO;OACpB,oBAAC;QAAK,MAAK;QAAK,IAAI;QAAK,IAAG;kBACzB,GAAG,uBAAuB;SACtB;OACP,oBAAC;QAAK,MAAK;QAAK,GAAE;QAAS,IAAG;kBAC3B,GAAG,wBAAwB;SACvB;UACN;MAGJ,SAAS,aACR;OACE,oBAAC;QAAc,MAAM;QAAI,OAAM;SAAiC;OAChE,oBAAC;QAAK,MAAK;QAAK,IAAI;QAAK,IAAG;kBACzB,GAAG,mBAAmB;SAClB;OACP,oBAAC;QAAM,SAAQ;QAAQ,OAAM;QAAQ,MAAM,oBAAC,cAAY;kBACtD,oBAAC;SAAK,MAAK;mBAAM,GAAG,qBAAqB;UAAQ;SAC3C;OACR,oBAAC;QAAa,MAAM,MAAM,aAAa;QAAe;kBACnD,GAAG,oBAAoB;SACX;UACd;MAGJ,SAAS,WACR;OACE,oBAAC;QAAgB,MAAM;QAAI,OAAM;SAA+B;OAChE,oBAAC;QAAK,MAAK;QAAK,IAAI;QAAK,IAAG;kBACzB,GAAG,mBAAmB;SAClB;OACP,oBAAC;QAAM,SAAQ;QAAQ,OAAM;QAAM,MAAM,oBAAC,oBAAkB;kBAC1D,oBAAC;SAAK,MAAK;mBACR,MAAM,SAAS,GAAG,oBAAoB;UAClC;SACD;OACR,oBAAC;QAAa,MAAM,MAAM,aAAa;QAAe;kBACnD,GAAG,0BAA0B;SACjB;UACd;;MAEA;KACF;IACF;GACF;;AAIX,MAAM,eAAe,UAA4B;AAC/C,KAAI,MAAM,KACR,QAAO,oBAAC;EAAgB,MAAM,MAAM;EAAM,WAAW,MAAM;GAAa;AAE1E,QAAO,oBAAC,uBAAoB,GAAI,QAAS"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as AlephaUI } from "./core-
|
|
1
|
+
import { t as AlephaUI } from "./core-DFgB3yU4.js";
|
|
2
2
|
import { $context, $inject, $module, AlephaError, t } from "alepha";
|
|
3
3
|
import { $dictionary, AlephaReactI18n } from "alepha/react/i18n";
|
|
4
4
|
import { Avatar } from "@mantine/core";
|
|
@@ -141,7 +141,7 @@ var AuthRouter = class {
|
|
|
141
141
|
authLayout = $page({
|
|
142
142
|
label: "Auth",
|
|
143
143
|
path: "/auth",
|
|
144
|
-
lazy: () => import("./AuthLayout-
|
|
144
|
+
lazy: () => import("./AuthLayout-Brri4A-L.js"),
|
|
145
145
|
children: () => [
|
|
146
146
|
this.login,
|
|
147
147
|
this.register,
|
|
@@ -156,7 +156,7 @@ var AuthRouter = class {
|
|
|
156
156
|
description: "Sign in to your account",
|
|
157
157
|
path: "/login",
|
|
158
158
|
schema: { query: realmQuerySchema },
|
|
159
|
-
lazy: () => import("./Login-
|
|
159
|
+
lazy: () => import("./Login-C12N4oGs.js").then((n) => n.n),
|
|
160
160
|
loader: async ({ query, user }) => {
|
|
161
161
|
if (user) throw new Redirection(query.r || "/");
|
|
162
162
|
return { realmConfig: await this.loadRealmConfig(query.realm) };
|
|
@@ -168,7 +168,7 @@ var AuthRouter = class {
|
|
|
168
168
|
description: "Create a new account",
|
|
169
169
|
path: "/register",
|
|
170
170
|
schema: { query: realmQuerySchema },
|
|
171
|
-
lazy: () => import("./Register-
|
|
171
|
+
lazy: () => import("./Register-B4hLBeEv.js").then((n) => n.n),
|
|
172
172
|
loader: async ({ query, user }) => {
|
|
173
173
|
if (user) throw new Redirection(query.r || "/");
|
|
174
174
|
return { realmConfig: await this.loadRealmConfig(query.realm) };
|
|
@@ -180,7 +180,7 @@ var AuthRouter = class {
|
|
|
180
180
|
description: "Reset your account password",
|
|
181
181
|
path: "/reset-password",
|
|
182
182
|
schema: { query: realmQuerySchema },
|
|
183
|
-
lazy: () => import("./ResetPassword-
|
|
183
|
+
lazy: () => import("./ResetPassword-D8g9ha1N.js").then((n) => n.n),
|
|
184
184
|
loader: async ({ query, user }) => {
|
|
185
185
|
if (user) throw new Redirection(query.r || "/");
|
|
186
186
|
return { realmConfig: await this.loadRealmConfig(query.realm) };
|
|
@@ -195,7 +195,7 @@ var AuthRouter = class {
|
|
|
195
195
|
email: t.optional(t.string()),
|
|
196
196
|
token: t.optional(t.string())
|
|
197
197
|
}) },
|
|
198
|
-
lazy: () => import("./VerifyEmail-
|
|
198
|
+
lazy: () => import("./VerifyEmail-BjDo0cZA.js").then((n) => n.n)
|
|
199
199
|
});
|
|
200
200
|
logout = $page({
|
|
201
201
|
icon: IconLogout2,
|
|
@@ -215,7 +215,7 @@ var AuthRouter = class {
|
|
|
215
215
|
description: "View your profile",
|
|
216
216
|
path: "/profile",
|
|
217
217
|
can: () => !!this.auth.user,
|
|
218
|
-
lazy: () => import("./Profile-
|
|
218
|
+
lazy: () => import("./Profile-DS5q4vOh.js")
|
|
219
219
|
});
|
|
220
220
|
async loadRealmConfig(realmName) {
|
|
221
221
|
try {
|
|
@@ -254,4 +254,4 @@ const AlephaUIAuth = $module({
|
|
|
254
254
|
|
|
255
255
|
//#endregion
|
|
256
256
|
export { };
|
|
257
|
-
//# sourceMappingURL=auth-
|
|
257
|
+
//# sourceMappingURL=auth-ByVTreDl.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-ByVTreDl.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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"}
|