@alepha/ui 0.16.1 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/dist/admin/{AdminApiKeys-GMORg-1l.js → AdminApiKeys-CF_qOO3u.js} +20 -19
  2. package/dist/admin/AdminApiKeys-CF_qOO3u.js.map +1 -0
  3. package/dist/admin/{AdminAudits-pkWrjq1Z.js → AdminAudits-BQno3hZG.js} +7 -7
  4. package/dist/admin/AdminAudits-BQno3hZG.js.map +1 -0
  5. package/dist/admin/{AdminFiles-WeQbsCsl.js → AdminFiles-kvuUaASF.js} +3 -4
  6. package/dist/admin/{AdminFiles-WeQbsCsl.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-BqZiXx4H.js → AdminLayout-e-ZP5nWw.js} +6 -9
  14. package/dist/admin/AdminLayout-e-ZP5nWw.js.map +1 -0
  15. package/dist/admin/{AdminNotifications-Ds5Un0NJ.js → AdminNotifications-DeHJFf6W.js} +3 -4
  16. package/dist/admin/{AdminNotifications-Ds5Un0NJ.js.map → AdminNotifications-DeHJFf6W.js.map} +1 -1
  17. package/dist/admin/AdminParameters-iQE8o7a7.js +774 -0
  18. package/dist/admin/AdminParameters-iQE8o7a7.js.map +1 -0
  19. package/dist/admin/{AdminSessions-DzIOxM3b.js → AdminSessions-oKJCbd7w.js} +5 -6
  20. package/dist/admin/AdminSessions-oKJCbd7w.js.map +1 -0
  21. package/dist/admin/{AdminUserAudits-CiUPN2BC.js → AdminUserAudits-BNCEle_E.js} +6 -7
  22. package/dist/admin/AdminUserAudits-BNCEle_E.js.map +1 -0
  23. package/dist/admin/{AdminUserCreate-BwQKr4xE.js → AdminUserCreate-CgqeFwCt.js} +6 -6
  24. package/dist/admin/AdminUserCreate-CgqeFwCt.js.map +1 -0
  25. package/dist/admin/{AdminUserDetails-uqtC5aJ1.js → AdminUserDetails-DDe1A1GP.js} +30 -28
  26. package/dist/admin/AdminUserDetails-DDe1A1GP.js.map +1 -0
  27. package/dist/admin/{AdminUserLayout-CiPay35T.js → AdminUserLayout-HAlobhWf.js} +20 -19
  28. package/dist/admin/AdminUserLayout-HAlobhWf.js.map +1 -0
  29. package/dist/admin/{AdminUserSessions-DAE8Nf1F.js → AdminUserSessions-Bq1LnVLf.js} +5 -6
  30. package/dist/admin/AdminUserSessions-Bq1LnVLf.js.map +1 -0
  31. package/dist/admin/{AdminUserSettings-EbahaV2a.js → AdminUserSettings-BRsBZoxV.js} +10 -9
  32. package/dist/admin/AdminUserSettings-BRsBZoxV.js.map +1 -0
  33. package/dist/admin/{AdminUsers-Dcjh0KNW.js → AdminUsers-D71kIOSn.js} +6 -7
  34. package/dist/admin/AdminUsers-D71kIOSn.js.map +1 -0
  35. package/dist/admin/index.d.ts +21 -85
  36. package/dist/admin/index.d.ts.map +1 -1
  37. package/dist/admin/index.js +66 -88
  38. package/dist/admin/index.js.map +1 -1
  39. package/dist/auth/{AuthLayout-Dj5K4SIN.js → AuthLayout-CdJcrPs4.js} +2 -3
  40. package/dist/auth/{AuthLayout-Dj5K4SIN.js.map → AuthLayout-CdJcrPs4.js.map} +1 -1
  41. package/dist/{demo/IconGoogle-CbBF8Hqq.js → auth/IconGoogle-Bm18QD2q.js} +2 -4
  42. package/dist/auth/{IconGoogle-DpSlPZ1u.js.map → IconGoogle-Bm18QD2q.js.map} +1 -1
  43. package/dist/auth/{Login-BBqTosqZ.js → Login-BS_FYTy0.js} +19 -13
  44. package/dist/auth/Login-BS_FYTy0.js.map +1 -0
  45. package/dist/auth/{Profile-Bxj8Nwom.js → Profile-CjDsW378.js} +17 -12
  46. package/dist/auth/Profile-CjDsW378.js.map +1 -0
  47. package/dist/auth/{Register-Ce675Crg.js → Register-C5eqzAaD.js} +27 -17
  48. package/dist/auth/Register-C5eqzAaD.js.map +1 -0
  49. package/dist/auth/{ResetPassword-DWdt7c40.js → ResetPassword-XifinVao.js} +17 -10
  50. package/dist/auth/ResetPassword-XifinVao.js.map +1 -0
  51. package/dist/auth/{VerifyEmail-CI4JwByV.js → VerifyEmail-DTgbeJOO.js} +9 -6
  52. package/dist/auth/VerifyEmail-DTgbeJOO.js.map +1 -0
  53. package/dist/auth/index.d.ts +18 -14
  54. package/dist/auth/index.d.ts.map +1 -1
  55. package/dist/auth/index.js +19 -18
  56. package/dist/auth/index.js.map +1 -1
  57. package/dist/auth/rolldown-runtime-CjeV3_4I.js +18 -0
  58. package/dist/core/index.d.ts +182 -92
  59. package/dist/core/index.d.ts.map +1 -1
  60. package/dist/core/index.js +789 -476
  61. package/dist/core/index.js.map +1 -1
  62. package/dist/demo/DemoDataTable-lnBKWBf8.js +362 -0
  63. package/dist/demo/DemoDataTable-lnBKWBf8.js.map +1 -0
  64. package/dist/demo/{DemoHome-Cce2bWmg.js → DemoHome-CUMZsYaH.js} +6 -6
  65. package/dist/demo/DemoHome-CUMZsYaH.js.map +1 -0
  66. package/dist/demo/{DemoJsonViewer-Dgdk3Txb.js → DemoJsonViewer-_uokbGaW.js} +18 -19
  67. package/dist/demo/DemoJsonViewer-_uokbGaW.js.map +1 -0
  68. package/dist/demo/{DemoLayout-B20TEuhV.js → DemoLayout-DHVoacE6.js} +4 -5
  69. package/dist/demo/DemoLayout-DHVoacE6.js.map +1 -0
  70. package/dist/demo/{DemoLogin-CvCG2WVh.js → DemoLogin-DjJ9314c.js} +27 -24
  71. package/dist/demo/DemoLogin-DjJ9314c.js.map +1 -0
  72. package/dist/demo/{DemoRegister-CmeHbOAs.js → DemoRegister-DzkJ5M83.js} +39 -32
  73. package/dist/demo/DemoRegister-DzkJ5M83.js.map +1 -0
  74. package/dist/demo/{DemoResetPassword-CKO5iA_6.js → DemoResetPassword-DWh4_BpQ.js} +30 -26
  75. package/dist/demo/DemoResetPassword-DWh4_BpQ.js.map +1 -0
  76. package/dist/demo/{DemoSidebar-MVmQKfMt.js → DemoSidebar-C1csnGhX.js} +4 -5
  77. package/dist/demo/DemoSidebar-C1csnGhX.js.map +1 -0
  78. package/dist/demo/{DemoTypeForm-w-qtfRlC.js → DemoTypeForm-CWz6fJrJ.js} +4 -5
  79. package/dist/demo/DemoTypeForm-CWz6fJrJ.js.map +1 -0
  80. package/dist/demo/{DemoVerifyEmail-C8FFJT5A.js → DemoVerifyEmail-DbU_tCj8.js} +16 -16
  81. package/dist/demo/DemoVerifyEmail-DbU_tCj8.js.map +1 -0
  82. package/dist/{auth/IconGoogle-DpSlPZ1u.js → demo/IconGoogle-Ch1m3Uzl.js} +2 -4
  83. package/dist/demo/{IconGoogle-CbBF8Hqq.js.map → IconGoogle-Ch1m3Uzl.js.map} +1 -1
  84. package/dist/demo/{Showcase-CQrMWars.js → Showcase-BzoXNlCn.js} +11 -13
  85. package/dist/demo/Showcase-BzoXNlCn.js.map +1 -0
  86. package/dist/demo/index.d.ts +3 -70
  87. package/dist/demo/index.d.ts.map +1 -1
  88. package/dist/demo/index.js +11 -15
  89. package/dist/demo/index.js.map +1 -1
  90. package/dist/json/index.js +2 -2
  91. package/dist/json/index.js.map +1 -1
  92. package/package.json +11 -5
  93. package/src/admin/AdminRouter.ts +51 -29
  94. package/src/admin/components/AdminLayout.tsx +6 -9
  95. package/src/admin/components/audits/AdminAudits.tsx +5 -5
  96. package/src/admin/components/jobs/AdminJobDashboard.tsx +455 -0
  97. package/src/admin/components/jobs/AdminJobExecutions.tsx +693 -0
  98. package/src/admin/components/jobs/AdminJobRegistry.tsx +325 -0
  99. package/src/admin/components/keys/AdminApiKeys.tsx +28 -31
  100. package/src/admin/components/parameters/AdminParameters.tsx +156 -78
  101. package/src/admin/components/parameters/ParameterDetails.tsx +173 -108
  102. package/src/admin/components/parameters/ParameterEmptyState.tsx +27 -0
  103. package/src/admin/components/parameters/ParameterHistory.tsx +22 -35
  104. package/src/admin/components/parameters/ParameterTree.tsx +283 -109
  105. package/src/admin/components/parameters/types.ts +3 -3
  106. package/src/admin/components/sessions/AdminSessions.tsx +3 -3
  107. package/src/admin/components/shared/AdminResourceHeader.tsx +20 -16
  108. package/src/admin/components/users/AdminUserAudits.tsx +5 -5
  109. package/src/admin/components/users/AdminUserCreate.tsx +3 -3
  110. package/src/admin/components/users/AdminUserDetails.tsx +51 -53
  111. package/src/admin/components/users/AdminUserLayout.tsx +7 -7
  112. package/src/admin/components/users/AdminUserSessions.tsx +3 -3
  113. package/src/admin/components/users/AdminUserSettings.tsx +9 -9
  114. package/src/admin/components/users/AdminUsers.tsx +5 -5
  115. package/src/admin/components/verifications/AdminVerifications.tsx +3 -3
  116. package/src/admin/index.ts +0 -24
  117. package/src/admin/primitives/$uiAdmin.ts +2 -2
  118. package/src/auth/AuthRouter.ts +1 -0
  119. package/src/auth/components/Login.tsx +13 -13
  120. package/src/auth/components/Profile.tsx +17 -26
  121. package/src/auth/components/Register.tsx +21 -31
  122. package/src/auth/components/ResetPassword.tsx +13 -22
  123. package/src/auth/components/VerifyEmail.tsx +5 -5
  124. package/src/auth/components/buttons/UserButton.tsx +14 -4
  125. package/src/core/components/buttons/ActionButton.tsx +13 -17
  126. package/src/core/components/buttons/DarkModeButton.tsx +8 -4
  127. package/src/core/components/buttons/ToggleSidebarButton.tsx +3 -5
  128. package/src/core/components/data/ErrorViewer.tsx +15 -15
  129. package/src/core/components/dialogs/AlertDialog.tsx +3 -3
  130. package/src/core/components/dialogs/ConfirmDialog.tsx +3 -3
  131. package/src/core/components/dialogs/PromptDialog.tsx +3 -3
  132. package/src/core/components/form/Control.tsx +19 -32
  133. package/src/core/components/form/ControlArray.tsx +206 -96
  134. package/src/core/components/form/ControlObject.tsx +3 -3
  135. package/src/core/components/form/ControlQueryBuilder.tsx +20 -22
  136. package/src/core/components/form/ControlSelect.tsx +4 -0
  137. package/src/core/components/form/TypeForm.browser.spec.tsx +727 -0
  138. package/src/core/components/form/TypeForm.tsx +7 -0
  139. package/src/core/components/layout/AlephaMantineProvider.tsx +1 -0
  140. package/src/core/components/layout/Breadcrumb.tsx +91 -0
  141. package/src/core/components/layout/{AdminShell.tsx → DashboardShell.tsx} +77 -32
  142. package/src/core/components/layout/Omnibar.tsx +2 -1
  143. package/src/core/components/layout/Sidebar.tsx +63 -19
  144. package/src/core/components/table/ColumnPicker.tsx +47 -31
  145. package/src/core/components/table/DataTable.tsx +277 -201
  146. package/src/core/components/table/DataTableFilters.tsx +8 -0
  147. package/src/core/components/table/DataTableToolbar.tsx +98 -5
  148. package/src/core/components/table/FilterPicker.tsx +28 -26
  149. package/src/core/components/table/types.ts +52 -37
  150. package/src/core/components/table/useTableSelection.ts +83 -0
  151. package/src/core/constants/ui.ts +1 -1
  152. package/src/core/helpers/renderIcon.tsx +5 -2
  153. package/src/core/index.ts +9 -5
  154. package/src/core/styles.css +8 -7
  155. package/src/core/utils/parseInput.ts +1 -0
  156. package/src/core/utils/string.ts +28 -4
  157. package/src/demo/components/DemoHome.tsx +5 -5
  158. package/src/demo/components/DemoLayout.tsx +6 -2
  159. package/src/demo/components/core/DemoDataTable.tsx +209 -5
  160. package/src/demo/components/json/DemoJsonViewer.tsx +1 -1
  161. package/src/demo/components/shared/MacWindow.tsx +7 -7
  162. package/src/demo/components/shared/Showcase.tsx +3 -3
  163. package/src/demo/index.ts +0 -11
  164. package/src/json/components/JsonViewer.tsx +3 -3
  165. package/dist/admin/AdminApiKeys-DsmGnHNh.js +0 -3
  166. package/dist/admin/AdminApiKeys-GMORg-1l.js.map +0 -1
  167. package/dist/admin/AdminAudits-8SM96viT.js +0 -3
  168. package/dist/admin/AdminAudits-pkWrjq1Z.js.map +0 -1
  169. package/dist/admin/AdminFiles-B56ocq4H.js +0 -3
  170. package/dist/admin/AdminJobs-B-q9iGO3.js +0 -697
  171. package/dist/admin/AdminJobs-B-q9iGO3.js.map +0 -1
  172. package/dist/admin/AdminJobs-CED1syCn.js +0 -3
  173. package/dist/admin/AdminLayout-BqZiXx4H.js.map +0 -1
  174. package/dist/admin/AdminNotifications-B0B1rdc4.js +0 -3
  175. package/dist/admin/AdminParameters-BU3lATdJ.js +0 -3
  176. package/dist/admin/AdminParameters-CfDUpc78.js +0 -575
  177. package/dist/admin/AdminParameters-CfDUpc78.js.map +0 -1
  178. package/dist/admin/AdminSessions-BDGK2MS6.js +0 -3
  179. package/dist/admin/AdminSessions-DzIOxM3b.js.map +0 -1
  180. package/dist/admin/AdminUserAudits-CiUPN2BC.js.map +0 -1
  181. package/dist/admin/AdminUserAudits-Cj79gENT.js +0 -3
  182. package/dist/admin/AdminUserCreate-BwQKr4xE.js.map +0 -1
  183. package/dist/admin/AdminUserCreate-Cq-mUmBs.js +0 -3
  184. package/dist/admin/AdminUserDetails-DRjVAPFd.js +0 -3
  185. package/dist/admin/AdminUserDetails-uqtC5aJ1.js.map +0 -1
  186. package/dist/admin/AdminUserLayout-CGzmHHby.js +0 -3
  187. package/dist/admin/AdminUserLayout-CiPay35T.js.map +0 -1
  188. package/dist/admin/AdminUserSessions-DAE8Nf1F.js.map +0 -1
  189. package/dist/admin/AdminUserSessions-DcdzuNZ9.js +0 -3
  190. package/dist/admin/AdminUserSettings-D7V6-ceX.js +0 -3
  191. package/dist/admin/AdminUserSettings-EbahaV2a.js.map +0 -1
  192. package/dist/admin/AdminUsers-D9nyzGqQ.js +0 -3
  193. package/dist/admin/AdminUsers-Dcjh0KNW.js.map +0 -1
  194. package/dist/auth/Login-BBqTosqZ.js.map +0 -1
  195. package/dist/auth/Login-CoU63mMR.js +0 -4
  196. package/dist/auth/Profile-Bxj8Nwom.js.map +0 -1
  197. package/dist/auth/Register-BV_oa_AK.js +0 -4
  198. package/dist/auth/Register-Ce675Crg.js.map +0 -1
  199. package/dist/auth/ResetPassword-D5wC8GAA.js +0 -3
  200. package/dist/auth/ResetPassword-DWdt7c40.js.map +0 -1
  201. package/dist/auth/VerifyEmail-CI4JwByV.js.map +0 -1
  202. package/dist/auth/VerifyEmail-DAfqVm5s.js +0 -3
  203. package/dist/demo/DemoDataTable-CguplbR7.js +0 -150
  204. package/dist/demo/DemoDataTable-CguplbR7.js.map +0 -1
  205. package/dist/demo/DemoHome-Cce2bWmg.js.map +0 -1
  206. package/dist/demo/DemoHome-DC9qkMNe.js +0 -3
  207. package/dist/demo/DemoJsonViewer-DIssGVlJ.js +0 -4
  208. package/dist/demo/DemoJsonViewer-Dgdk3Txb.js.map +0 -1
  209. package/dist/demo/DemoLayout-B20TEuhV.js.map +0 -1
  210. package/dist/demo/DemoLayout-DSRyf4qJ.js +0 -3
  211. package/dist/demo/DemoLogin-CvCG2WVh.js.map +0 -1
  212. package/dist/demo/DemoRegister-CmeHbOAs.js.map +0 -1
  213. package/dist/demo/DemoResetPassword-CKO5iA_6.js.map +0 -1
  214. package/dist/demo/DemoSidebar-MVmQKfMt.js.map +0 -1
  215. package/dist/demo/DemoTypeForm-w-qtfRlC.js.map +0 -1
  216. package/dist/demo/DemoVerifyEmail-C8FFJT5A.js.map +0 -1
  217. package/dist/demo/Showcase-CQrMWars.js.map +0 -1
  218. package/src/admin/components/jobs/AdminJobs.tsx +0 -772
