@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.
Files changed (175) hide show
  1. package/dist/admin/{AdminApiKeys-CoTOTfgU.js → AdminApiKeys-CF_qOO3u.js} +20 -20
  2. package/dist/admin/AdminApiKeys-CF_qOO3u.js.map +1 -0
  3. package/dist/admin/{AdminAudits-BmsxFbDa.js → AdminAudits-BQno3hZG.js} +7 -8
  4. package/dist/admin/AdminAudits-BQno3hZG.js.map +1 -0
  5. package/dist/admin/{AdminFiles-BBB8knca.js → AdminFiles-kvuUaASF.js} +3 -5
  6. package/dist/admin/{AdminFiles-BBB8knca.js.map → AdminFiles-kvuUaASF.js.map} +1 -1
  7. package/dist/admin/AdminJobDashboard-CrPxp0W1.js +485 -0
  8. package/dist/admin/AdminJobDashboard-CrPxp0W1.js.map +1 -0
  9. package/dist/admin/AdminJobExecutions-D-b4Zt7W.js +678 -0
  10. package/dist/admin/AdminJobExecutions-D-b4Zt7W.js.map +1 -0
  11. package/dist/admin/AdminJobRegistry-CNX5cpDx.js +301 -0
  12. package/dist/admin/AdminJobRegistry-CNX5cpDx.js.map +1 -0
  13. package/dist/admin/{AdminLayout-CsjvpeD1.js → AdminLayout-e-ZP5nWw.js} +1 -1
  14. package/dist/admin/{AdminLayout-CsjvpeD1.js.map → AdminLayout-e-ZP5nWw.js.map} +1 -1
  15. package/dist/admin/{AdminNotifications-LwR6RKrx.js → AdminNotifications-DeHJFf6W.js} +3 -5
  16. package/dist/admin/{AdminNotifications-LwR6RKrx.js.map → AdminNotifications-DeHJFf6W.js.map} +1 -1
  17. package/dist/admin/{AdminParameters-B_83Vie9.js → AdminParameters-iQE8o7a7.js} +43 -36
  18. package/dist/admin/AdminParameters-iQE8o7a7.js.map +1 -0
  19. package/dist/admin/{AdminSessions-CWnPosdd.js → AdminSessions-oKJCbd7w.js} +5 -7
  20. package/dist/admin/AdminSessions-oKJCbd7w.js.map +1 -0
  21. package/dist/admin/{AdminUserAudits-nHv636E_.js → AdminUserAudits-BNCEle_E.js} +6 -8
  22. package/dist/admin/AdminUserAudits-BNCEle_E.js.map +1 -0
  23. package/dist/admin/{AdminUserCreate-CjYD3Kjc.js → AdminUserCreate-CgqeFwCt.js} +6 -7
  24. package/dist/admin/AdminUserCreate-CgqeFwCt.js.map +1 -0
  25. package/dist/admin/{AdminUserDetails-Ccq-LsZ0.js → AdminUserDetails-DDe1A1GP.js} +30 -29
  26. package/dist/admin/AdminUserDetails-DDe1A1GP.js.map +1 -0
  27. package/dist/admin/{AdminUserLayout-7s41DiF_.js → AdminUserLayout-HAlobhWf.js} +18 -16
  28. package/dist/admin/AdminUserLayout-HAlobhWf.js.map +1 -0
  29. package/dist/admin/{AdminUserSessions-Ds3ODq_d.js → AdminUserSessions-Bq1LnVLf.js} +5 -7
  30. package/dist/admin/AdminUserSessions-Bq1LnVLf.js.map +1 -0
  31. package/dist/admin/{AdminUserSettings-CGh4gROo.js → AdminUserSettings-BRsBZoxV.js} +10 -10
  32. package/dist/admin/AdminUserSettings-BRsBZoxV.js.map +1 -0
  33. package/dist/admin/{AdminUsers-CvPiBzQK.js → AdminUsers-D71kIOSn.js} +6 -8
  34. package/dist/admin/AdminUsers-D71kIOSn.js.map +1 -0
  35. package/dist/admin/index.d.ts +7 -83
  36. package/dist/admin/index.d.ts.map +1 -1
  37. package/dist/admin/index.js +49 -70
  38. package/dist/admin/index.js.map +1 -1
  39. package/dist/auth/{Login-DS_OqA0G.js → Login-BS_FYTy0.js} +13 -8
  40. package/dist/auth/Login-BS_FYTy0.js.map +1 -0
  41. package/dist/auth/{Profile-Di7N7HZL.js → Profile-CjDsW378.js} +16 -10
  42. package/dist/auth/Profile-CjDsW378.js.map +1 -0
  43. package/dist/auth/{Register-BRR2_gux.js → Register-C5eqzAaD.js} +21 -12
  44. package/dist/auth/Register-C5eqzAaD.js.map +1 -0
  45. package/dist/auth/{ResetPassword-oQu72lod.js → ResetPassword-XifinVao.js} +14 -8
  46. package/dist/auth/ResetPassword-XifinVao.js.map +1 -0
  47. package/dist/auth/{VerifyEmail-DC6HPZjd.js → VerifyEmail-DTgbeJOO.js} +6 -4
  48. package/dist/auth/VerifyEmail-DTgbeJOO.js.map +1 -0
  49. package/dist/auth/index.d.ts +4 -0
  50. package/dist/auth/index.d.ts.map +1 -1
  51. package/dist/auth/index.js +15 -14
  52. package/dist/auth/index.js.map +1 -1
  53. package/dist/core/index.d.ts +37 -26
  54. package/dist/core/index.d.ts.map +1 -1
  55. package/dist/core/index.js +444 -193
  56. package/dist/core/index.js.map +1 -1
  57. package/dist/demo/DemoDataTable-lnBKWBf8.js +362 -0
  58. package/dist/demo/DemoDataTable-lnBKWBf8.js.map +1 -0
  59. package/dist/demo/{DemoHome-DpRrPlBC.js → DemoHome-CUMZsYaH.js} +6 -7
  60. package/dist/demo/DemoHome-CUMZsYaH.js.map +1 -0
  61. package/dist/demo/{DemoJsonViewer-zeucGKHV.js → DemoJsonViewer-_uokbGaW.js} +17 -19
  62. package/dist/demo/DemoJsonViewer-_uokbGaW.js.map +1 -0
  63. package/dist/demo/{DemoLayout-PhgbAAiQ.js → DemoLayout-DHVoacE6.js} +2 -4
  64. package/dist/demo/{DemoLayout-PhgbAAiQ.js.map → DemoLayout-DHVoacE6.js.map} +1 -1
  65. package/dist/demo/{DemoLogin-DSzP0Lkv.js → DemoLogin-DjJ9314c.js} +22 -17
  66. package/dist/demo/DemoLogin-DjJ9314c.js.map +1 -0
  67. package/dist/demo/{DemoRegister-DavFBsCz.js → DemoRegister-DzkJ5M83.js} +34 -25
  68. package/dist/demo/DemoRegister-DzkJ5M83.js.map +1 -0
  69. package/dist/demo/{DemoResetPassword-BS2rIAQK.js → DemoResetPassword-DWh4_BpQ.js} +27 -21
  70. package/dist/demo/DemoResetPassword-DWh4_BpQ.js.map +1 -0
  71. package/dist/demo/{DemoSidebar-zNkUmHRl.js → DemoSidebar-C1csnGhX.js} +2 -2
  72. package/dist/demo/{DemoSidebar-zNkUmHRl.js.map → DemoSidebar-C1csnGhX.js.map} +1 -1
  73. package/dist/demo/{DemoTypeForm-B9q7oT0b.js → DemoTypeForm-CWz6fJrJ.js} +2 -2
  74. package/dist/demo/{DemoTypeForm-B9q7oT0b.js.map → DemoTypeForm-CWz6fJrJ.js.map} +1 -1
  75. package/dist/demo/{DemoVerifyEmail-Bi4SdWz0.js → DemoVerifyEmail-DbU_tCj8.js} +13 -11
  76. package/dist/demo/DemoVerifyEmail-DbU_tCj8.js.map +1 -0
  77. package/dist/demo/{IconGoogle-CTeZyrek.js → IconGoogle-Ch1m3Uzl.js} +1 -1
  78. package/dist/demo/{IconGoogle-CTeZyrek.js.map → IconGoogle-Ch1m3Uzl.js.map} +1 -1
  79. package/dist/demo/{Showcase-C9btr_SJ.js → Showcase-BzoXNlCn.js} +10 -10
  80. package/dist/demo/Showcase-BzoXNlCn.js.map +1 -0
  81. package/dist/demo/index.d.ts +1 -68
  82. package/dist/demo/index.d.ts.map +1 -1
  83. package/dist/demo/index.js +11 -15
  84. package/dist/demo/index.js.map +1 -1
  85. package/dist/json/index.js +2 -2
  86. package/dist/json/index.js.map +1 -1
  87. package/package.json +9 -5
  88. package/src/admin/AdminRouter.ts +36 -5
  89. package/src/admin/components/audits/AdminAudits.tsx +5 -5
  90. package/src/admin/components/jobs/AdminJobDashboard.tsx +455 -0
  91. package/src/admin/components/jobs/AdminJobExecutions.tsx +693 -0
  92. package/src/admin/components/jobs/AdminJobRegistry.tsx +325 -0
  93. package/src/admin/components/keys/AdminApiKeys.tsx +28 -31
  94. package/src/admin/components/parameters/AdminParameters.tsx +3 -3
  95. package/src/admin/components/parameters/ParameterDetails.tsx +34 -29
  96. package/src/admin/components/parameters/ParameterEmptyState.tsx +5 -5
  97. package/src/admin/components/parameters/ParameterHistory.tsx +11 -19
  98. package/src/admin/components/parameters/ParameterTree.tsx +16 -18
  99. package/src/admin/components/sessions/AdminSessions.tsx +3 -3
  100. package/src/admin/components/shared/AdminResourceHeader.tsx +20 -16
  101. package/src/admin/components/users/AdminUserAudits.tsx +5 -5
  102. package/src/admin/components/users/AdminUserCreate.tsx +3 -3
  103. package/src/admin/components/users/AdminUserDetails.tsx +51 -53
  104. package/src/admin/components/users/AdminUserLayout.tsx +7 -7
  105. package/src/admin/components/users/AdminUserSessions.tsx +3 -3
  106. package/src/admin/components/users/AdminUserSettings.tsx +9 -9
  107. package/src/admin/components/users/AdminUsers.tsx +5 -5
  108. package/src/admin/components/verifications/AdminVerifications.tsx +3 -3
  109. package/src/admin/index.ts +0 -24
  110. package/src/auth/components/Login.tsx +13 -13
  111. package/src/auth/components/Profile.tsx +17 -26
  112. package/src/auth/components/Register.tsx +21 -31
  113. package/src/auth/components/ResetPassword.tsx +13 -22
  114. package/src/auth/components/VerifyEmail.tsx +5 -5
  115. package/src/auth/components/buttons/UserButton.tsx +14 -4
  116. package/src/core/components/buttons/ActionButton.tsx +9 -2
  117. package/src/core/components/data/ErrorViewer.tsx +15 -15
  118. package/src/core/components/dialogs/AlertDialog.tsx +3 -3
  119. package/src/core/components/dialogs/ConfirmDialog.tsx +3 -3
  120. package/src/core/components/dialogs/PromptDialog.tsx +3 -3
  121. package/src/core/components/form/Control.tsx +9 -0
  122. package/src/core/components/form/ControlArray.tsx +6 -7
  123. package/src/core/components/form/ControlObject.tsx +3 -3
  124. package/src/core/components/form/ControlQueryBuilder.tsx +20 -22
  125. package/src/core/components/form/ControlSelect.tsx +4 -0
  126. package/src/core/components/form/TypeForm.tsx +7 -0
  127. package/src/core/components/layout/Breadcrumb.tsx +6 -6
  128. package/src/core/components/layout/Omnibar.tsx +2 -1
  129. package/src/core/components/layout/Sidebar.tsx +5 -1
  130. package/src/core/components/table/ColumnPicker.tsx +47 -31
  131. package/src/core/components/table/DataTable.tsx +277 -201
  132. package/src/core/components/table/DataTableFilters.tsx +8 -0
  133. package/src/core/components/table/DataTableToolbar.tsx +98 -5
  134. package/src/core/components/table/FilterPicker.tsx +28 -26
  135. package/src/core/components/table/types.ts +52 -37
  136. package/src/core/components/table/useTableSelection.ts +83 -0
  137. package/src/core/styles.css +1 -0
  138. package/src/core/utils/parseInput.ts +1 -0
  139. package/src/demo/components/DemoHome.tsx +5 -5
  140. package/src/demo/components/core/DemoDataTable.tsx +209 -5
  141. package/src/demo/components/json/DemoJsonViewer.tsx +1 -1
  142. package/src/demo/components/shared/MacWindow.tsx +7 -7
  143. package/src/demo/components/shared/Showcase.tsx +3 -3
  144. package/src/demo/index.ts +0 -11
  145. package/src/json/components/JsonViewer.tsx +3 -3
  146. package/dist/admin/AdminApiKeys-CoTOTfgU.js.map +0 -1
  147. package/dist/admin/AdminAudits-BmsxFbDa.js.map +0 -1
  148. package/dist/admin/AdminJobs-C604joTz.js +0 -698
  149. package/dist/admin/AdminJobs-C604joTz.js.map +0 -1
  150. package/dist/admin/AdminParameters-B_83Vie9.js.map +0 -1
  151. package/dist/admin/AdminSessions-CWnPosdd.js.map +0 -1
  152. package/dist/admin/AdminUserAudits-nHv636E_.js.map +0 -1
  153. package/dist/admin/AdminUserCreate-CjYD3Kjc.js.map +0 -1
  154. package/dist/admin/AdminUserDetails-Ccq-LsZ0.js.map +0 -1
  155. package/dist/admin/AdminUserLayout-7s41DiF_.js.map +0 -1
  156. package/dist/admin/AdminUserSessions-Ds3ODq_d.js.map +0 -1
  157. package/dist/admin/AdminUserSettings-CGh4gROo.js.map +0 -1
  158. package/dist/admin/AdminUsers-CvPiBzQK.js.map +0 -1
  159. package/dist/admin/rolldown-runtime-CjeV3_4I.js +0 -18
  160. package/dist/auth/Login-DS_OqA0G.js.map +0 -1
  161. package/dist/auth/Profile-Di7N7HZL.js.map +0 -1
  162. package/dist/auth/Register-BRR2_gux.js.map +0 -1
  163. package/dist/auth/ResetPassword-oQu72lod.js.map +0 -1
  164. package/dist/auth/VerifyEmail-DC6HPZjd.js.map +0 -1
  165. package/dist/demo/DemoDataTable-DCsJq8v5.js +0 -149
  166. package/dist/demo/DemoDataTable-DCsJq8v5.js.map +0 -1
  167. package/dist/demo/DemoHome-DpRrPlBC.js.map +0 -1
  168. package/dist/demo/DemoJsonViewer-zeucGKHV.js.map +0 -1
  169. package/dist/demo/DemoLogin-DSzP0Lkv.js.map +0 -1
  170. package/dist/demo/DemoRegister-DavFBsCz.js.map +0 -1
  171. package/dist/demo/DemoResetPassword-BS2rIAQK.js.map +0 -1
  172. package/dist/demo/DemoVerifyEmail-Bi4SdWz0.js.map +0 -1
  173. package/dist/demo/Showcase-C9btr_SJ.js.map +0 -1
  174. package/dist/demo/rolldown-runtime-CjeV3_4I.js +0 -18
  175. package/src/admin/components/jobs/AdminJobs.tsx +0 -772
