@alepha/ui 0.16.2 → 0.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/{AdminApiKeys-CoTOTfgU.js → AdminApiKeys-CF_qOO3u.js} +20 -20
- package/dist/admin/AdminApiKeys-CF_qOO3u.js.map +1 -0
- package/dist/admin/{AdminAudits-BmsxFbDa.js → AdminAudits-BQno3hZG.js} +7 -8
- package/dist/admin/AdminAudits-BQno3hZG.js.map +1 -0
- package/dist/admin/{AdminFiles-BBB8knca.js → AdminFiles-kvuUaASF.js} +3 -5
- package/dist/admin/{AdminFiles-BBB8knca.js.map → AdminFiles-kvuUaASF.js.map} +1 -1
- package/dist/admin/AdminJobDashboard-CrPxp0W1.js +485 -0
- package/dist/admin/AdminJobDashboard-CrPxp0W1.js.map +1 -0
- package/dist/admin/AdminJobExecutions-D-b4Zt7W.js +678 -0
- package/dist/admin/AdminJobExecutions-D-b4Zt7W.js.map +1 -0
- package/dist/admin/AdminJobRegistry-CNX5cpDx.js +301 -0
- package/dist/admin/AdminJobRegistry-CNX5cpDx.js.map +1 -0
- package/dist/admin/{AdminLayout-CsjvpeD1.js → AdminLayout-e-ZP5nWw.js} +1 -1
- package/dist/admin/{AdminLayout-CsjvpeD1.js.map → AdminLayout-e-ZP5nWw.js.map} +1 -1
- package/dist/admin/{AdminNotifications-LwR6RKrx.js → AdminNotifications-DeHJFf6W.js} +3 -5
- package/dist/admin/{AdminNotifications-LwR6RKrx.js.map → AdminNotifications-DeHJFf6W.js.map} +1 -1
- package/dist/admin/{AdminParameters-B_83Vie9.js → AdminParameters-iQE8o7a7.js} +43 -36
- package/dist/admin/AdminParameters-iQE8o7a7.js.map +1 -0
- package/dist/admin/{AdminSessions-CWnPosdd.js → AdminSessions-oKJCbd7w.js} +5 -7
- package/dist/admin/AdminSessions-oKJCbd7w.js.map +1 -0
- package/dist/admin/{AdminUserAudits-nHv636E_.js → AdminUserAudits-BNCEle_E.js} +6 -8
- package/dist/admin/AdminUserAudits-BNCEle_E.js.map +1 -0
- package/dist/admin/{AdminUserCreate-CjYD3Kjc.js → AdminUserCreate-CgqeFwCt.js} +6 -7
- package/dist/admin/AdminUserCreate-CgqeFwCt.js.map +1 -0
- package/dist/admin/{AdminUserDetails-Ccq-LsZ0.js → AdminUserDetails-DDe1A1GP.js} +30 -29
- package/dist/admin/AdminUserDetails-DDe1A1GP.js.map +1 -0
- package/dist/admin/{AdminUserLayout-7s41DiF_.js → AdminUserLayout-HAlobhWf.js} +18 -16
- package/dist/admin/AdminUserLayout-HAlobhWf.js.map +1 -0
- package/dist/admin/{AdminUserSessions-Ds3ODq_d.js → AdminUserSessions-Bq1LnVLf.js} +5 -7
- package/dist/admin/AdminUserSessions-Bq1LnVLf.js.map +1 -0
- package/dist/admin/{AdminUserSettings-CGh4gROo.js → AdminUserSettings-BRsBZoxV.js} +10 -10
- package/dist/admin/AdminUserSettings-BRsBZoxV.js.map +1 -0
- package/dist/admin/{AdminUsers-CvPiBzQK.js → AdminUsers-D71kIOSn.js} +6 -8
- package/dist/admin/AdminUsers-D71kIOSn.js.map +1 -0
- package/dist/admin/index.d.ts +7 -83
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +49 -70
- package/dist/admin/index.js.map +1 -1
- package/dist/auth/{Login-DS_OqA0G.js → Login-BS_FYTy0.js} +13 -8
- package/dist/auth/Login-BS_FYTy0.js.map +1 -0
- package/dist/auth/{Profile-Di7N7HZL.js → Profile-CjDsW378.js} +16 -10
- package/dist/auth/Profile-CjDsW378.js.map +1 -0
- package/dist/auth/{Register-BRR2_gux.js → Register-C5eqzAaD.js} +21 -12
- package/dist/auth/Register-C5eqzAaD.js.map +1 -0
- package/dist/auth/{ResetPassword-oQu72lod.js → ResetPassword-XifinVao.js} +14 -8
- package/dist/auth/ResetPassword-XifinVao.js.map +1 -0
- package/dist/auth/{VerifyEmail-DC6HPZjd.js → VerifyEmail-DTgbeJOO.js} +6 -4
- package/dist/auth/VerifyEmail-DTgbeJOO.js.map +1 -0
- package/dist/auth/index.d.ts +4 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +15 -14
- package/dist/auth/index.js.map +1 -1
- package/dist/core/index.d.ts +37 -26
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +444 -193
- package/dist/core/index.js.map +1 -1
- package/dist/demo/DemoDataTable-lnBKWBf8.js +362 -0
- package/dist/demo/DemoDataTable-lnBKWBf8.js.map +1 -0
- package/dist/demo/{DemoHome-DpRrPlBC.js → DemoHome-CUMZsYaH.js} +6 -7
- package/dist/demo/DemoHome-CUMZsYaH.js.map +1 -0
- package/dist/demo/{DemoJsonViewer-zeucGKHV.js → DemoJsonViewer-_uokbGaW.js} +17 -19
- package/dist/demo/DemoJsonViewer-_uokbGaW.js.map +1 -0
- package/dist/demo/{DemoLayout-PhgbAAiQ.js → DemoLayout-DHVoacE6.js} +2 -4
- package/dist/demo/{DemoLayout-PhgbAAiQ.js.map → DemoLayout-DHVoacE6.js.map} +1 -1
- package/dist/demo/{DemoLogin-DSzP0Lkv.js → DemoLogin-DjJ9314c.js} +22 -17
- package/dist/demo/DemoLogin-DjJ9314c.js.map +1 -0
- package/dist/demo/{DemoRegister-DavFBsCz.js → DemoRegister-DzkJ5M83.js} +34 -25
- package/dist/demo/DemoRegister-DzkJ5M83.js.map +1 -0
- package/dist/demo/{DemoResetPassword-BS2rIAQK.js → DemoResetPassword-DWh4_BpQ.js} +27 -21
- package/dist/demo/DemoResetPassword-DWh4_BpQ.js.map +1 -0
- package/dist/demo/{DemoSidebar-zNkUmHRl.js → DemoSidebar-C1csnGhX.js} +2 -2
- package/dist/demo/{DemoSidebar-zNkUmHRl.js.map → DemoSidebar-C1csnGhX.js.map} +1 -1
- package/dist/demo/{DemoTypeForm-B9q7oT0b.js → DemoTypeForm-CWz6fJrJ.js} +2 -2
- package/dist/demo/{DemoTypeForm-B9q7oT0b.js.map → DemoTypeForm-CWz6fJrJ.js.map} +1 -1
- package/dist/demo/{DemoVerifyEmail-Bi4SdWz0.js → DemoVerifyEmail-DbU_tCj8.js} +13 -11
- package/dist/demo/DemoVerifyEmail-DbU_tCj8.js.map +1 -0
- package/dist/demo/{IconGoogle-CTeZyrek.js → IconGoogle-Ch1m3Uzl.js} +1 -1
- package/dist/demo/{IconGoogle-CTeZyrek.js.map → IconGoogle-Ch1m3Uzl.js.map} +1 -1
- package/dist/demo/{Showcase-C9btr_SJ.js → Showcase-BzoXNlCn.js} +10 -10
- package/dist/demo/Showcase-BzoXNlCn.js.map +1 -0
- package/dist/demo/index.d.ts +1 -68
- package/dist/demo/index.d.ts.map +1 -1
- package/dist/demo/index.js +11 -15
- package/dist/demo/index.js.map +1 -1
- package/dist/json/index.js +2 -2
- package/dist/json/index.js.map +1 -1
- package/package.json +9 -5
- package/src/admin/AdminRouter.ts +36 -5
- package/src/admin/components/audits/AdminAudits.tsx +5 -5
- package/src/admin/components/jobs/AdminJobDashboard.tsx +455 -0
- package/src/admin/components/jobs/AdminJobExecutions.tsx +693 -0
- package/src/admin/components/jobs/AdminJobRegistry.tsx +325 -0
- package/src/admin/components/keys/AdminApiKeys.tsx +28 -31
- package/src/admin/components/parameters/AdminParameters.tsx +3 -3
- package/src/admin/components/parameters/ParameterDetails.tsx +34 -29
- package/src/admin/components/parameters/ParameterEmptyState.tsx +5 -5
- package/src/admin/components/parameters/ParameterHistory.tsx +11 -19
- package/src/admin/components/parameters/ParameterTree.tsx +16 -18
- package/src/admin/components/sessions/AdminSessions.tsx +3 -3
- package/src/admin/components/shared/AdminResourceHeader.tsx +20 -16
- package/src/admin/components/users/AdminUserAudits.tsx +5 -5
- package/src/admin/components/users/AdminUserCreate.tsx +3 -3
- package/src/admin/components/users/AdminUserDetails.tsx +51 -53
- package/src/admin/components/users/AdminUserLayout.tsx +7 -7
- package/src/admin/components/users/AdminUserSessions.tsx +3 -3
- package/src/admin/components/users/AdminUserSettings.tsx +9 -9
- package/src/admin/components/users/AdminUsers.tsx +5 -5
- package/src/admin/components/verifications/AdminVerifications.tsx +3 -3
- package/src/admin/index.ts +0 -24
- package/src/auth/components/Login.tsx +13 -13
- package/src/auth/components/Profile.tsx +17 -26
- package/src/auth/components/Register.tsx +21 -31
- package/src/auth/components/ResetPassword.tsx +13 -22
- package/src/auth/components/VerifyEmail.tsx +5 -5
- package/src/auth/components/buttons/UserButton.tsx +14 -4
- package/src/core/components/buttons/ActionButton.tsx +9 -2
- package/src/core/components/data/ErrorViewer.tsx +15 -15
- package/src/core/components/dialogs/AlertDialog.tsx +3 -3
- package/src/core/components/dialogs/ConfirmDialog.tsx +3 -3
- package/src/core/components/dialogs/PromptDialog.tsx +3 -3
- package/src/core/components/form/Control.tsx +9 -0
- package/src/core/components/form/ControlArray.tsx +6 -7
- package/src/core/components/form/ControlObject.tsx +3 -3
- package/src/core/components/form/ControlQueryBuilder.tsx +20 -22
- package/src/core/components/form/ControlSelect.tsx +4 -0
- package/src/core/components/form/TypeForm.tsx +7 -0
- package/src/core/components/layout/Breadcrumb.tsx +6 -6
- package/src/core/components/layout/Omnibar.tsx +2 -1
- package/src/core/components/layout/Sidebar.tsx +5 -1
- package/src/core/components/table/ColumnPicker.tsx +47 -31
- package/src/core/components/table/DataTable.tsx +277 -201
- package/src/core/components/table/DataTableFilters.tsx +8 -0
- package/src/core/components/table/DataTableToolbar.tsx +98 -5
- package/src/core/components/table/FilterPicker.tsx +28 -26
- package/src/core/components/table/types.ts +52 -37
- package/src/core/components/table/useTableSelection.ts +83 -0
- package/src/core/styles.css +1 -0
- package/src/core/utils/parseInput.ts +1 -0
- package/src/demo/components/DemoHome.tsx +5 -5
- package/src/demo/components/core/DemoDataTable.tsx +209 -5
- package/src/demo/components/json/DemoJsonViewer.tsx +1 -1
- package/src/demo/components/shared/MacWindow.tsx +7 -7
- package/src/demo/components/shared/Showcase.tsx +3 -3
- package/src/demo/index.ts +0 -11
- package/src/json/components/JsonViewer.tsx +3 -3
- package/dist/admin/AdminApiKeys-CoTOTfgU.js.map +0 -1
- package/dist/admin/AdminAudits-BmsxFbDa.js.map +0 -1
- package/dist/admin/AdminJobs-C604joTz.js +0 -698
- package/dist/admin/AdminJobs-C604joTz.js.map +0 -1
- package/dist/admin/AdminParameters-B_83Vie9.js.map +0 -1
- package/dist/admin/AdminSessions-CWnPosdd.js.map +0 -1
- package/dist/admin/AdminUserAudits-nHv636E_.js.map +0 -1
- package/dist/admin/AdminUserCreate-CjYD3Kjc.js.map +0 -1
- package/dist/admin/AdminUserDetails-Ccq-LsZ0.js.map +0 -1
- package/dist/admin/AdminUserLayout-7s41DiF_.js.map +0 -1
- package/dist/admin/AdminUserSessions-Ds3ODq_d.js.map +0 -1
- package/dist/admin/AdminUserSettings-CGh4gROo.js.map +0 -1
- package/dist/admin/AdminUsers-CvPiBzQK.js.map +0 -1
- package/dist/admin/rolldown-runtime-CjeV3_4I.js +0 -18
- package/dist/auth/Login-DS_OqA0G.js.map +0 -1
- package/dist/auth/Profile-Di7N7HZL.js.map +0 -1
- package/dist/auth/Register-BRR2_gux.js.map +0 -1
- package/dist/auth/ResetPassword-oQu72lod.js.map +0 -1
- package/dist/auth/VerifyEmail-DC6HPZjd.js.map +0 -1
- package/dist/demo/DemoDataTable-DCsJq8v5.js +0 -149
- package/dist/demo/DemoDataTable-DCsJq8v5.js.map +0 -1
- package/dist/demo/DemoHome-DpRrPlBC.js.map +0 -1
- package/dist/demo/DemoJsonViewer-zeucGKHV.js.map +0 -1
- package/dist/demo/DemoLogin-DSzP0Lkv.js.map +0 -1
- package/dist/demo/DemoRegister-DavFBsCz.js.map +0 -1
- package/dist/demo/DemoResetPassword-BS2rIAQK.js.map +0 -1
- package/dist/demo/DemoVerifyEmail-Bi4SdWz0.js.map +0 -1
- package/dist/demo/Showcase-C9btr_SJ.js.map +0 -1
- package/dist/demo/rolldown-runtime-CjeV3_4I.js +0 -18
- package/src/admin/components/jobs/AdminJobs.tsx +0 -772
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ActionButton, Flex, Text, TypeForm } from "@alepha/ui";
|
|
2
|
-
import {
|
|
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
|
-
<
|
|
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
|
-
</
|
|
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
|
-
<
|
|
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
|
-
<
|
|
134
|
+
<Flex
|
|
135
|
+
flex={1}
|
|
136
|
+
p="md"
|
|
137
|
+
className="overflow-auto"
|
|
138
|
+
style={{ minHeight: 0 }}
|
|
139
|
+
>
|
|
135
140
|
{currentContent !== null ? (
|
|
136
|
-
<
|
|
141
|
+
<Flex direction="column" gap="lg">
|
|
137
142
|
{/* Form or JSON view */}
|
|
138
|
-
<
|
|
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
|
-
<
|
|
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
|
-
</
|
|
159
|
+
</Flex>
|
|
155
160
|
)}
|
|
156
|
-
</
|
|
161
|
+
</Flex>
|
|
157
162
|
|
|
158
163
|
{/* Metadata */}
|
|
159
164
|
{configValue?.current?.changeDescription && (
|
|
160
|
-
<
|
|
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
|
-
</
|
|
170
|
+
</Flex>
|
|
166
171
|
)}
|
|
167
172
|
|
|
168
173
|
{configValue?.current && (
|
|
169
|
-
<
|
|
170
|
-
<
|
|
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
|
-
</
|
|
182
|
+
</Flex>
|
|
178
183
|
{configValue.current.creatorName && (
|
|
179
|
-
<
|
|
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
|
-
</
|
|
189
|
+
</Flex>
|
|
185
190
|
)}
|
|
186
|
-
</
|
|
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
|
-
<
|
|
201
|
-
<
|
|
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
|
-
</
|
|
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
|
-
</
|
|
224
|
+
</Flex>
|
|
220
225
|
</Card>
|
|
221
226
|
)}
|
|
222
|
-
</
|
|
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
|
-
</
|
|
235
|
+
</Flex>
|
|
231
236
|
|
|
232
237
|
{/* Footer with actions */}
|
|
233
238
|
{hasValidSchema && currentContent !== null && (
|
|
234
|
-
<
|
|
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
|
-
<
|
|
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
|
-
</
|
|
253
|
-
</
|
|
257
|
+
</Flex>
|
|
258
|
+
</Flex>
|
|
254
259
|
)}
|
|
255
260
|
</Flex>
|
|
256
|
-
</
|
|
261
|
+
</Flex>
|
|
257
262
|
);
|
|
258
263
|
};
|
|
259
264
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Text } from "@alepha/ui";
|
|
2
|
-
import { Flex
|
|
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
|
-
<
|
|
12
|
+
<Flex direction="column" align="center" gap="md">
|
|
13
13
|
<IconArrowLeft size={32} color="var(--mantine-color-dimmed)" />
|
|
14
|
-
<
|
|
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
|
-
</
|
|
22
|
-
</
|
|
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
|
-
<
|
|
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
|
-
</
|
|
68
|
+
</Flex>
|
|
77
69
|
}
|
|
78
70
|
>
|
|
79
|
-
<
|
|
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
|
-
</
|
|
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
|
-
<
|
|
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
|
-
<
|
|
129
|
-
<
|
|
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
|
-
</
|
|
126
|
+
</Flex>
|
|
135
127
|
{renderContent()}
|
|
136
|
-
</
|
|
137
|
-
</
|
|
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
|
-
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
</
|
|
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
|
-
<
|
|
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
|
-
</
|
|
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
|
-
</
|
|
197
|
+
</Flex>
|
|
200
198
|
);
|
|
201
199
|
},
|
|
202
200
|
);
|
|
@@ -259,7 +257,7 @@ const ParameterTree = ({
|
|
|
259
257
|
);
|
|
260
258
|
|
|
261
259
|
return (
|
|
262
|
-
<
|
|
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
|
-
<
|
|
274
|
-
<
|
|
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
|
-
</
|
|
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
|
-
<
|
|
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
|
-
</
|
|
312
|
+
</Flex>
|
|
315
313
|
)}
|
|
316
314
|
</ScrollArea>
|
|
317
|
-
</
|
|
318
|
-
</
|
|
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
|
|
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
|
-
<
|
|
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
|
-
</
|
|
142
|
+
</Flex>
|
|
143
143
|
),
|
|
144
144
|
},
|
|
145
145
|
ip: {
|
|
@@ -4,9 +4,8 @@ import {
|
|
|
4
4
|
Avatar,
|
|
5
5
|
Badge,
|
|
6
6
|
Button,
|
|
7
|
-
|
|
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
|
-
<
|
|
174
|
+
<Flex direction="column" gap="xs">
|
|
176
175
|
{/* Breadcrumb / Back navigation */}
|
|
177
176
|
{backHref && (
|
|
178
|
-
<
|
|
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
|
-
</
|
|
187
|
+
</Flex>
|
|
189
188
|
)}
|
|
190
189
|
|
|
191
190
|
{/* Main header */}
|
|
192
|
-
<
|
|
191
|
+
<Flex justify="space-between" align="flex-start" wrap="nowrap">
|
|
193
192
|
{/* Left: Avatar + Info */}
|
|
194
|
-
<
|
|
193
|
+
<Flex gap="md" wrap="nowrap">
|
|
195
194
|
{renderAvatar()}
|
|
196
195
|
|
|
197
|
-
<
|
|
196
|
+
<Flex
|
|
197
|
+
direction="column"
|
|
198
|
+
gap={2}
|
|
199
|
+
justify="center"
|
|
200
|
+
style={{ minHeight: 56 }}
|
|
201
|
+
>
|
|
198
202
|
{/* Title row */}
|
|
199
|
-
<
|
|
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
|
-
</
|
|
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
|
-
</
|
|
222
|
-
</
|
|
225
|
+
</Flex>
|
|
226
|
+
</Flex>
|
|
223
227
|
|
|
224
228
|
{/* Right: Actions */}
|
|
225
|
-
<
|
|
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
|
-
</
|
|
276
|
-
</
|
|
277
|
-
</
|
|
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,
|
|
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
|
-
<
|
|
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
|
-
</
|
|
146
|
+
</Flex>
|
|
147
147
|
) : (
|
|
148
148
|
<Tooltip label={item.errorMessage || "Failed"}>
|
|
149
|
-
<
|
|
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
|
-
</
|
|
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,
|
|
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
|
-
<
|
|
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
|
-
</
|
|
78
|
+
</Flex>
|
|
79
79
|
</form>
|
|
80
80
|
</Card>
|
|
81
81
|
</Flex>
|