@@ -4,9 +4,8 @@ import {
4
4
  Avatar,
5
5
  Badge,
6
6
  Button,
7
- Group,
7
+ Flex,
8
8
  Menu,
9
- Stack,
10
9
  Text,
11
10
  Tooltip,
12
11
  } from "@mantine/core";
@@ -172,10 +171,10 @@ const AdminResourceHeader = (props: AdminResourceHeaderProps) => {
172
171
  };
173
172
 
174
173
  return (
175
- <Stack gap="xs">
174
+ <Flex direction="column" gap="xs">
176
175
  {/* Breadcrumb / Back navigation */}
177
176
  {backHref && (
178
- <Group>
177
+ <Flex>
179
178
  <ActionButton
180
179
  variant="subtle"
181
180
  size="xs"
@@ -185,18 +184,23 @@ const AdminResourceHeader = (props: AdminResourceHeaderProps) => {
185
184
  >
186
185
  {backLabel}
187
186
  </ActionButton>
188
- </Group>
187
+ </Flex>
189
188
  )}
190
189
 
191
190
  {/* Main header */}
192
- <Group justify="space-between" align="flex-start" wrap="nowrap">
191
+ <Flex justify="space-between" align="flex-start" wrap="nowrap">
193
192
  {/* Left: Avatar + Info */}
194
- <Group gap="md" wrap="nowrap">
193
+ <Flex gap="md" wrap="nowrap">
195
194
  {renderAvatar()}
196
195
 
197
- <Stack gap={2} justify="center" style={{ minHeight: 56 }}>
196
+ <Flex
197
+ direction="column"
198
+ gap={2}
199
+ justify="center"
200
+ style={{ minHeight: 56 }}
201
+ >
198
202
  {/* Title row */}
199
- <Group gap="xs" align="center">
203
+ <Flex gap="xs" align="center">
200
204
  <Text size="md" fw={600} lh={1.2}>
201
205
  {title}
202
206
  </Text>
@@ -210,7 +214,7 @@ const AdminResourceHeader = (props: AdminResourceHeaderProps) => {
210
214
  {status.label}
211
215
  </Badge>
212
216
  )}
213
- </Group>
217
+ </Flex>
214
218
 
215
219
  {/* Subtitle */}
216
220
  {subtitle && (
@@ -218,11 +222,11 @@ const AdminResourceHeader = (props: AdminResourceHeaderProps) => {
218
222
  {subtitle}
219
223
  </Text>
220
224
  )}
221
- </Stack>
222
- </Group>
225
+ </Flex>
226
+ </Flex>
223
227
 
224
228
  {/* Right: Actions */}
225
- <Group gap="xs">
229
+ <Flex gap="xs">
226
230
  {externalUrl && (
227
231
  <Tooltip label="Open in new tab" openDelay={500}>
228
232
  <ActionIcon
@@ -272,9 +276,9 @@ const AdminResourceHeader = (props: AdminResourceHeaderProps) => {
272
276
  </Menu.Dropdown>
273
277
  </Menu>
274
278
  )}
275
- </Group>
276
- </Group>
277
- </Stack>
279
+ </Flex>
280
+ </Flex>
281
+ </Flex>
278
282
  );
279
283
  };
280
284
 
@@ -1,5 +1,5 @@
1
1
  import { DataTable, Flex, Text } from "@alepha/ui";
2
- import { Badge, Group, Tooltip } from "@mantine/core";
2
+ import { Badge, Tooltip } from "@mantine/core";
3
3
  import {
4
4
  IconAlertTriangle,
5
5
  IconCheck,
@@ -138,20 +138,20 @@ const AdminUserAudits = (_props: AdminUserAuditsProps) => {
138
138
  fit: true,
139
139
  value: (item) =>
140
140
  item.success ? (
141
- <Group gap={4}>
141
+ <Flex gap={4}>
142
142
  <IconCheck size={14} color="var(--mantine-color-green-6)" />
143
143
  <Text size="xs" c="green">
144
144
  Success
145
145
  </Text>
146
- </Group>
146
+ </Flex>
147
147
  ) : (
148
148
  <Tooltip label={item.errorMessage || "Failed"}>
149
- <Group gap={4}>
149
+ <Flex gap={4}>
150
150
  <IconX size={14} color="var(--mantine-color-red-6)" />
151
151
  <Text size="xs" c="red">
152
152
  Failed
153
153
  </Text>
154
- </Group>
154
+ </Flex>
155
155
  </Tooltip>
156
156
  ),
157
157
  },
@@ -1,5 +1,5 @@
1
1
  import { ActionButton, Control, Flex } from "@alepha/ui";
2
- import { Card, Stack, Text } from "@mantine/core";
2
+ import { Card, Text } from "@mantine/core";
3
3
  import { t } from "alepha";
4
4
  import type { AdminUserController } from "alepha/api/users";
5
5
  import { useClient } from "alepha/react";
@@ -53,7 +53,7 @@ const AdminUserCreate = (props: AdminUserCreateProps) => {
53
53
  <Flex flex={1} p="md">
54
54
  <Card withBorder p="lg" maw={600} w="100%">
55
55
  <form {...form.props}>
56
- <Stack gap="md">
56
+ <Flex direction="column" gap="md">
57
57
  <Text size="lg" fw={500}>
58
58
  Create New User
59
59
  </Text>
@@ -75,7 +75,7 @@ const AdminUserCreate = (props: AdminUserCreateProps) => {
75
75
  <Control title="Enabled" input={form.input.enabled} />
76
76
 
77
77
  <ActionButton form={form}>Create User</ActionButton>
78
- </Stack>
78
+ </Flex>
79
79
  </form>
80
80
  </Card>
81
81
  </Flex>
@@ -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
  // ---------------------------------------------------------------------------------------------------------------------