@@ -1,16 +1,14 @@
1
1
  import { ActionButton, ClipboardButton, Control } from "@alepha/ui";
2
2
  import {
3
3
  Badge,
4
- Box,
5
4
  Card,
6
5
  Center,
7
6
  Divider,
7
+ Flex,
8
8
  Grid,
9
- Group,
10
9
  Loader,
11
10
  Paper,
12
11
  SimpleGrid,
13
- Stack,
14
12
  Text,
15
13
  ThemeIcon,
16
14
  } from "@mantine/core";
@@ -43,7 +41,7 @@ interface DataRowProps {
43
41
  }
44
42
 
45
43
  const DataRow = ({ label, value, copyValue }: DataRowProps) => (
46
- <Group
44
+ <Flex
47
45
  justify="space-between"
48
46
  py={8}
49
47
  wrap="nowrap"
@@ -52,7 +50,7 @@ const DataRow = ({ label, value, copyValue }: DataRowProps) => (
52
50
  <Text size="sm" c="dimmed" style={{ flexShrink: 0 }}>
53
51
  {label}
54
52
  </Text>
55
- <Group gap={6} wrap="nowrap" style={{ minWidth: 0 }}>
53
+ <Flex gap={6} wrap="nowrap" style={{ minWidth: 0 }}>
56
54
  {typeof value === "string" ? (
57
55
  <Text size="sm" fw={500} truncate style={{ maxWidth: 220 }}>
58
56
  {value || "—"}
@@ -68,8 +66,8 @@ const DataRow = ({ label, value, copyValue }: DataRowProps) => (
68
66
  c="dimmed"
69
67
  />
70
68
  )}
71
- </Group>
72
- </Group>
69
+ </Flex>
70
+ </Flex>
73
71
  );
74
72
 
75
73
  interface StatCardProps {
@@ -81,19 +79,19 @@ interface StatCardProps {
81
79
 
82
80
  const StatCard = ({ icon, label, value, color }: StatCardProps) => (
83
81
  <Paper p="md" radius="md" withBorder>
84
- <Group gap="sm">
82
+ <Flex gap="sm">
85
83
  <ThemeIcon size="lg" radius="md" variant="light" color={color}>
86
84
  {icon}
87
85
  </ThemeIcon>
88
- <Box>
86
+ <Flex>
89
87
  <Text size="xl" fw={700} lh={1}>
90
88
  {value}
91
89
  </Text>
92
90
  <Text size="xs" c="dimmed">
93
91
  {label}
94
92
  </Text>
95
- </Box>
96
- </Group>
93
+ </Flex>
94
+ </Flex>
97
95
  </Paper>
98
96
  );
99
97
 
@@ -165,10 +163,10 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
165
163
  if (!user) {
166
164
  return (
167
165
  <Center flex={1} py="xl">
168
- <Stack align="center" gap="xs">
166
+ <Flex direction="column" align="center" gap="xs">
169
167
  <IconUser size={48} opacity={0.3} />
170
168
  <Text c="dimmed">User not found</Text>
171
- </Stack>
169
+ </Flex>
172
170
  </Center>
173
171
  );
174
172
  }
@@ -179,7 +177,7 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
179
177
  : user.firstName || user.lastName || null;
180
178
 
181
179
  return (
182
- <Stack gap="md">
180
+ <Flex direction="column" gap="md">
183
181
  {/* Stats Overview */}
184
182
  <SimpleGrid cols={{ base: 2, sm: 4 }}>
185
183
  <StatCard
@@ -212,12 +210,12 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
212
210
  {/* Left Column - Account Details */}
213
211
  <Grid.Col span={{ base: 12, md: 6 }}>
214
212
  <Card padding={0} radius="md" withBorder h="100%">
215
- <Group justify="space-between" p="md" pb={0}>
213
+ <Flex justify="space-between" p="md" pb={0}>
216
214
  <Text fw={600} size="sm">
217
215
  Account Details
218
216
  </Text>
219
- </Group>
220
- <Box px="md" pb="md">
217
+ </Flex>
218
+ <Flex px="md" pb="md">
221
219
  <DataRow label="User ID" value={user.id} copyValue={user.id} />
222
220
  <DataRow
223
221
  label="Username"
@@ -227,7 +225,7 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
227
225
  <DataRow
228
226
  label="Email"
229
227
  value={
230
- <Group gap={6}>
228
+ <Flex gap={6}>
231
229
  <Text size="sm" fw={500}>
232
230
  {user.email || "—"}
233
231
  </Text>
@@ -240,7 +238,7 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
240
238
  {user.emailVerified ? "verified" : "unverified"}
241
239
  </Badge>
242
240
  )}
243
- </Group>
241
+ </Flex>
244
242
  }
245
243
  copyValue={user.email}
246
244
  />
@@ -253,7 +251,7 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
253
251
  <DataRow
254
252
  label="Status"
255
253
  value={
256
- <Group gap={4}>
254
+ <Flex gap={4}>
257
255
  <ThemeIcon
258
256
  size={16}
259
257
  radius="xl"
@@ -269,17 +267,17 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
269
267
  <Text size="sm" fw={500}>
270
268
  {user.enabled ? "Active" : "Disabled"}
271
269
  </Text>
272
- </Group>
270
+ </Flex>
273
271
  }
274
272
  />
275
- </Box>
273
+ </Flex>
276
274
  </Card>
277
275
  </Grid.Col>
278
276
 
279
277
  {/* Right Column - Personal Info */}
280
278
  <Grid.Col span={{ base: 12, md: 6 }}>
281
279
  <Card padding={0} radius="md" withBorder h="100%">
282
- <Group justify="space-between" p="md" pb={0}>
280
+ <Flex justify="space-between" p="md" pb={0}>
283
281
  <Text fw={600} size="sm">
284
282
  Personal Information
285
283
  </Text>
@@ -292,12 +290,12 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
292
290
  Edit
293
291
  </ActionButton>
294
292
  )}
295
- </Group>
293
+ </Flex>
296
294
 
297
295
  {editing ? (
298
- <Box p="md">
296
+ <Flex p="md">
299
297
  <form {...form.props}>
300
- <Stack gap="sm">
298
+ <Flex direction="column" gap="sm">
301
299
  <SimpleGrid cols={2}>
302
300
  <Control
303
301
  title="First Name"
@@ -311,7 +309,7 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
311
309
  </SimpleGrid>
312
310
  <Control title="Roles" input={form.input.roles} />
313
311
  <Divider />
314
- <Group justify="flex-end" gap="xs">
312
+ <Flex justify="flex-end" gap="xs">
315
313
  <ActionButton
316
314
  variant="subtle"
317
315
  size="xs"
@@ -322,12 +320,12 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
322
320
  <ActionButton size="xs" form={form}>
323
321
  Save
324
322
  </ActionButton>
325
- </Group>
326
- </Stack>
323
+ </Flex>
324
+ </Flex>
327
325
  </form>
328
- </Box>
326
+ </Flex>
329
327
  ) : (
330
- <Box px="md" pb="md">
328
+ <Flex px="md" pb="md">
331
329
  <DataRow label="First Name" value={user.firstName || "—"} />
332
330
  <DataRow label="Last Name" value={user.lastName || "—"} />
333
331
  <DataRow label="Display Name" value={displayName || "—"} />
@@ -335,13 +333,13 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
335
333
  label="Roles"
336
334
  value={
337
335
  user.roles.length > 0 ? (
338
- <Group gap={4}>
336
+ <Flex gap={4}>
339
337
  {user.roles.map((role) => (
340
338
  <Badge key={role} size="xs" variant="light">
341
339
  {role}
342
340
  </Badge>
343
341
  ))}
344
- </Group>
342
+ </Flex>
345
343
  ) : (
346
344
  <Text size="sm" c="dimmed">
347
345
  No roles
@@ -349,7 +347,7 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
349
347
  )
350
348
  }
351
349
  />
352
- </Box>
350
+ </Flex>
353
351
  )}
354
352
  </Card>
355
353
  </Grid.Col>
@@ -357,58 +355,58 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
357
355
 
358
356
  {/* Timeline */}
359
357
  <Card padding={0} radius="md" withBorder>
360
- <Group justify="space-between" p="md" pb={0}>
358
+ <Flex justify="space-between" p="md" pb={0}>
361
359
  <Text fw={600} size="sm">
362
360
  Activity Timeline
363
361
  </Text>
364
- </Group>
362
+ </Flex>
365
363
  <SimpleGrid cols={{ base: 2, sm: 4 }} p="md">
366
- <Box>
367
- <Group gap={6} mb={4}>
364
+ <Flex>
365
+ <Flex gap={6} mb={4}>
368
366
  <IconCalendar size={14} style={{ opacity: 0.5 }} />
369
367
  <Text size="xs" c="dimmed">
370
368
  Created
371
369
  </Text>
372
- </Group>
370
+ </Flex>
373
371
  <Text size="sm" fw={500}>
374
372
  {l(user.createdAt, { date: "ll" })}
375
373
  </Text>
376
374
  <Text size="xs" c="dimmed">
377
375
  {l(user.createdAt, { date: "fromNow" })}
378
376
  </Text>
379
- </Box>
380
- <Box>
381
- <Group gap={6} mb={4}>
377
+ </Flex>
378
+ <Flex>
379
+ <Flex gap={6} mb={4}>
382
380
  <IconCalendar size={14} style={{ opacity: 0.5 }} />
383
381
  <Text size="xs" c="dimmed">
384
382
  Updated
385
383
  </Text>
386
- </Group>
384
+ </Flex>
387
385
  <Text size="sm" fw={500}>
388
386
  {l(user.updatedAt, { date: "ll" })}
389
387
  </Text>
390
388
  <Text size="xs" c="dimmed">
391
389
  {l(user.updatedAt, { date: "fromNow" })}
392
390
  </Text>
393
- </Box>
394
- <Box>
395
- <Group gap={6} mb={4}>
391
+ </Flex>
392
+ <Flex>
393
+ <Flex gap={6} mb={4}>
396
394
  <IconDevices size={14} style={{ opacity: 0.5 }} />
397
395
  <Text size="xs" c="dimmed">
398
396
  Last Login
399
397
  </Text>
400
- </Group>
398
+ </Flex>
401
399
  <Text size="sm" c="dimmed">
402
400
 
403
401
  </Text>
404
- </Box>
405
- <Box>
406
- <Group gap={6} mb={4}>
402
+ </Flex>
403
+ <Flex>
404
+ <Flex gap={6} mb={4}>
407
405
  <IconCheck size={14} style={{ opacity: 0.5 }} />
408
406
  <Text size="xs" c="dimmed">
409
407
  Email Verified
410
408
  </Text>
411
- </Group>
409
+ </Flex>
412
410
  {user.emailVerified ? (
413
411
  <>
414
412
  <Text size="sm" fw={500}>
@@ -423,10 +421,10 @@ const AdminUserDetails = (props: AdminUserDetailsProps) => {
423
421
  Not verified
424
422
  </Text>
425
423
  )}
426
- </Box>
424
+ </Flex>
427
425
  </SimpleGrid>
428
426
  </Card>
429
- </Stack>
427
+ </Flex>
430
428
  );
431
429
  };
