@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,5 +1,5 @@
1
1
  import { ActionButton, Flex, Text, TypeForm } from "@alepha/ui";
2
- import { Box, Card, Code, Group, Loader, Stack } from "@mantine/core";
2
+ import { Card, Code, Loader } from "@mantine/core";
3
3
  import { IconClock } from "@tabler/icons-react";
4
4
  import { jsonSchemaToTypeBox, type TObject, t } from "alepha";
5
5
  import { useForm } from "alepha/react/form";
@@ -19,7 +19,7 @@ export interface ParameterDetailsProps {
19
19
  * Loading state.
20
20
  */
21
21
  const LoadingState = () => (
22
- <Box
22
+ <Flex
23
23
  flex={1}
24
24
  h="100%"
25
25
  p="md"
@@ -32,7 +32,7 @@ const LoadingState = () => (
32
32
  <Flex flex={1} justify="center" align="center" h="100%">
33
33
  <Loader size="sm" />
34
34
  </Flex>
35
- </Box>
35
+ </Flex>
36
36
  );
37
37
 
38
38
  interface ConfigFormProps {
@@ -120,7 +120,7 @@ const ConfigForm = ({
120
120
  }, [fieldCount]);
121
121
 
122
122
  return (
123
- <Box
123
+ <Flex
124
124
  flex={1}
125
125
  h="100%"
126
126
  style={{
@@ -131,11 +131,16 @@ const ConfigForm = ({
131
131
  >
132
132
  <Flex direction="column" h="100%" w="100%" style={{ minHeight: 0 }}>
133
133
  {/* Content */}
134
- <Box flex={1} p="md" className="overflow-auto" style={{ minHeight: 0 }}>
134
+ <Flex
135
+ flex={1}
136
+ p="md"
137
+ className="overflow-auto"
138
+ style={{ minHeight: 0 }}
139
+ >
135
140
  {currentContent !== null ? (
136
- <Stack gap="lg">
141
+ <Flex direction="column" gap="lg">
137
142
  {/* Form or JSON view */}
138
- <Box>
143
+ <Flex>
139
144
  {hasValidSchema ? (
140
145
  <TypeForm
141
146
  form={form}
@@ -144,46 +149,46 @@ const ConfigForm = ({
144
149
  fill={false}
145
150
  />
146
151
  ) : (
147
- <Box>
152
+ <Flex>
148
153
  <Text size="xs" c="dimmed" mb={4}>
149
154
  Current Value
150
155
  </Text>
151
156
  <Code block style={{ whiteSpace: "pre-wrap" }}>
152
157
  {formatJson(currentContent)}
153
158
  </Code>
154
- </Box>
159
+ </Flex>
155
160
  )}
156
- </Box>
161
+ </Flex>
157
162
 
158
163
  {/* Metadata */}
159
164
  {configValue?.current?.changeDescription && (
160
- <Box>
165
+ <Flex>
161
166
  <Text size="xs" c="dimmed" mb={4}>
162
167
  Change Description
163
168
  </Text>
164
169
  <Text size="sm">{configValue.current.changeDescription}</Text>
165
- </Box>
170
+ </Flex>
166
171
  )}
167
172
 
168
173
  {configValue?.current && (
169
- <Group gap="xl">
170
- <Box>
174
+ <Flex gap="xl">
175
+ <Flex>
171
176
  <Text size="xs" c="dimmed" mb={2}>
172
177
  Updated
173
178
  </Text>
174
179
  <Text size="sm">
175
180
  {l(configValue.current.updatedAt, { date: "fromNow" })}
176
181
  </Text>
177
- </Box>
182
+ </Flex>
178
183
  {configValue.current.creatorName && (
179
- <Box>
184
+ <Flex>
180
185
  <Text size="xs" c="dimmed" mb={2}>
181
186
  Updated By
182
187
  </Text>
183
188
  <Text size="sm">{configValue.current.creatorName}</Text>
184
- </Box>
189
+ </Flex>
185
190
  )}
186
- </Group>
191
+ </Flex>
187
192
  )}
188
193
 
189
194
  {!configValue?.current &&
@@ -197,8 +202,8 @@ const ConfigForm = ({
197
202
  {/* Scheduled update preview */}
198
203
  {configValue?.next && (
199
204
  <Card withBorder p="sm" bg="var(--mantine-color-blue-light)">
200
- <Stack gap="xs">
201
- <Group gap="xs">
205
+ <Flex direction="column" gap="xs">
206
+ <Flex gap="xs">
202
207
  <IconClock
203
208
  size={14}
204
209
  color="var(--mantine-color-blue-6)"
@@ -206,7 +211,7 @@ const ConfigForm = ({
206
211
  <Text size="xs" fw={500} c="blue">
207
212
  Scheduled Update (v{configValue.next.version})
208
213
  </Text>
209
- </Group>
214
+ </Flex>
210
215
  <Text size="xs" c="dimmed">
211
216
  Activates{" "}
212
217
  {l(configValue.next.activationDate, {
@@ -216,10 +221,10 @@ const ConfigForm = ({
216
221
  <Code block style={{ whiteSpace: "pre-wrap" }} fz="xs">
217
222
  {formatJson(configValue.next.content)}
218
223
  </Code>
219
- </Stack>
224
+ </Flex>
220
225
  </Card>
221
226
  )}
222
- </Stack>
227
+ </Flex>
223
228
  ) : (
224
229
  <Flex justify="center" align="center" h={200}>
225
230
  <Text c="dimmed" size="sm">
@@ -227,18 +232,18 @@ const ConfigForm = ({
227
232
  </Text>
228
233
  </Flex>
229
234
  )}
230
- </Box>
235
+ </Flex>
231
236
 
232
237
  {/* Footer with actions */}
233
238
  {hasValidSchema && currentContent !== null && (
234
- <Box
239
+ <Flex
235
240
  p="md"
236
241
  style={{
237
242
  flexShrink: 0,
238
243
  borderTop: "1px solid var(--mantine-color-default-border)",
239
244
  }}
240
245
  >
241
- <Group justify="flex-end" gap="sm">
246
+ <Flex justify="flex-end" gap="sm">
242
247
  <ActionButton
243
248
  variant="subtle"
244
249
  onClick={() => form.reset({} as any)}
@@ -249,11 +254,11 @@ const ConfigForm = ({
249
254
  <ActionButton intent="primary" form={form} loading={saving}>
250
255
  Save Changes
251
256
  </ActionButton>
252
- </Group>
253
- </Box>
257
+ </Flex>
258
+ </Flex>
254
259
  )}
255
260
  </Flex>
256
- </Box>
261
+ </Flex>
257
262
  );
258
263
  };
259
264
 
@@ -1,5 +1,5 @@
1
1
  import { Text } from "@alepha/ui";
2
- import { Flex, Stack } from "@mantine/core";
2
+ import { Flex } from "@mantine/core";
3
3
  import { IconArrowLeft } from "@tabler/icons-react";
4
4
 
5
5
  /**
@@ -9,17 +9,17 @@ import { IconArrowLeft } from "@tabler/icons-react";
9
9
  const ParameterEmptyState = () => {
10
10
  return (
11
11
  <Flex flex={1} p={"xl"} align="center">
12
- <Stack align="center" gap="md">
12
+ <Flex direction="column" align="center" gap="md">
13
13
  <IconArrowLeft size={32} color="var(--mantine-color-dimmed)" />
14
- <Stack align="center" gap={4}>
14
+ <Flex direction="column" align="center" gap={4}>
15
15
  <Text fw={500} c="dimmed">
16
16
  No Parameter Selected
17
17
  </Text>
18
18
  <Text size="xs" c="dimmed" ta="center" maw={240}>
19
19
  Choose a parameter from the tree to view and edit its configuration
20
20
  </Text>
21
- </Stack>
22
- </Stack>
21
+ </Flex>
22
+ </Flex>
23
23
  </Flex>
24
24
  );
25
25
  };
@@ -1,13 +1,5 @@
1
1
  import { ActionButton, Flex, Text } from "@alepha/ui";
2
- import {
3
- Badge,
4
- Box,
5
- Group,
6
- Loader,
7
- ScrollArea,
8
- Stack,
9
- Timeline,
10
- } from "@mantine/core";
2
+ import { Badge, Loader, ScrollArea, Timeline } from "@mantine/core";
11
3
  import { IconHistory } from "@tabler/icons-react";
12
4
  import type { Parameter } from "alepha/api/parameters";
13
5
  import { useI18n } from "alepha/react/i18n";
@@ -62,7 +54,7 @@ const ParameterHistory = ({
62
54
  </Text>
63
55
  }
64
56
  title={
65
- <Group gap="xs">
57
+ <Flex gap="xs">
66
58
  <Text size="xs" fw={500}>
67
59
  Version {version.version}
68
60
  </Text>
@@ -73,10 +65,10 @@ const ParameterHistory = ({
73
65
  >
74
66
  {version.status}
75
67
  </Badge>
76
- </Group>
68
+ </Flex>
77
69
  }
78
70
  >
79
- <Stack gap={4} mt={4}>
71
+ <Flex direction="column" gap={4} mt={4}>
80
72
  <Text size="xs" c="dimmed">
81
73
  {l(version.createdAt, { date: "fromNow" })}
82
74
  </Text>
@@ -104,7 +96,7 @@ const ParameterHistory = ({
104
96
  Rollback to this version
105
97
  </ActionButton>
106
98
  )}
107
- </Stack>
99
+ </Flex>
108
100
  </Timeline.Item>
109
101
  ))}
110
102
  </Timeline>
@@ -113,7 +105,7 @@ const ParameterHistory = ({
113
105
  };
114
106
 
115
107
  return (
116
- <Box
108
+ <Flex
117
109
  w={160}
118
110
  h="100%"
119
111
  p="xs"
@@ -125,16 +117,16 @@ const ParameterHistory = ({
125
117
  borderLeft: "1px solid var(--mantine-color-default-border)",
126
118
  }}
127
119
  >
128
- <Stack gap="xs" h="100%" style={{ minHeight: 0 }}>
129
- <Group gap="xs">
120
+ <Flex direction="column" gap="xs" h="100%" style={{ minHeight: 0 }}>
121
+ <Flex gap="xs">
130
122
  <IconHistory size={16} color="var(--mantine-color-dimmed)" />
131
123
  <Text size="sm" fw={500}>
132
124
  History
133
125
  </Text>
134
- </Group>
126
+ </Flex>
135
127
  {renderContent()}
136
- </Stack>
137
- </Box>
128
+ </Flex>
129
+ </Flex>
138
130
  );
139
131
  };
140
132
 
@@ -1,10 +1,8 @@
1
1
  import { ActionButton, Text } from "@alepha/ui";
2
2
  import {
3
- Box,
4
3
  Collapse,
5
- Group,
4
+ Flex,
6
5
  ScrollArea,
7
- Stack,
8
6
  TextInput,
9
7
  UnstyledButton,
10
8
  } from "@mantine/core";
@@ -95,7 +93,7 @@ const TreeNode = memo(
95
93
  const handleMouseLeave = useCallback(() => setIsHovered(false), []);
96
94
 
97
95
  return (
98
- <Box>
96
+ <Flex>
99
97
  <UnstyledButton
100
98
  onClick={handleClick}
101
99
  onMouseEnter={handleMouseEnter}
@@ -103,7 +101,7 @@ const TreeNode = memo(
103
101
  w="100%"
104
102
  style={{ display: "block" }}
105
103
  >
106
- <Group
104
+ <Flex
107
105
  gap={6}
108
106
  wrap="nowrap"
109
107
  p="4px 8px"
@@ -118,7 +116,7 @@ const TreeNode = memo(
118
116
  >
119
117
  {hasChildren ? (
120
118
  <>
121
- <Box
119
+ <Flex
122
120
  style={{
123
121
  display: "flex",
124
122
  alignItems: "center",
@@ -137,7 +135,7 @@ const TreeNode = memo(
137
135
  color="var(--mantine-color-dimmed)"
138
136
  />
139
137
  )}
140
- </Box>
138
+ </Flex>
141
139
  {isExpanded ? (
142
140
  <IconFolderOpen
143
141
  size={16}
@@ -154,7 +152,7 @@ const TreeNode = memo(
154
152
  </>
155
153
  ) : (
156
154
  <>
157
- <Box w={16} />
155
+ <Flex w={16} />
158
156
  <IconSettings
159
157
  size={16}
160
158
  color={
@@ -178,7 +176,7 @@ const TreeNode = memo(
178
176
  >
179
177
  {node.name}
180
178
  </Text>
181
- </Group>
179
+ </Flex>
182
180
  </UnstyledButton>
183
181
 
184
182
  {hasChildren && (
@@ -196,7 +194,7 @@ const TreeNode = memo(
196
194
  ))}
197
195
  </Collapse>
198
196
  )}
199
- </Box>
197
+ </Flex>
200
198
  );
201
199
  },
202
200
  );
@@ -259,7 +257,7 @@ const ParameterTree = ({
259
257
  );
260
258
 
261
259
  return (
262
- <Box
260
+ <Flex
263
261
  w={280}
264
262
  h="100%"
265
263
  p="sm"
@@ -270,8 +268,8 @@ const ParameterTree = ({
270
268
  borderRight: "1px solid var(--mantine-color-default-border)",
271
269
  }}
272
270
  >
273
- <Stack gap="sm" h="100%" style={{ minHeight: 0 }}>
274
- <Group justify="space-between" gap="xs">
271
+ <Flex direction="column" gap="sm" h="100%" style={{ minHeight: 0 }}>
272
+ <Flex justify="space-between" gap="xs">
275
273
  <Text size="sm" fw={600}>
276
274
  Parameters
277
275
  </Text>
@@ -283,7 +281,7 @@ const ParameterTree = ({
283
281
  >
284
282
  <IconRefresh size={14} />
285
283
  </ActionButton>
286
- </Group>
284
+ </Flex>
287
285
 
288
286
  <TextInput
289
287
  placeholder="Search..."
@@ -299,7 +297,7 @@ const ParameterTree = ({
299
297
  {searchQuery ? "No matching parameters" : "No parameters"}
300
298
  </Text>
301
299
  ) : (
302
- <Stack gap={0} style={{ gap: 1 }}>
300
+ <Flex direction="column" gap={0} style={{ gap: 1 }}>
303
301
  {filteredTreeData.map((node) => (
304
302
  <TreeNode
305
303
  key={node.path}
@@ -311,11 +309,11 @@ const ParameterTree = ({
311
309
  onToggle={handleToggle}
312
310
  />
313
311
  ))}
314
- </Stack>
312
+ </Flex>
315
313
  )}
316
314
  </ScrollArea>
317
- </Stack>
318
- </Box>
315
+ </Flex>
316
+ </Flex>
319
317
  );
320
318
  };
321
319
 
@@ -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,
@@ -120,7 +120,7 @@ const AdminSessions = (props: AdminSessionsProps) => {
120
120
  label: "Device",
121
121
  fit: true,
122
122
  value: (item) => (
123
- <Group gap={4}>
123
+ <Flex gap={4}>
124
124
  {item.userAgent ? (
125
125
  <>
126
126
  <Badge
@@ -139,7 +139,7 @@ const AdminSessions = (props: AdminSessionsProps) => {
139
139
  -
140
140
  </Text>
141
141
  )}
142
- </Group>
142
+ </Flex>
143
143
  ),
144
144
  },
145
145
  ip: {
@@ -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>