@alepha/ui 0.16.2 → 0.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/{AdminApiKeys-CoTOTfgU.js → AdminApiKeys-CF_qOO3u.js} +20 -20
- package/dist/admin/AdminApiKeys-CF_qOO3u.js.map +1 -0
- package/dist/admin/{AdminAudits-BmsxFbDa.js → AdminAudits-BQno3hZG.js} +7 -8
- package/dist/admin/AdminAudits-BQno3hZG.js.map +1 -0
- package/dist/admin/{AdminFiles-BBB8knca.js → AdminFiles-kvuUaASF.js} +3 -5
- package/dist/admin/{AdminFiles-BBB8knca.js.map → AdminFiles-kvuUaASF.js.map} +1 -1
- package/dist/admin/AdminJobDashboard-CrPxp0W1.js +485 -0
- package/dist/admin/AdminJobDashboard-CrPxp0W1.js.map +1 -0
- package/dist/admin/AdminJobExecutions-D-b4Zt7W.js +678 -0
- package/dist/admin/AdminJobExecutions-D-b4Zt7W.js.map +1 -0
- package/dist/admin/AdminJobRegistry-CNX5cpDx.js +301 -0
- package/dist/admin/AdminJobRegistry-CNX5cpDx.js.map +1 -0
- package/dist/admin/{AdminLayout-CsjvpeD1.js → AdminLayout-e-ZP5nWw.js} +1 -1
- package/dist/admin/{AdminLayout-CsjvpeD1.js.map → AdminLayout-e-ZP5nWw.js.map} +1 -1
- package/dist/admin/{AdminNotifications-LwR6RKrx.js → AdminNotifications-DeHJFf6W.js} +3 -5
- package/dist/admin/{AdminNotifications-LwR6RKrx.js.map → AdminNotifications-DeHJFf6W.js.map} +1 -1
- package/dist/admin/{AdminParameters-B_83Vie9.js → AdminParameters-iQE8o7a7.js} +43 -36
- package/dist/admin/AdminParameters-iQE8o7a7.js.map +1 -0
- package/dist/admin/{AdminSessions-CWnPosdd.js → AdminSessions-oKJCbd7w.js} +5 -7
- package/dist/admin/AdminSessions-oKJCbd7w.js.map +1 -0
- package/dist/admin/{AdminUserAudits-nHv636E_.js → AdminUserAudits-BNCEle_E.js} +6 -8
- package/dist/admin/AdminUserAudits-BNCEle_E.js.map +1 -0
- package/dist/admin/{AdminUserCreate-CjYD3Kjc.js → AdminUserCreate-CgqeFwCt.js} +6 -7
- package/dist/admin/AdminUserCreate-CgqeFwCt.js.map +1 -0
- package/dist/admin/{AdminUserDetails-Ccq-LsZ0.js → AdminUserDetails-DDe1A1GP.js} +30 -29
- package/dist/admin/AdminUserDetails-DDe1A1GP.js.map +1 -0
- package/dist/admin/{AdminUserLayout-7s41DiF_.js → AdminUserLayout-HAlobhWf.js} +18 -16
- package/dist/admin/AdminUserLayout-HAlobhWf.js.map +1 -0
- package/dist/admin/{AdminUserSessions-Ds3ODq_d.js → AdminUserSessions-Bq1LnVLf.js} +5 -7
- package/dist/admin/AdminUserSessions-Bq1LnVLf.js.map +1 -0
- package/dist/admin/{AdminUserSettings-CGh4gROo.js → AdminUserSettings-BRsBZoxV.js} +10 -10
- package/dist/admin/AdminUserSettings-BRsBZoxV.js.map +1 -0
- package/dist/admin/{AdminUsers-CvPiBzQK.js → AdminUsers-D71kIOSn.js} +6 -8
- package/dist/admin/AdminUsers-D71kIOSn.js.map +1 -0
- package/dist/admin/index.d.ts +7 -83
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +49 -70
- package/dist/admin/index.js.map +1 -1
- package/dist/auth/{Login-DS_OqA0G.js → Login-BS_FYTy0.js} +13 -8
- package/dist/auth/Login-BS_FYTy0.js.map +1 -0
- package/dist/auth/{Profile-Di7N7HZL.js → Profile-CjDsW378.js} +16 -10
- package/dist/auth/Profile-CjDsW378.js.map +1 -0
- package/dist/auth/{Register-BRR2_gux.js → Register-C5eqzAaD.js} +21 -12
- package/dist/auth/Register-C5eqzAaD.js.map +1 -0
- package/dist/auth/{ResetPassword-oQu72lod.js → ResetPassword-XifinVao.js} +14 -8
- package/dist/auth/ResetPassword-XifinVao.js.map +1 -0
- package/dist/auth/{VerifyEmail-DC6HPZjd.js → VerifyEmail-DTgbeJOO.js} +6 -4
- package/dist/auth/VerifyEmail-DTgbeJOO.js.map +1 -0
- package/dist/auth/index.d.ts +4 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +15 -14
- package/dist/auth/index.js.map +1 -1
- package/dist/core/index.d.ts +37 -26
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +444 -193
- package/dist/core/index.js.map +1 -1
- package/dist/demo/DemoDataTable-lnBKWBf8.js +362 -0
- package/dist/demo/DemoDataTable-lnBKWBf8.js.map +1 -0
- package/dist/demo/{DemoHome-DpRrPlBC.js → DemoHome-CUMZsYaH.js} +6 -7
- package/dist/demo/DemoHome-CUMZsYaH.js.map +1 -0
- package/dist/demo/{DemoJsonViewer-zeucGKHV.js → DemoJsonViewer-_uokbGaW.js} +17 -19
- package/dist/demo/DemoJsonViewer-_uokbGaW.js.map +1 -0
- package/dist/demo/{DemoLayout-PhgbAAiQ.js → DemoLayout-DHVoacE6.js} +2 -4
- package/dist/demo/{DemoLayout-PhgbAAiQ.js.map → DemoLayout-DHVoacE6.js.map} +1 -1
- package/dist/demo/{DemoLogin-DSzP0Lkv.js → DemoLogin-DjJ9314c.js} +22 -17
- package/dist/demo/DemoLogin-DjJ9314c.js.map +1 -0
- package/dist/demo/{DemoRegister-DavFBsCz.js → DemoRegister-DzkJ5M83.js} +34 -25
- package/dist/demo/DemoRegister-DzkJ5M83.js.map +1 -0
- package/dist/demo/{DemoResetPassword-BS2rIAQK.js → DemoResetPassword-DWh4_BpQ.js} +27 -21
- package/dist/demo/DemoResetPassword-DWh4_BpQ.js.map +1 -0
- package/dist/demo/{DemoSidebar-zNkUmHRl.js → DemoSidebar-C1csnGhX.js} +2 -2
- package/dist/demo/{DemoSidebar-zNkUmHRl.js.map → DemoSidebar-C1csnGhX.js.map} +1 -1
- package/dist/demo/{DemoTypeForm-B9q7oT0b.js → DemoTypeForm-CWz6fJrJ.js} +2 -2
- package/dist/demo/{DemoTypeForm-B9q7oT0b.js.map → DemoTypeForm-CWz6fJrJ.js.map} +1 -1
- package/dist/demo/{DemoVerifyEmail-Bi4SdWz0.js → DemoVerifyEmail-DbU_tCj8.js} +13 -11
- package/dist/demo/DemoVerifyEmail-DbU_tCj8.js.map +1 -0
- package/dist/demo/{IconGoogle-CTeZyrek.js → IconGoogle-Ch1m3Uzl.js} +1 -1
- package/dist/demo/{IconGoogle-CTeZyrek.js.map → IconGoogle-Ch1m3Uzl.js.map} +1 -1
- package/dist/demo/{Showcase-C9btr_SJ.js → Showcase-BzoXNlCn.js} +10 -10
- package/dist/demo/Showcase-BzoXNlCn.js.map +1 -0
- package/dist/demo/index.d.ts +1 -68
- package/dist/demo/index.d.ts.map +1 -1
- package/dist/demo/index.js +11 -15
- package/dist/demo/index.js.map +1 -1
- package/dist/json/index.js +2 -2
- package/dist/json/index.js.map +1 -1
- package/package.json +9 -5
- package/src/admin/AdminRouter.ts +36 -5
- package/src/admin/components/audits/AdminAudits.tsx +5 -5
- package/src/admin/components/jobs/AdminJobDashboard.tsx +455 -0
- package/src/admin/components/jobs/AdminJobExecutions.tsx +693 -0
- package/src/admin/components/jobs/AdminJobRegistry.tsx +325 -0
- package/src/admin/components/keys/AdminApiKeys.tsx +28 -31
- package/src/admin/components/parameters/AdminParameters.tsx +3 -3
- package/src/admin/components/parameters/ParameterDetails.tsx +34 -29
- package/src/admin/components/parameters/ParameterEmptyState.tsx +5 -5
- package/src/admin/components/parameters/ParameterHistory.tsx +11 -19
- package/src/admin/components/parameters/ParameterTree.tsx +16 -18
- package/src/admin/components/sessions/AdminSessions.tsx +3 -3
- package/src/admin/components/shared/AdminResourceHeader.tsx +20 -16
- package/src/admin/components/users/AdminUserAudits.tsx +5 -5
- package/src/admin/components/users/AdminUserCreate.tsx +3 -3
- package/src/admin/components/users/AdminUserDetails.tsx +51 -53
- package/src/admin/components/users/AdminUserLayout.tsx +7 -7
- package/src/admin/components/users/AdminUserSessions.tsx +3 -3
- package/src/admin/components/users/AdminUserSettings.tsx +9 -9
- package/src/admin/components/users/AdminUsers.tsx +5 -5
- package/src/admin/components/verifications/AdminVerifications.tsx +3 -3
- package/src/admin/index.ts +0 -24
- package/src/auth/components/Login.tsx +13 -13
- package/src/auth/components/Profile.tsx +17 -26
- package/src/auth/components/Register.tsx +21 -31
- package/src/auth/components/ResetPassword.tsx +13 -22
- package/src/auth/components/VerifyEmail.tsx +5 -5
- package/src/auth/components/buttons/UserButton.tsx +14 -4
- package/src/core/components/buttons/ActionButton.tsx +9 -2
- package/src/core/components/data/ErrorViewer.tsx +15 -15
- package/src/core/components/dialogs/AlertDialog.tsx +3 -3
- package/src/core/components/dialogs/ConfirmDialog.tsx +3 -3
- package/src/core/components/dialogs/PromptDialog.tsx +3 -3
- package/src/core/components/form/Control.tsx +9 -0
- package/src/core/components/form/ControlArray.tsx +6 -7
- package/src/core/components/form/ControlObject.tsx +3 -3
- package/src/core/components/form/ControlQueryBuilder.tsx +20 -22
- package/src/core/components/form/ControlSelect.tsx +4 -0
- package/src/core/components/form/TypeForm.tsx +7 -0
- package/src/core/components/layout/Breadcrumb.tsx +6 -6
- package/src/core/components/layout/Omnibar.tsx +2 -1
- package/src/core/components/layout/Sidebar.tsx +5 -1
- package/src/core/components/table/ColumnPicker.tsx +47 -31
- package/src/core/components/table/DataTable.tsx +277 -201
- package/src/core/components/table/DataTableFilters.tsx +8 -0
- package/src/core/components/table/DataTableToolbar.tsx +98 -5
- package/src/core/components/table/FilterPicker.tsx +28 -26
- package/src/core/components/table/types.ts +52 -37
- package/src/core/components/table/useTableSelection.ts +83 -0
- package/src/core/styles.css +1 -0
- package/src/core/utils/parseInput.ts +1 -0
- package/src/demo/components/DemoHome.tsx +5 -5
- package/src/demo/components/core/DemoDataTable.tsx +209 -5
- package/src/demo/components/json/DemoJsonViewer.tsx +1 -1
- package/src/demo/components/shared/MacWindow.tsx +7 -7
- package/src/demo/components/shared/Showcase.tsx +3 -3
- package/src/demo/index.ts +0 -11
- package/src/json/components/JsonViewer.tsx +3 -3
- package/dist/admin/AdminApiKeys-CoTOTfgU.js.map +0 -1
- package/dist/admin/AdminAudits-BmsxFbDa.js.map +0 -1
- package/dist/admin/AdminJobs-C604joTz.js +0 -698
- package/dist/admin/AdminJobs-C604joTz.js.map +0 -1
- package/dist/admin/AdminParameters-B_83Vie9.js.map +0 -1
- package/dist/admin/AdminSessions-CWnPosdd.js.map +0 -1
- package/dist/admin/AdminUserAudits-nHv636E_.js.map +0 -1
- package/dist/admin/AdminUserCreate-CjYD3Kjc.js.map +0 -1
- package/dist/admin/AdminUserDetails-Ccq-LsZ0.js.map +0 -1
- package/dist/admin/AdminUserLayout-7s41DiF_.js.map +0 -1
- package/dist/admin/AdminUserSessions-Ds3ODq_d.js.map +0 -1
- package/dist/admin/AdminUserSettings-CGh4gROo.js.map +0 -1
- package/dist/admin/AdminUsers-CvPiBzQK.js.map +0 -1
- package/dist/admin/rolldown-runtime-CjeV3_4I.js +0 -18
- package/dist/auth/Login-DS_OqA0G.js.map +0 -1
- package/dist/auth/Profile-Di7N7HZL.js.map +0 -1
- package/dist/auth/Register-BRR2_gux.js.map +0 -1
- package/dist/auth/ResetPassword-oQu72lod.js.map +0 -1
- package/dist/auth/VerifyEmail-DC6HPZjd.js.map +0 -1
- package/dist/demo/DemoDataTable-DCsJq8v5.js +0 -149
- package/dist/demo/DemoDataTable-DCsJq8v5.js.map +0 -1
- package/dist/demo/DemoHome-DpRrPlBC.js.map +0 -1
- package/dist/demo/DemoJsonViewer-zeucGKHV.js.map +0 -1
- package/dist/demo/DemoLogin-DSzP0Lkv.js.map +0 -1
- package/dist/demo/DemoRegister-DavFBsCz.js.map +0 -1
- package/dist/demo/DemoResetPassword-BS2rIAQK.js.map +0 -1
- package/dist/demo/DemoVerifyEmail-Bi4SdWz0.js.map +0 -1
- package/dist/demo/Showcase-C9btr_SJ.js.map +0 -1
- package/dist/demo/rolldown-runtime-CjeV3_4I.js +0 -18
- package/src/admin/components/jobs/AdminJobs.tsx +0 -772
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
import { ActionButton } from "@alepha/ui";
|
|
2
|
-
import {
|
|
3
|
-
Avatar,
|
|
4
|
-
Badge,
|
|
5
|
-
Card,
|
|
6
|
-
Flex,
|
|
7
|
-
Group,
|
|
8
|
-
Stack,
|
|
9
|
-
Text,
|
|
10
|
-
Title,
|
|
11
|
-
} from "@mantine/core";
|
|
2
|
+
import { Avatar, Badge, Card, Flex, Text, Title } from "@mantine/core";
|
|
12
3
|
import {
|
|
13
4
|
IconAt,
|
|
14
5
|
IconCalendar,
|
|
@@ -35,9 +26,9 @@ const Profile = () => {
|
|
|
35
26
|
|
|
36
27
|
return (
|
|
37
28
|
<Flex flex={1} justify="center" align="center">
|
|
38
|
-
<
|
|
29
|
+
<Flex direction="column" gap="md" w={400}>
|
|
39
30
|
<Card withBorder p="xl" bg="var(--alepha-elevated)">
|
|
40
|
-
<
|
|
31
|
+
<Flex direction="column" gap="lg">
|
|
41
32
|
{/* Avatar and name */}
|
|
42
33
|
<Flex direction="column" align="center" gap="md">
|
|
43
34
|
<Avatar
|
|
@@ -48,18 +39,18 @@ const Profile = () => {
|
|
|
48
39
|
>
|
|
49
40
|
{!picture && <IconUser size={48} />}
|
|
50
41
|
</Avatar>
|
|
51
|
-
<
|
|
42
|
+
<Flex direction="column" gap={4} align="center">
|
|
52
43
|
<Title order={3}>{displayName}</Title>
|
|
53
44
|
{email && username && (
|
|
54
45
|
<Text size="sm" c="dimmed">
|
|
55
46
|
@{username}
|
|
56
47
|
</Text>
|
|
57
48
|
)}
|
|
58
|
-
</
|
|
49
|
+
</Flex>
|
|
59
50
|
</Flex>
|
|
60
51
|
|
|
61
52
|
{/* User details */}
|
|
62
|
-
<
|
|
53
|
+
<Flex direction="column" gap="sm">
|
|
63
54
|
{email && (
|
|
64
55
|
<ProfileField icon={<IconAt size={18} />} label="Email">
|
|
65
56
|
{email}
|
|
@@ -83,13 +74,13 @@ const Profile = () => {
|
|
|
83
74
|
{/* Roles */}
|
|
84
75
|
{roles && roles.length > 0 && (
|
|
85
76
|
<ProfileField icon={<IconShield size={18} />} label="Roles">
|
|
86
|
-
<
|
|
77
|
+
<Flex gap="xs">
|
|
87
78
|
{roles.map((role) => (
|
|
88
79
|
<Badge key={role} size="sm" variant="light">
|
|
89
80
|
{role}
|
|
90
81
|
</Badge>
|
|
91
82
|
))}
|
|
92
|
-
</
|
|
83
|
+
</Flex>
|
|
93
84
|
</ProfileField>
|
|
94
85
|
)}
|
|
95
86
|
|
|
@@ -99,19 +90,19 @@ const Profile = () => {
|
|
|
99
90
|
icon={<IconCalendar size={18} />}
|
|
100
91
|
label="Organizations"
|
|
101
92
|
>
|
|
102
|
-
<
|
|
93
|
+
<Flex gap="xs">
|
|
103
94
|
{organizations.map((org) => (
|
|
104
95
|
<Badge key={org} size="sm" variant="outline">
|
|
105
96
|
{org}
|
|
106
97
|
</Badge>
|
|
107
98
|
))}
|
|
108
|
-
</
|
|
99
|
+
</Flex>
|
|
109
100
|
</ProfileField>
|
|
110
101
|
)}
|
|
111
|
-
</
|
|
102
|
+
</Flex>
|
|
112
103
|
|
|
113
104
|
{/* Actions */}
|
|
114
|
-
<
|
|
105
|
+
<Flex direction="column" gap="sm" mt="md">
|
|
115
106
|
<ActionButton
|
|
116
107
|
variant="light"
|
|
117
108
|
color="red"
|
|
@@ -120,14 +111,14 @@ const Profile = () => {
|
|
|
120
111
|
>
|
|
121
112
|
Sign out
|
|
122
113
|
</ActionButton>
|
|
123
|
-
</
|
|
124
|
-
</
|
|
114
|
+
</Flex>
|
|
115
|
+
</Flex>
|
|
125
116
|
</Card>
|
|
126
117
|
|
|
127
118
|
<ActionButton variant="subtle" href="/">
|
|
128
119
|
Back to home
|
|
129
120
|
</ActionButton>
|
|
130
|
-
</
|
|
121
|
+
</Flex>
|
|
131
122
|
</Flex>
|
|
132
123
|
);
|
|
133
124
|
};
|
|
@@ -144,12 +135,12 @@ const ProfileField = ({ icon, label, children }: ProfileFieldProps) => {
|
|
|
144
135
|
<Flex c="dimmed" mt={2}>
|
|
145
136
|
{icon}
|
|
146
137
|
</Flex>
|
|
147
|
-
<
|
|
138
|
+
<Flex direction="column" gap={2} flex={1}>
|
|
148
139
|
<Text size="xs" c="dimmed" tt="uppercase" fw={500}>
|
|
149
140
|
{label}
|
|
150
141
|
</Text>
|
|
151
142
|
<Text size="sm">{children}</Text>
|
|
152
|
-
</
|
|
143
|
+
</Flex>
|
|
153
144
|
</Flex>
|
|
154
145
|
);
|
|
155
146
|
};
|
|
@@ -1,15 +1,5 @@
|
|
|
1
1
|
import { ActionButton, Control, capitalize } from "@alepha/ui";
|
|
2
|
-
import {
|
|
3
|
-
Alert,
|
|
4
|
-
Card,
|
|
5
|
-
Flex,
|
|
6
|
-
Group,
|
|
7
|
-
Image,
|
|
8
|
-
PinInput,
|
|
9
|
-
Stack,
|
|
10
|
-
Text,
|
|
11
|
-
Title,
|
|
12
|
-
} from "@mantine/core";
|
|
2
|
+
import { Alert, Card, Flex, Image, PinInput, Text, Title } from "@mantine/core";
|
|
13
3
|
import {
|
|
14
4
|
IconAlertCircle,
|
|
15
5
|
IconLock,
|
|
@@ -222,9 +212,9 @@ const Register = (props: RegisterProps) => {
|
|
|
222
212
|
if (registrationState.phase === "verification" && registrationState.intent) {
|
|
223
213
|
return (
|
|
224
214
|
<Flex flex={1} justify={"center"} align={"center"}>
|
|
225
|
-
<
|
|
215
|
+
<Flex direction="column" gap={"sm"} w={360}>
|
|
226
216
|
<Card withBorder p={"lg"} bg={"var(--alepha-elevated)"}>
|
|
227
|
-
<
|
|
217
|
+
<Flex direction="column" gap={"md"}>
|
|
228
218
|
<Text size="lg" fw={500} ta="center">
|
|
229
219
|
{tr("registerVerifyTitle") ?? "Verify your account"}
|
|
230
220
|
</Text>
|
|
@@ -240,7 +230,7 @@ const Register = (props: RegisterProps) => {
|
|
|
240
230
|
)}
|
|
241
231
|
|
|
242
232
|
{registrationState.intent.expectEmailVerification && (
|
|
243
|
-
<
|
|
233
|
+
<Flex direction="column" gap={"xs"}>
|
|
244
234
|
<Text size="sm" fw={500}>
|
|
245
235
|
{tr("registerEmailCode")}
|
|
246
236
|
</Text>
|
|
@@ -254,11 +244,11 @@ const Register = (props: RegisterProps) => {
|
|
|
254
244
|
aria-label="Email verification code"
|
|
255
245
|
/>
|
|
256
246
|
</Flex>
|
|
257
|
-
</
|
|
247
|
+
</Flex>
|
|
258
248
|
)}
|
|
259
249
|
|
|
260
250
|
{registrationState.intent.expectPhoneVerification && (
|
|
261
|
-
<
|
|
251
|
+
<Flex direction="column" gap={"xs"}>
|
|
262
252
|
<Text size="sm" fw={500}>
|
|
263
253
|
{tr("registerPhoneCode")}
|
|
264
254
|
</Text>
|
|
@@ -272,7 +262,7 @@ const Register = (props: RegisterProps) => {
|
|
|
272
262
|
aria-label="Phone verification code"
|
|
273
263
|
/>
|
|
274
264
|
</Flex>
|
|
275
|
-
</
|
|
265
|
+
</Flex>
|
|
276
266
|
)}
|
|
277
267
|
|
|
278
268
|
<ActionButton
|
|
@@ -292,9 +282,9 @@ const Register = (props: RegisterProps) => {
|
|
|
292
282
|
>
|
|
293
283
|
{tr("registerVerifyBack") ?? "Back to registration"}
|
|
294
284
|
</ActionButton>
|
|
295
|
-
</
|
|
285
|
+
</Flex>
|
|
296
286
|
</Card>
|
|
297
|
-
</
|
|
287
|
+
</Flex>
|
|
298
288
|
</Flex>
|
|
299
289
|
);
|
|
300
290
|
}
|
|
@@ -309,14 +299,14 @@ const Register = (props: RegisterProps) => {
|
|
|
309
299
|
// Registration form phase UI
|
|
310
300
|
return (
|
|
311
301
|
<Flex flex={1} justify={"center"} align={"center"}>
|
|
312
|
-
<
|
|
302
|
+
<Flex direction="column" gap={"sm"} w={360}>
|
|
313
303
|
<Card withBorder p={"lg"} bg={"var(--alepha-elevated)"}>
|
|
314
|
-
<
|
|
304
|
+
<Flex direction="column" gap={"md"}>
|
|
315
305
|
{/* Realm branding */}
|
|
316
306
|
{(settings.logoUrl ||
|
|
317
307
|
settings.displayName ||
|
|
318
308
|
settings.description) && (
|
|
319
|
-
<
|
|
309
|
+
<Flex direction="column" gap={"xs"} align="center" mb="xs">
|
|
320
310
|
{settings.logoUrl && (
|
|
321
311
|
<Image
|
|
322
312
|
src={settings.logoUrl}
|
|
@@ -336,7 +326,7 @@ const Register = (props: RegisterProps) => {
|
|
|
336
326
|
{settings.description}
|
|
337
327
|
</Text>
|
|
338
328
|
)}
|
|
339
|
-
</
|
|
329
|
+
</Flex>
|
|
340
330
|
)}
|
|
341
331
|
|
|
342
332
|
{!isRegistrationAllowed ? (
|
|
@@ -361,7 +351,7 @@ const Register = (props: RegisterProps) => {
|
|
|
361
351
|
{/* Credentials registration form */}
|
|
362
352
|
{credentialsProvider && (
|
|
363
353
|
<form {...form.props}>
|
|
364
|
-
<
|
|
354
|
+
<Flex direction="column" flex={1} gap={"md"}>
|
|
365
355
|
{settings.usernameEnabled !== false &&
|
|
366
356
|
form.input.username && (
|
|
367
357
|
<Control
|
|
@@ -417,24 +407,24 @@ const Register = (props: RegisterProps) => {
|
|
|
417
407
|
>
|
|
418
408
|
{tr("registerCreateAccount")}
|
|
419
409
|
</ActionButton>
|
|
420
|
-
</
|
|
410
|
+
</Flex>
|
|
421
411
|
</form>
|
|
422
412
|
)}
|
|
423
413
|
|
|
424
414
|
{/* OR divider - only when both credentials AND external methods exist */}
|
|
425
415
|
{showOrDivider && (
|
|
426
|
-
<
|
|
416
|
+
<Flex align="center" justify="center" gap={"md"}>
|
|
427
417
|
<Flex flex={1} h={"1px"} bg={"var(--alepha-border)"} />
|
|
428
418
|
<Text size="xs" c="dimmed">
|
|
429
419
|
{tr("registerOr")}
|
|
430
420
|
</Text>
|
|
431
421
|
<Flex flex={1} h={"1px"} bg={"var(--alepha-border)"} />
|
|
432
|
-
</
|
|
422
|
+
</Flex>
|
|
433
423
|
)}
|
|
434
424
|
|
|
435
425
|
{/* External login methods */}
|
|
436
426
|
{externalMethods.length > 0 && (
|
|
437
|
-
<
|
|
427
|
+
<Flex direction="column" gap={"sm"}>
|
|
438
428
|
{externalMethods.map((method) => (
|
|
439
429
|
<ActionButton
|
|
440
430
|
variant={"default"}
|
|
@@ -452,7 +442,7 @@ const Register = (props: RegisterProps) => {
|
|
|
452
442
|
})}
|
|
453
443
|
</ActionButton>
|
|
454
444
|
))}
|
|
455
|
-
</
|
|
445
|
+
</Flex>
|
|
456
446
|
)}
|
|
457
447
|
|
|
458
448
|
{/* Sign in link */}
|
|
@@ -469,12 +459,12 @@ const Register = (props: RegisterProps) => {
|
|
|
469
459
|
</Text>
|
|
470
460
|
</>
|
|
471
461
|
)}
|
|
472
|
-
</
|
|
462
|
+
</Flex>
|
|
473
463
|
</Card>
|
|
474
464
|
<ActionButton variant={"subtle"} href={redirect}>
|
|
475
465
|
{tr("registerCancel")}
|
|
476
466
|
</ActionButton>
|
|
477
|
-
</
|
|
467
|
+
</Flex>
|
|
478
468
|
</Flex>
|
|
479
469
|
);
|
|
480
470
|
};
|
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
import { ActionButton, Control } from "@alepha/ui";
|
|
2
|
-
import {
|
|
3
|
-
Alert,
|
|
4
|
-
Card,
|
|
5
|
-
Flex,
|
|
6
|
-
Image,
|
|
7
|
-
PinInput,
|
|
8
|
-
Stack,
|
|
9
|
-
Text,
|
|
10
|
-
Title,
|
|
11
|
-
} from "@mantine/core";
|
|
2
|
+
import { Alert, Card, Flex, Image, PinInput, Text, Title } from "@mantine/core";
|
|
12
3
|
import {
|
|
13
4
|
IconAlertCircle,
|
|
14
5
|
IconCheck,
|
|
@@ -139,14 +130,14 @@ const ResetPassword = (props: ResetPasswordProps) => {
|
|
|
139
130
|
|
|
140
131
|
return (
|
|
141
132
|
<Flex flex={1} justify={"center"} align={"center"}>
|
|
142
|
-
<
|
|
133
|
+
<Flex direction="column" gap={"sm"} w={360}>
|
|
143
134
|
<Card withBorder p={"lg"} bg={"var(--alepha-elevated)"}>
|
|
144
|
-
<
|
|
135
|
+
<Flex direction="column" gap={"md"}>
|
|
145
136
|
{/* Realm branding */}
|
|
146
137
|
{(settings.logoUrl ||
|
|
147
138
|
settings.displayName ||
|
|
148
139
|
settings.description) && (
|
|
149
|
-
<
|
|
140
|
+
<Flex direction="column" gap={"xs"} align="center" mb="xs">
|
|
150
141
|
{settings.logoUrl && (
|
|
151
142
|
<Image
|
|
152
143
|
src={settings.logoUrl}
|
|
@@ -166,7 +157,7 @@ const ResetPassword = (props: ResetPasswordProps) => {
|
|
|
166
157
|
{settings.description}
|
|
167
158
|
</Text>
|
|
168
159
|
)}
|
|
169
|
-
</
|
|
160
|
+
</Flex>
|
|
170
161
|
)}
|
|
171
162
|
|
|
172
163
|
{error && (
|
|
@@ -194,7 +185,7 @@ const ResetPassword = (props: ResetPasswordProps) => {
|
|
|
194
185
|
</>
|
|
195
186
|
) : resetState.step === "email" ? (
|
|
196
187
|
<form {...emailForm.props}>
|
|
197
|
-
<
|
|
188
|
+
<Flex direction="column" flex={1} gap={"md"}>
|
|
198
189
|
<Text size="lg" fw={500} ta="center">
|
|
199
190
|
{tr("resetPasswordTitle")}
|
|
200
191
|
</Text>
|
|
@@ -217,10 +208,10 @@ const ResetPassword = (props: ResetPasswordProps) => {
|
|
|
217
208
|
>
|
|
218
209
|
{tr("resetPasswordSendCode")}
|
|
219
210
|
</ActionButton>
|
|
220
|
-
</
|
|
211
|
+
</Flex>
|
|
221
212
|
</form>
|
|
222
213
|
) : resetState.step === "code" ? (
|
|
223
|
-
<
|
|
214
|
+
<Flex direction="column" gap={"md"}>
|
|
224
215
|
<Text size="lg" fw={500} ta="center">
|
|
225
216
|
{tr("resetPasswordTitle")}
|
|
226
217
|
</Text>
|
|
@@ -247,10 +238,10 @@ const ResetPassword = (props: ResetPasswordProps) => {
|
|
|
247
238
|
>
|
|
248
239
|
{tr("resetPasswordResendCode")}
|
|
249
240
|
</ActionButton>
|
|
250
|
-
</
|
|
241
|
+
</Flex>
|
|
251
242
|
) : resetState.step === "password" ? (
|
|
252
243
|
<form {...passwordForm.props}>
|
|
253
|
-
<
|
|
244
|
+
<Flex direction="column" flex={1} gap={"md"}>
|
|
254
245
|
<Text size="lg" fw={500} ta="center">
|
|
255
246
|
{tr("resetPasswordTitle")}
|
|
256
247
|
</Text>
|
|
@@ -277,7 +268,7 @@ const ResetPassword = (props: ResetPasswordProps) => {
|
|
|
277
268
|
<ActionButton form={passwordForm}>
|
|
278
269
|
{tr("resetPasswordSetNewPassword")}
|
|
279
270
|
</ActionButton>
|
|
280
|
-
</
|
|
271
|
+
</Flex>
|
|
281
272
|
</form>
|
|
282
273
|
) : (
|
|
283
274
|
<>
|
|
@@ -293,12 +284,12 @@ const ResetPassword = (props: ResetPasswordProps) => {
|
|
|
293
284
|
</ActionButton>
|
|
294
285
|
</>
|
|
295
286
|
)}
|
|
296
|
-
</
|
|
287
|
+
</Flex>
|
|
297
288
|
</Card>
|
|
298
289
|
<ActionButton variant={"subtle"} href={redirect}>
|
|
299
290
|
{tr("resetPasswordCancel")}
|
|
300
291
|
</ActionButton>
|
|
301
|
-
</
|
|
292
|
+
</Flex>
|
|
302
293
|
</Flex>
|
|
303
294
|
);
|
|
304
295
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ActionButton } from "@alepha/ui";
|
|
2
|
-
import { Alert, Card, Flex, Loader,
|
|
2
|
+
import { Alert, Card, Flex, Loader, Text } from "@mantine/core";
|
|
3
3
|
import { IconAlertCircle, IconCheck, IconMailCheck } from "@tabler/icons-react";
|
|
4
4
|
import type { UserController } from "alepha/api/users";
|
|
5
5
|
import { useClient } from "alepha/react";
|
|
@@ -49,9 +49,9 @@ const VerifyEmail = (_props: VerifyEmailProps) => {
|
|
|
49
49
|
|
|
50
50
|
return (
|
|
51
51
|
<Flex flex={1} justify="center" align="center">
|
|
52
|
-
<
|
|
52
|
+
<Flex direction="column" gap="sm" w={400}>
|
|
53
53
|
<Card withBorder p="lg" bg="var(--alepha-elevated)">
|
|
54
|
-
<
|
|
54
|
+
<Flex direction="column" gap="md" align="center">
|
|
55
55
|
{step === "verifying" && (
|
|
56
56
|
<>
|
|
57
57
|
<Loader size="lg" />
|
|
@@ -93,9 +93,9 @@ const VerifyEmail = (_props: VerifyEmailProps) => {
|
|
|
93
93
|
</ActionButton>
|
|
94
94
|
</>
|
|
95
95
|
)}
|
|
96
|
-
</
|
|
96
|
+
</Flex>
|
|
97
97
|
</Card>
|
|
98
|
-
</
|
|
98
|
+
</Flex>
|
|
99
99
|
</Flex>
|
|
100
100
|
);
|
|
101
101
|
};
|
|
@@ -31,6 +31,11 @@ export interface UserButtonProps
|
|
|
31
31
|
*/
|
|
32
32
|
logoutLabel?: string;
|
|
33
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Custom label for the login button when user is not authenticated
|
|
36
|
+
*/
|
|
37
|
+
loginLabel?: string;
|
|
38
|
+
|
|
34
39
|
/**
|
|
35
40
|
* Menu configuration overrides
|
|
36
41
|
*/
|
|
@@ -51,6 +56,7 @@ const UserButton = (props: UserButtonProps) => {
|
|
|
51
56
|
const {
|
|
52
57
|
menuItems = [],
|
|
53
58
|
logoutLabel = "Sign out",
|
|
59
|
+
loginLabel,
|
|
54
60
|
menuConfig,
|
|
55
61
|
showLogoutDivider = menuItems.length > 0,
|
|
56
62
|
icon,
|
|
@@ -79,9 +85,11 @@ const UserButton = (props: UserButtonProps) => {
|
|
|
79
85
|
return (
|
|
80
86
|
<ActionButton
|
|
81
87
|
{...buttonProps}
|
|
82
|
-
icon={IconLogin2}
|
|
88
|
+
icon={icon === null ? undefined : (icon ?? IconLogin2)}
|
|
83
89
|
href={authRouter.path("login")}
|
|
84
|
-
|
|
90
|
+
>
|
|
91
|
+
{loginLabel ?? children}
|
|
92
|
+
</ActionButton>
|
|
85
93
|
);
|
|
86
94
|
}
|
|
87
95
|
|
|
@@ -132,12 +140,14 @@ const UserButton = (props: UserButtonProps) => {
|
|
|
132
140
|
});
|
|
133
141
|
|
|
134
142
|
// Use leftSection for Avatar (JSX element), icon prop for component types
|
|
135
|
-
const hasAvatar =
|
|
143
|
+
const hasAvatar = icon === undefined && auth.user.picture;
|
|
136
144
|
|
|
137
145
|
return (
|
|
138
146
|
<ActionButton
|
|
139
147
|
{...buttonProps}
|
|
140
|
-
icon={
|
|
148
|
+
icon={
|
|
149
|
+
hasAvatar ? undefined : icon === null ? undefined : (icon ?? IconUser)
|
|
150
|
+
}
|
|
141
151
|
leftSection={
|
|
142
152
|
hasAvatar ? (
|
|
143
153
|
<Avatar
|
|
@@ -497,6 +497,7 @@ const ActionHookButton = (props: ActionHookButtonProps) => {
|
|
|
497
497
|
|
|
498
498
|
export interface ActionClickButtonProps extends ButtonProps {
|
|
499
499
|
onClick: (e: any) => any;
|
|
500
|
+
preventDefault?: boolean;
|
|
500
501
|
}
|
|
501
502
|
|
|
502
503
|
/**
|
|
@@ -509,14 +510,20 @@ export interface ActionClickButtonProps extends ButtonProps {
|
|
|
509
510
|
* </ActionButton>
|
|
510
511
|
* ```
|
|
511
512
|
*/
|
|
512
|
-
const ActionClickButton = (
|
|
513
|
+
const ActionClickButton = ({
|
|
514
|
+
preventDefault,
|
|
515
|
+
...props
|
|
516
|
+
}: ActionClickButtonProps) => {
|
|
513
517
|
const action = useAction(
|
|
514
518
|
{
|
|
515
519
|
handler: async (e: any) => {
|
|
520
|
+
if (preventDefault) {
|
|
521
|
+
e.preventDefault();
|
|
522
|
+
}
|
|
516
523
|
await props.onClick(e);
|
|
517
524
|
},
|
|
518
525
|
},
|
|
519
|
-
[props.onClick],
|
|
526
|
+
[props.onClick, preventDefault],
|
|
520
527
|
);
|
|
521
528
|
|
|
522
529
|
return (
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ActionIcon,
|
|
3
|
-
Box,
|
|
4
3
|
Collapse,
|
|
5
4
|
CopyButton,
|
|
5
|
+
Flex,
|
|
6
6
|
type MantineSize,
|
|
7
7
|
Text,
|
|
8
8
|
Tooltip,
|
|
@@ -64,9 +64,9 @@ export const ErrorViewer = ({
|
|
|
64
64
|
};
|
|
65
65
|
|
|
66
66
|
return (
|
|
67
|
-
<
|
|
67
|
+
<Flex pos="relative" w="100%">
|
|
68
68
|
{copyable && (
|
|
69
|
-
<
|
|
69
|
+
<Flex pos="absolute" top={0} right={0} style={{ zIndex: 1 }}>
|
|
70
70
|
<CopyButton value={getCopyContent()}>
|
|
71
71
|
{({ copied, copy }) => (
|
|
72
72
|
<Tooltip label={copied ? "Copied" : "Copy Error"}>
|
|
@@ -85,10 +85,10 @@ export const ErrorViewer = ({
|
|
|
85
85
|
</Tooltip>
|
|
86
86
|
)}
|
|
87
87
|
</CopyButton>
|
|
88
|
-
</
|
|
88
|
+
</Flex>
|
|
89
89
|
)}
|
|
90
|
-
<
|
|
91
|
-
<
|
|
90
|
+
<Flex pt={copyable ? 30 : 0}>
|
|
91
|
+
<Flex
|
|
92
92
|
style={{
|
|
93
93
|
display: "flex",
|
|
94
94
|
alignItems: "flex-start",
|
|
@@ -112,11 +112,11 @@ export const ErrorViewer = ({
|
|
|
112
112
|
>
|
|
113
113
|
{errorMessage}
|
|
114
114
|
</Text>
|
|
115
|
-
</
|
|
115
|
+
</Flex>
|
|
116
116
|
|
|
117
117
|
{showStack && stackLines.length > 1 && (
|
|
118
|
-
<
|
|
119
|
-
<
|
|
118
|
+
<Flex mt="sm">
|
|
119
|
+
<Flex
|
|
120
120
|
style={{
|
|
121
121
|
display: "flex",
|
|
122
122
|
alignItems: "center",
|
|
@@ -135,10 +135,10 @@ export const ErrorViewer = ({
|
|
|
135
135
|
<Text c="dimmed" size={sizeConfig.text} fw={500}>
|
|
136
136
|
Stack Trace ({stackLines.length - 1} frames)
|
|
137
137
|
</Text>
|
|
138
|
-
</
|
|
138
|
+
</Flex>
|
|
139
139
|
|
|
140
140
|
<Collapse in={stackExpanded}>
|
|
141
|
-
<
|
|
141
|
+
<Flex
|
|
142
142
|
mt="xs"
|
|
143
143
|
pl="md"
|
|
144
144
|
style={{
|
|
@@ -159,12 +159,12 @@ export const ErrorViewer = ({
|
|
|
159
159
|
{line}
|
|
160
160
|
</Text>
|
|
161
161
|
))}
|
|
162
|
-
</
|
|
162
|
+
</Flex>
|
|
163
163
|
</Collapse>
|
|
164
|
-
</
|
|
164
|
+
</Flex>
|
|
165
165
|
)}
|
|
166
|
-
</
|
|
167
|
-
</
|
|
166
|
+
</Flex>
|
|
167
|
+
</Flex>
|
|
168
168
|
);
|
|
169
169
|
};
|
|
170
170
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { Button,
|
|
1
|
+
import { Button, Flex, Text } from "@mantine/core";
|
|
2
2
|
import type { AlertDialogProps } from "../../services/DialogService.tsx";
|
|
3
3
|
|
|
4
4
|
const AlertDialog = ({ options, onClose }: AlertDialogProps) => (
|
|
5
5
|
<>
|
|
6
6
|
{options?.message && <Text mb="md">{options.message}</Text>}
|
|
7
|
-
<
|
|
7
|
+
<Flex justify="flex-end">
|
|
8
8
|
<Button onClick={onClose}>{options?.okLabel || "OK"}</Button>
|
|
9
|
-
</
|
|
9
|
+
</Flex>
|
|
10
10
|
</>
|
|
11
11
|
);
|
|
12
12
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Button,
|
|
1
|
+
import { Button, Flex, Text } from "@mantine/core";
|
|
2
2
|
import type { ConfirmDialogProps } from "../../services/DialogService.tsx";
|
|
3
3
|
|
|
4
4
|
const ConfirmDialog = ({ options, onConfirm }: ConfirmDialogProps) => (
|
|
5
5
|
<>
|
|
6
6
|
{options?.message && <Text mb="md">{options.message}</Text>}
|
|
7
|
-
<
|
|
7
|
+
<Flex justify="flex-end">
|
|
8
8
|
<Button variant="subtle" onClick={() => onConfirm(false)}>
|
|
9
9
|
{options?.cancelLabel || "Cancel"}
|
|
10
10
|
</Button>
|
|
@@ -14,7 +14,7 @@ const ConfirmDialog = ({ options, onConfirm }: ConfirmDialogProps) => (
|
|
|
14
14
|
>
|
|
15
15
|
{options?.confirmLabel || "Confirm"}
|
|
16
16
|
</Button>
|
|
17
|
-
</
|
|
17
|
+
</Flex>
|
|
18
18
|
</>
|
|
19
19
|
);
|
|
20
20
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Button,
|
|
1
|
+
import { Button, Flex, Text, TextInput } from "@mantine/core";
|
|
2
2
|
import { useEffect, useRef, useState } from "react";
|
|
3
3
|
import type { PromptDialogProps } from "../../services/DialogService.tsx";
|
|
4
4
|
|
|
@@ -36,7 +36,7 @@ const PromptDialog = ({ options, onSubmit }: PromptDialogProps) => {
|
|
|
36
36
|
required={options?.required}
|
|
37
37
|
mb="md"
|
|
38
38
|
/>
|
|
39
|
-
<
|
|
39
|
+
<Flex justify="flex-end">
|
|
40
40
|
<Button variant="subtle" onClick={() => onSubmit(null)}>
|
|
41
41
|
{options?.cancelLabel || "Cancel"}
|
|
42
42
|
</Button>
|
|
@@ -46,7 +46,7 @@ const PromptDialog = ({ options, onSubmit }: PromptDialogProps) => {
|
|
|
46
46
|
>
|
|
47
47
|
{options?.submitLabel || "OK"}
|
|
48
48
|
</Button>
|
|
49
|
-
</
|
|
49
|
+
</Flex>
|
|
50
50
|
</>
|
|
51
51
|
);
|
|
52
52
|
};
|