432
430
 
@@ -1,4 +1,4 @@
1
- import { Box, Center, Loader, Stack, Text } from "@mantine/core";
1
+ import { Center, Flex, Loader, Text } from "@mantine/core";
2
2
  import {
3
3
  IconBan,
4
4
  IconDevices,
@@ -60,10 +60,10 @@ const AdminUserLayout = (props: AdminUserLayoutProps) => {
60
60
  if (!user) {
61
61
  return (
62
62
  <Center flex={1}>
63
- <Stack align="center" gap="xs">
63
+ <Flex direction="column" align="center" gap="xs">
64
64
  <IconUser size={48} opacity={0.3} />
65
65
  <Text c="dimmed">User not found</Text>
66
- </Stack>
66
+ </Flex>
67
67
  </Center>
68
68
  );
69
69
  }
@@ -130,8 +130,8 @@ const AdminUserLayout = (props: AdminUserLayoutProps) => {
130
130
  };
131
131
 
132
132
  return (
133
- <Box py="xl" px="xl" flex={1}>
134
- <Stack gap="lg">
133
+ <Flex py="xl" px="xl" flex={1}>
134
+ <Flex direction="column" gap="lg">
135
135
  <AdminResourceHeader
136
136
  backHref={router.path("adminUsers")}
137
137
  backLabel="Users"
@@ -213,8 +213,8 @@ const AdminUserLayout = (props: AdminUserLayoutProps) => {
213
213
  />
214
214
 
215
215
  <NestedView />
216
- </Stack>
217
- </Box>
216
+ </Flex>
217
+ </Flex>
218
218
  );
219
219
  };
220
220
 
@@ -1,5 +1,5 @@
1
1
  import { ActionButton, DataTable, Flex, Text } from "@alepha/ui";
2
- import { Badge, Group } from "@mantine/core";
2
+ import { Badge } from "@mantine/core";
3
3
  import {
4
4
  IconDeviceDesktop,
5
5
  IconDeviceMobile,
@@ -83,7 +83,7 @@ const AdminUserSessions = (props: AdminUserSessionsProps) => {
83
83
  userAgent: {
84
84
  label: "Device",
85
85
  value: (item) => (
86
- <Group gap={4}>
86
+ <Flex gap={4}>
87
87
  {item.userAgent ? (
88
88
  <>
89
89
  <Badge
@@ -102,7 +102,7 @@ const AdminUserSessions = (props: AdminUserSessionsProps) => {
102
102
  -
103
103
  </Text>
104
104
  )}
105
- </Group>
105
+ </Flex>
106
106
  ),
107
107
  },
108
108
  ip: {
@@ -1,5 +1,5 @@
1
1
  import { ActionButton, Flex, Text } from "@alepha/ui";
2
- import { Alert, Card, Group, Loader, Stack } from "@mantine/core";
2
+ import { Alert, Card, Loader } from "@mantine/core";
3
3
  import {
4
4
  IconAlertCircle,
5
5
  IconCheck,
@@ -106,7 +106,7 @@ const AdminUserSettings = (props: AdminUserSettingsProps) => {
106
106
  <Flex flex={1} direction="column" gap="md">
107
107
  {user.email && !user.emailVerified && (
108
108
  <Card withBorder p="lg">
109
- <Stack gap="md">
109
+ <Flex direction="column" gap="md">
110
110
  <Text size="lg" fw={500}>
111
111
  Email Verification
112
112
  </Text>
@@ -126,7 +126,7 @@ const AdminUserSettings = (props: AdminUserSettingsProps) => {
126
126
  </Alert>
127
127
  )}
128
128
 
129
- <Group>
129
+ <Flex>
130
130
  <ActionButton
131
131
  leftSection={<IconMail size={16} />}
132
132
  loading={verifyLoading}
@@ -134,13 +134,13 @@ const AdminUserSettings = (props: AdminUserSettingsProps) => {
134
134
  >
135
135
  Send Verification Link
136
136
  </ActionButton>
137
- </Group>
138
- </Stack>
137
+ </Flex>
138
+ </Flex>
139
139
  </Card>
140
140
  )}
141
141
 
142
142
  <Card withBorder p="lg">
143
- <Stack gap="md">
143
+ <Flex direction="column" gap="md">
144
144
  <Text size="lg" fw={500} c="red">
145
145
  Danger Zone
146
146
  </Text>
@@ -152,7 +152,7 @@ const AdminUserSettings = (props: AdminUserSettingsProps) => {
152
152
  </Text>
153
153
  </Alert>
154
154
 
155
- <Group>
155
+ <Flex>
156
156
  <ActionButton
157
157
  color="red"
158
158
  leftSection={<IconTrash size={16} />}
@@ -161,8 +161,8 @@ const AdminUserSettings = (props: AdminUserSettingsProps) => {
161
161
  >
162
162
  Delete User
163
163
  </ActionButton>
164
- </Group>
165
- </Stack>
164
+ </Flex>
165
+ </Flex>
166
166
  </Card>
167
167
  </Flex>
168
168
  );
@@ -1,5 +1,5 @@
1
1
  import { DataTable, Text } from "@alepha/ui";
2
- import { Badge, Flex, Group } from "@mantine/core";
2
+ import { Badge, Flex } from "@mantine/core";
3
3
  import { IconCheck, IconUsersPlus, IconX } from "@tabler/icons-react";
4
4
  import { type Page, t } from "alepha";
5
5
  import {
@@ -96,7 +96,7 @@ const AdminUsers = (props: AdminUsersProps) => {
96
96
  email: {
97
97
  label: "Email",
98
98
  value: (item) => (
99
- <Group gap="xs">
99
+ <Flex gap="xs">
100
100
  <Text size="sm">{item.email || "-"}</Text>
101
101
  {item.email && (
102
102
  <Badge
@@ -114,19 +114,19 @@ const AdminUsers = (props: AdminUsersProps) => {
114
114
  {item.emailVerified ? "Verified" : "Unverified"}
115
115
  </Badge>
116
116
  )}
117
- </Group>
117
+ </Flex>
118
118
  ),
119
119
  },
120
120
  roles: {
121
121
  label: "Roles",
122
122
  value: (item) => (
123
- <Group gap={4}>
123
+ <Flex gap={4}>
124
124
  {item.roles.map((role: string) => (
125
125
  <Badge key={role} size="xs" variant="outline">
126
126
  {role}
127
127
  </Badge>
128
128
  ))}
129
- </Group>
129
+ </Flex>
130
130
  ),
131
131
  },
132
132
  enabled: {
@@ -1,11 +1,11 @@
1
1
  import { Flex, Text } from "@alepha/ui";
2
- import { Stack } from "@mantine/core";
2
+
3
3
  import { IconShieldCheck } from "@tabler/icons-react";
4
4
 
5
5
  const AdminVerifications = () => {
6
6
  return (
7
7
  <Flex flex={1} justify="center" align="center">
8
- <Stack align="center" gap="xs">
8
+ <Flex direction="column" align="center" gap="xs">
9
9
  <IconShieldCheck
10
10
  size={48}
11
11
  stroke={1.5}
@@ -17,7 +17,7 @@ const AdminVerifications = () => {
17
17
  verification codes are generated and validated through the
18
18
  verification API endpoints.
19
19
  </Text>
20
- </Stack>
20
+ </Flex>
21
21
  </Flex>
22
22
  );
23
23
  };
@@ -6,30 +6,6 @@ import { AdminRouter } from "./AdminRouter.ts";
6
6
  // ---------------------------------------------------------------------------------------------------------------------
7
7
 
8
8
  export { AdminRouter } from "./AdminRouter.ts";
9
- // Audits
10
- export { default as AdminAudits } from "./components/audits/AdminAudits.tsx";
11
- // Files
12
- export { default as AdminFiles } from "./components/files/AdminFiles.tsx";
13
- // Jobs
14
- export { default as AdminJobs } from "./components/jobs/AdminJobs.tsx";
15
- // API Keys
16
- export { default as AdminApiKeys } from "./components/keys/AdminApiKeys.tsx";
17
- // Notifications
18
- export { default as AdminNotifications } from "./components/notifications/AdminNotifications.tsx";
19
- // Parameters
20
- export { default as AdminParameters } from "./components/parameters/AdminParameters.tsx";
21
- // Sessions
22
- export { default as AdminSessions } from "./components/sessions/AdminSessions.tsx";
23
- // Users
24
- export { default as AdminUserAudits } from "./components/users/AdminUserAudits.tsx";
25
- export { default as AdminUserCreate } from "./components/users/AdminUserCreate.tsx";
26
- export { default as AdminUserDetails } from "./components/users/AdminUserDetails.tsx";
27
- export { default as AdminUserLayout } from "./components/users/AdminUserLayout.tsx";
28
- export { default as AdminUserSessions } from "./components/users/AdminUserSessions.tsx";
29
- export { default as AdminUserSettings } from "./components/users/AdminUserSettings.tsx";
30
- export { default as AdminUsers } from "./components/users/AdminUsers.tsx";
31
- // Verifications
32
- export { default as AdminVerifications } from "./components/verifications/AdminVerifications.tsx";
33
9
  export * from "./primitives/$uiAdmin.ts";
34
10
 
35
11
  // ---------------------------------------------------------------------------------------------------------------------
@@ -1,5 +1,5 @@
1
1
  import { ActionButton, Control, capitalize } from "@alepha/ui";
2
- import { Card, Flex, Group, Image, Stack, Text, Title } from "@mantine/core";
2
+ import { Card, Flex, Image, Text, Title } from "@mantine/core";
3
3
  import { IconLock, IconUser } from "@tabler/icons-react";
4
4
  import { AlephaError, t } from "alepha";
5
5
  import type { RealmConfig } from "alepha/api/users";
@@ -115,14 +115,14 @@ const Login = (props: LoginProps) => {
115
115
 
116
116
  return (
117
117
  <Flex flex={1} justify={"center"} align={"center"}>
118
- <Stack gap={"sm"} w={360}>
118
+ <Flex direction="column" gap={"sm"} w={360}>
119
119
  <Card withBorder p={"lg"} bg={"var(--alepha-elevated)"}>
120
- <Stack gap={"md"}>
120
+ <Flex direction="column" gap={"md"}>
121
121
  {/* Realm branding */}
122
122
  {(settings.logoUrl ||
123
123
  settings.displayName ||
124
124
  settings.description) && (
125
- <Stack gap={"xs"} align="center" mb="xs">
125
+ <Flex direction="column" gap={"xs"} align="center" mb="xs">
126
126
  {settings.logoUrl && (
127
127
  <Image
128
128
  src={settings.logoUrl}
@@ -142,14 +142,14 @@ const Login = (props: LoginProps) => {
142
142
  {settings.description}
143
143
  </Text>
144
144
  )}
145
- </Stack>
145
+ </Flex>
146
146
  )}
147
147
 
148
148
  {/* Credentials login form */}
149
149
  {credentialsProvider && (
150
150
  <>
151
151
  <form {...form.props}>
152
- <Stack flex={1} gap={"md"}>
152
+ <Flex direction="column" flex={1} gap={"md"}>
153
153
  <Control
154
154
  title={identifierTitle}
155
155
  input={form.input.identifier}
@@ -169,7 +169,7 @@ const Login = (props: LoginProps) => {
169
169
  <ActionButton variant={"filled"} form={form}>
170
170
  {tr("loginSignIn")}
171
171
  </ActionButton>
172
- </Stack>
172
+ </Flex>
173
173
  </form>
174
174
  {settings.resetPasswordAllowed && (
175
175
  <Text size="sm" ta="center">
@@ -188,18 +188,18 @@ const Login = (props: LoginProps) => {
188
188
 
189
189
  {/* OR divider - only when both credentials AND external methods exist */}
190
190
  {showOrDivider && (
191
- <Group align="center" justify="center" gap={"md"}>
191
+ <Flex align="center" justify="center" gap={"md"}>
192
192
  <Flex flex={1} h={"1px"} bg={"var(--alepha-border)"} />
193
193
  <Text size="xs" c={"dimmed"}>
194
194
  {tr("loginOr")}
195
195
  </Text>
196
196
  <Flex flex={1} h={"1px"} bg={"var(--alepha-border)"} />
197
- </Group>
197
+ </Flex>
198
198
  )}
199
199
 
200
200
  {/* External login methods */}
201
201
  {externalLoginMethods.length > 0 && (
202
- <Stack gap={"sm"}>
202
+ <Flex direction="column" gap={"sm"}>
203
203
  {externalLoginMethods.map((method) => (
204
204
  <ActionButton
205
205
  variant={"default"}
@@ -217,7 +217,7 @@ const Login = (props: LoginProps) => {
217
217
  })}
218
218
  </ActionButton>
219
219
  ))}
220
- </Stack>
220
+ </Flex>
221
221
  )}
222
222
 
223
223
  {/* Registration link */}
@@ -234,12 +234,12 @@ const Login = (props: LoginProps) => {
234
234
  </ActionButton>
235
235
  </Text>
236
236
  )}
237
- </Stack>
237
+ </Flex>
238
238
  </Card>
239
239
  <ActionButton variant={"subtle"} href={"/"}>
240
240
  {tr("loginCancel")}
241
241
  </ActionButton>
242
- </Stack>
242
+ </Flex>
243
243
  </Flex>
244
244
  );
245
245
  };