@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
|
@@ -191,6 +191,7 @@ const Control = (_props: ControlProps) => {
|
|
|
191
191
|
}
|
|
192
192
|
return (
|
|
193
193
|
<ControlNumber
|
|
194
|
+
size={props.size}
|
|
194
195
|
input={props.input}
|
|
195
196
|
title={props.title}
|
|
196
197
|
description={props.description}
|
|
@@ -207,6 +208,7 @@ const Control = (_props: ControlProps) => {
|
|
|
207
208
|
return (
|
|
208
209
|
<FileInput
|
|
209
210
|
{...inputProps}
|
|
211
|
+
size={props.size}
|
|
210
212
|
id={id}
|
|
211
213
|
leftSection={icon}
|
|
212
214
|
onChange={(file) => {
|
|
@@ -224,6 +226,7 @@ const Control = (_props: ControlProps) => {
|
|
|
224
226
|
return (
|
|
225
227
|
<ColorInput
|
|
226
228
|
{...inputProps}
|
|
229
|
+
size={props.size}
|
|
227
230
|
id={id}
|
|
228
231
|
leftSection={icon}
|
|
229
232
|
{...props.input.props}
|
|
@@ -248,6 +251,7 @@ const Control = (_props: ControlProps) => {
|
|
|
248
251
|
}
|
|
249
252
|
return (
|
|
250
253
|
<ControlSelect
|
|
254
|
+
size={props.size}
|
|
251
255
|
input={props.input}
|
|
252
256
|
title={props.title}
|
|
253
257
|
description={props.description}
|
|
@@ -269,6 +273,7 @@ const Control = (_props: ControlProps) => {
|
|
|
269
273
|
return (
|
|
270
274
|
<Switch
|
|
271
275
|
{...inputProps}
|
|
276
|
+
size={props.size}
|
|
272
277
|
id={id}
|
|
273
278
|
color={"blue"}
|
|
274
279
|
defaultChecked={props.input.props.defaultValue}
|
|
@@ -288,6 +293,7 @@ const Control = (_props: ControlProps) => {
|
|
|
288
293
|
return (
|
|
289
294
|
<PasswordInput
|
|
290
295
|
{...inputProps}
|
|
296
|
+
size={props.size}
|
|
291
297
|
id={id}
|
|
292
298
|
leftSection={icon}
|
|
293
299
|
{...props.input.props}
|
|
@@ -303,6 +309,7 @@ const Control = (_props: ControlProps) => {
|
|
|
303
309
|
return (
|
|
304
310
|
<Textarea
|
|
305
311
|
{...inputProps}
|
|
312
|
+
size={props.size}
|
|
306
313
|
id={id}
|
|
307
314
|
leftSection={icon}
|
|
308
315
|
{...props.input.props}
|
|
@@ -324,6 +331,7 @@ const Control = (_props: ControlProps) => {
|
|
|
324
331
|
) {
|
|
325
332
|
return (
|
|
326
333
|
<ControlDate
|
|
334
|
+
size={props.size}
|
|
327
335
|
input={props.input}
|
|
328
336
|
title={props.title}
|
|
329
337
|
description={props.description}
|
|
@@ -358,6 +366,7 @@ const Control = (_props: ControlProps) => {
|
|
|
358
366
|
return (
|
|
359
367
|
<TextInput
|
|
360
368
|
{...inputProps}
|
|
369
|
+
size={props.size}
|
|
361
370
|
id={id}
|
|
362
371
|
leftSection={icon}
|
|
363
372
|
type={getInputType()}
|
|
@@ -3,7 +3,6 @@ import {
|
|
|
3
3
|
Fieldset,
|
|
4
4
|
Flex,
|
|
5
5
|
Grid,
|
|
6
|
-
Stack,
|
|
7
6
|
Text,
|
|
8
7
|
UnstyledButton,
|
|
9
8
|
} from "@mantine/core";
|
|
@@ -337,7 +336,7 @@ const ControlArray = (props: ControlArrayProps) => {
|
|
|
337
336
|
: [];
|
|
338
337
|
|
|
339
338
|
const renderItems = () => (
|
|
340
|
-
<
|
|
339
|
+
<Flex direction="column" gap="sm">
|
|
341
340
|
{items.map((item, index) => (
|
|
342
341
|
<Flex
|
|
343
342
|
key={item.key}
|
|
@@ -440,12 +439,12 @@ const ControlArray = (props: ControlArrayProps) => {
|
|
|
440
439
|
<IconPlus size={14} />
|
|
441
440
|
{props.addLabel ?? "Add"}
|
|
442
441
|
</UnstyledButton>
|
|
443
|
-
</
|
|
442
|
+
</Flex>
|
|
444
443
|
);
|
|
445
444
|
|
|
446
445
|
if (props.variant === "plain") {
|
|
447
446
|
return (
|
|
448
|
-
<
|
|
447
|
+
<Flex direction="column" gap="xs">
|
|
449
448
|
{inputProps.label && (
|
|
450
449
|
<Text size="sm" fw={500}>
|
|
451
450
|
{inputProps.label}
|
|
@@ -462,13 +461,13 @@ const ControlArray = (props: ControlArrayProps) => {
|
|
|
462
461
|
{inputProps.error}
|
|
463
462
|
</Text>
|
|
464
463
|
)}
|
|
465
|
-
</
|
|
464
|
+
</Flex>
|
|
466
465
|
);
|
|
467
466
|
}
|
|
468
467
|
|
|
469
468
|
return (
|
|
470
469
|
<Fieldset legend={inputProps.label}>
|
|
471
|
-
<
|
|
470
|
+
<Flex direction="column" gap="xs">
|
|
472
471
|
{inputProps.description && (
|
|
473
472
|
<Text size="sm" c="dimmed">
|
|
474
473
|
{inputProps.description}
|
|
@@ -480,7 +479,7 @@ const ControlArray = (props: ControlArrayProps) => {
|
|
|
480
479
|
{inputProps.error}
|
|
481
480
|
</Text>
|
|
482
481
|
)}
|
|
483
|
-
</
|
|
482
|
+
</Flex>
|
|
484
483
|
</Fieldset>
|
|
485
484
|
);
|
|
486
485
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fieldset,
|
|
1
|
+
import { Fieldset, Flex, Grid, Text } from "@mantine/core";
|
|
2
2
|
import type { TObject } from "alepha";
|
|
3
3
|
import type { BaseInputField, ObjectInputField } from "alepha/react/form";
|
|
4
4
|
import {
|
|
@@ -107,7 +107,7 @@ const ControlObject = (props: ControlObjectProps) => {
|
|
|
107
107
|
|
|
108
108
|
return (
|
|
109
109
|
<Fieldset legend={inputProps.label}>
|
|
110
|
-
<
|
|
110
|
+
<Flex direction="column" gap="xs">
|
|
111
111
|
{inputProps.description && (
|
|
112
112
|
<Text size="sm" c="dimmed">
|
|
113
113
|
{inputProps.description}
|
|
@@ -119,7 +119,7 @@ const ControlObject = (props: ControlObjectProps) => {
|
|
|
119
119
|
{inputProps.error}
|
|
120
120
|
</Text>
|
|
121
121
|
)}
|
|
122
|
-
</
|
|
122
|
+
</Flex>
|
|
123
123
|
</Fieldset>
|
|
124
124
|
);
|
|
125
125
|
};
|
|
@@ -3,9 +3,7 @@ import {
|
|
|
3
3
|
Badge,
|
|
4
4
|
Divider,
|
|
5
5
|
Flex,
|
|
6
|
-
Group,
|
|
7
6
|
Popover,
|
|
8
|
-
Stack,
|
|
9
7
|
Text,
|
|
10
8
|
TextInput,
|
|
11
9
|
type TextInputProps,
|
|
@@ -165,7 +163,7 @@ interface QueryHelpProps {
|
|
|
165
163
|
|
|
166
164
|
function QueryHelp({ fields, onInsert }: QueryHelpProps) {
|
|
167
165
|
return (
|
|
168
|
-
<
|
|
166
|
+
<Flex
|
|
169
167
|
gap="md"
|
|
170
168
|
align="flex-start"
|
|
171
169
|
wrap="nowrap"
|
|
@@ -174,15 +172,15 @@ function QueryHelp({ fields, onInsert }: QueryHelpProps) {
|
|
|
174
172
|
bdrs={"sm"}
|
|
175
173
|
>
|
|
176
174
|
{/* Left Column: Operators */}
|
|
177
|
-
<
|
|
175
|
+
<Flex direction="column" gap="md" style={{ flex: 1 }}>
|
|
178
176
|
{/* Available Operators */}
|
|
179
|
-
<
|
|
177
|
+
<Flex direction="column" gap="xs">
|
|
180
178
|
<Text size="sm" fw={600}>
|
|
181
179
|
Operators
|
|
182
180
|
</Text>
|
|
183
|
-
<
|
|
181
|
+
<Flex direction="column" gap={4}>
|
|
184
182
|
{Object.entries(OPERATOR_INFO).map(([key, info]) => (
|
|
185
|
-
<
|
|
183
|
+
<Flex key={key} gap="xs" wrap="nowrap">
|
|
186
184
|
<ActionButton
|
|
187
185
|
px={"xs"}
|
|
188
186
|
size={"xs"}
|
|
@@ -197,20 +195,20 @@ function QueryHelp({ fields, onInsert }: QueryHelpProps) {
|
|
|
197
195
|
<Text size="xs" c="dimmed" style={{ flex: 1 }}>
|
|
198
196
|
{info.label}
|
|
199
197
|
</Text>
|
|
200
|
-
</
|
|
198
|
+
</Flex>
|
|
201
199
|
))}
|
|
202
|
-
</
|
|
203
|
-
</
|
|
200
|
+
</Flex>
|
|
201
|
+
</Flex>
|
|
204
202
|
|
|
205
203
|
<Divider />
|
|
206
204
|
|
|
207
205
|
{/* Logic Operators */}
|
|
208
|
-
<
|
|
206
|
+
<Flex direction="column" gap="xs">
|
|
209
207
|
<Text size="sm" fw={600}>
|
|
210
208
|
Logic
|
|
211
209
|
</Text>
|
|
212
|
-
<
|
|
213
|
-
<
|
|
210
|
+
<Flex direction="column" gap={4}>
|
|
211
|
+
<Flex gap="xs" wrap="nowrap">
|
|
214
212
|
<ActionButton
|
|
215
213
|
px={"xs"}
|
|
216
214
|
size={"xs"}
|
|
@@ -225,8 +223,8 @@ function QueryHelp({ fields, onInsert }: QueryHelpProps) {
|
|
|
225
223
|
<Text size="xs" c="dimmed">
|
|
226
224
|
AND
|
|
227
225
|
</Text>
|
|
228
|
-
</
|
|
229
|
-
<
|
|
226
|
+
</Flex>
|
|
227
|
+
<Flex gap="xs" wrap="nowrap">
|
|
230
228
|
<ActionButton
|
|
231
229
|
px={"xs"}
|
|
232
230
|
size={"xs"}
|
|
@@ -241,10 +239,10 @@ function QueryHelp({ fields, onInsert }: QueryHelpProps) {
|
|
|
241
239
|
<Text size="xs" c="dimmed">
|
|
242
240
|
OR
|
|
243
241
|
</Text>
|
|
244
|
-
</
|
|
245
|
-
</
|
|
246
|
-
</
|
|
247
|
-
</
|
|
242
|
+
</Flex>
|
|
243
|
+
</Flex>
|
|
244
|
+
</Flex>
|
|
245
|
+
</Flex>
|
|
248
246
|
|
|
249
247
|
{/* Divider */}
|
|
250
248
|
{fields.length > 0 && <Divider orientation="vertical" />}
|
|
@@ -283,7 +281,7 @@ function QueryHelp({ fields, onInsert }: QueryHelpProps) {
|
|
|
283
281
|
{field.description || field.type}
|
|
284
282
|
</Text>
|
|
285
283
|
{field.enum && (
|
|
286
|
-
<
|
|
284
|
+
<Flex gap={0} wrap="wrap">
|
|
287
285
|
{field.enum.map((enumValue) => (
|
|
288
286
|
<ActionButton
|
|
289
287
|
px={"xs"}
|
|
@@ -295,7 +293,7 @@ function QueryHelp({ fields, onInsert }: QueryHelpProps) {
|
|
|
295
293
|
{enumValue}
|
|
296
294
|
</ActionButton>
|
|
297
295
|
))}
|
|
298
|
-
</
|
|
296
|
+
</Flex>
|
|
299
297
|
)}
|
|
300
298
|
</Flex>
|
|
301
299
|
<Badge size="xs" variant="light" style={{ flexShrink: 0 }}>
|
|
@@ -306,7 +304,7 @@ function QueryHelp({ fields, onInsert }: QueryHelpProps) {
|
|
|
306
304
|
</Flex>
|
|
307
305
|
</Flex>
|
|
308
306
|
)}
|
|
309
|
-
</
|
|
307
|
+
</Flex>
|
|
310
308
|
);
|
|
311
309
|
}
|
|
312
310
|
|
|
@@ -119,6 +119,7 @@ const ControlSelect = (props: ControlSelectProps) => {
|
|
|
119
119
|
return (
|
|
120
120
|
<Autocomplete
|
|
121
121
|
{...inputProps}
|
|
122
|
+
size={props.size}
|
|
122
123
|
id={id}
|
|
123
124
|
leftSection={icon}
|
|
124
125
|
data={data}
|
|
@@ -134,6 +135,7 @@ const ControlSelect = (props: ControlSelectProps) => {
|
|
|
134
135
|
return (
|
|
135
136
|
<TagsInput
|
|
136
137
|
{...inputProps}
|
|
138
|
+
size={props.size}
|
|
137
139
|
id={id}
|
|
138
140
|
leftSection={icon}
|
|
139
141
|
defaultValue={
|
|
@@ -163,6 +165,7 @@ const ControlSelect = (props: ControlSelectProps) => {
|
|
|
163
165
|
return (
|
|
164
166
|
<MultiSelect
|
|
165
167
|
{...inputProps}
|
|
168
|
+
size={props.size}
|
|
166
169
|
id={id}
|
|
167
170
|
leftSection={icon}
|
|
168
171
|
data={data}
|
|
@@ -186,6 +189,7 @@ const ControlSelect = (props: ControlSelectProps) => {
|
|
|
186
189
|
return (
|
|
187
190
|
<Select
|
|
188
191
|
{...inputProps}
|
|
192
|
+
size={props.size}
|
|
189
193
|
id={id}
|
|
190
194
|
leftSection={icon}
|
|
191
195
|
data={data}
|
|
@@ -39,6 +39,8 @@ export interface TypeFormProps<T extends TObject> {
|
|
|
39
39
|
|
|
40
40
|
fill?: boolean;
|
|
41
41
|
flexProps?: FlexProps;
|
|
42
|
+
|
|
43
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl";
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
/**
|
|
@@ -93,6 +95,7 @@ const TypeForm = <T extends TObject>(props: TypeFormProps<T>) => {
|
|
|
93
95
|
skipSubmitButton = false,
|
|
94
96
|
submitButtonProps,
|
|
95
97
|
fill = true,
|
|
98
|
+
size,
|
|
96
99
|
} = props;
|
|
97
100
|
|
|
98
101
|
const schema = props.schema || form.options.schema;
|
|
@@ -163,6 +166,10 @@ const TypeForm = <T extends TObject>(props: TypeFormProps<T>) => {
|
|
|
163
166
|
...fieldControlProps?.[fieldName],
|
|
164
167
|
};
|
|
165
168
|
|
|
169
|
+
if (size) {
|
|
170
|
+
mergedControlProps.size = size;
|
|
171
|
+
}
|
|
172
|
+
|
|
166
173
|
return (
|
|
167
174
|
<Grid.Col key={fieldName} span={span}>
|
|
168
175
|
<Control input={field} {...mergedControlProps} />
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Anchor,
|
|
1
|
+
import { Anchor, Flex, type FlexProps, Text } from "@mantine/core";
|
|
2
2
|
import { IconChevronRight } from "@tabler/icons-react";
|
|
3
3
|
import { Link, useRouter, useRouterState } from "alepha/react/router";
|
|
4
4
|
import type { ReactNode } from "react";
|
|
5
5
|
import { toTitleCase } from "../../utils/string.ts";
|
|
6
6
|
|
|
7
|
-
export interface BreadcrumbProps extends
|
|
7
|
+
export interface BreadcrumbProps extends FlexProps {
|
|
8
8
|
/**
|
|
9
9
|
* Label for the home/root crumb. Set to `false` to hide the root crumb.
|
|
10
10
|
*
|
|
@@ -69,9 +69,9 @@ const Breadcrumb = ({
|
|
|
69
69
|
const sep = separator ?? <IconChevronRight size={12} color="#9ca3af" />;
|
|
70
70
|
|
|
71
71
|
return (
|
|
72
|
-
<
|
|
72
|
+
<Flex gap={4} {...groupProps}>
|
|
73
73
|
{crumbs.map((crumb, i) => (
|
|
74
|
-
<
|
|
74
|
+
<Flex key={crumb.href} gap={4}>
|
|
75
75
|
{i > 0 && sep}
|
|
76
76
|
{i < crumbs.length - 1 ? (
|
|
77
77
|
<Anchor component={Link} href={crumb.href} size={size} c="dimmed">
|
|
@@ -82,9 +82,9 @@ const Breadcrumb = ({
|
|
|
82
82
|
{crumb.label}
|
|
83
83
|
</Text>
|
|
84
84
|
)}
|
|
85
|
-
</
|
|
85
|
+
</Flex>
|
|
86
86
|
))}
|
|
87
|
-
</
|
|
87
|
+
</Flex>
|
|
88
88
|
);
|
|
89
89
|
};
|
|
90
90
|
|
|
@@ -2,6 +2,7 @@ import { Spotlight, type SpotlightActionData } from "@mantine/spotlight";
|
|
|
2
2
|
import { IconSearch } from "@tabler/icons-react";
|
|
3
3
|
import { useStore } from "alepha/react";
|
|
4
4
|
import { useRouter } from "alepha/react/router";
|
|
5
|
+
import { currentUserAtom } from "alepha/security";
|
|
5
6
|
import { type ReactNode, useMemo } from "react";
|
|
6
7
|
import { ui } from "../../constants/ui.ts";
|
|
7
8
|
import { renderIcon } from "../../helpers/renderIcon.tsx";
|
|
@@ -19,7 +20,7 @@ const Omnibar = (props: OmnibarProps) => {
|
|
|
19
20
|
const router = useRouter();
|
|
20
21
|
|
|
21
22
|
// watch user to re-render on permission changes
|
|
22
|
-
const [user] = useStore(
|
|
23
|
+
const [user] = useStore(currentUserAtom);
|
|
23
24
|
|
|
24
25
|
const actions: SpotlightActionData[] = useMemo(
|
|
25
26
|
() =>
|
|
@@ -310,7 +310,11 @@ export const SidebarItem = (props: SidebarItemProps) => {
|
|
|
310
310
|
props.theme.button?.size ??
|
|
311
311
|
(level === 0 ? "sm" : "xs")
|
|
312
312
|
}
|
|
313
|
-
tooltip={
|
|
313
|
+
tooltip={
|
|
314
|
+
item.description
|
|
315
|
+
? { label: item.description, position: "right" }
|
|
316
|
+
: undefined
|
|
317
|
+
}
|
|
314
318
|
color={"gray"}
|
|
315
319
|
variant={"subtle"}
|
|
316
320
|
variantActive={"default"}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Button,
|
|
3
|
-
Checkbox,
|
|
4
|
-
Group,
|
|
5
|
-
Popover,
|
|
6
|
-
ScrollArea,
|
|
7
|
-
Stack,
|
|
8
|
-
Text,
|
|
9
|
-
} from "@mantine/core";
|
|
1
|
+
import { Checkbox, Flex, Popover, ScrollArea, Text } from "@mantine/core";
|
|
10
2
|
import { IconColumns } from "@tabler/icons-react";
|
|
11
3
|
import type { TObject } from "alepha";
|
|
12
4
|
import { useState } from "react";
|
|
13
5
|
import { ui } from "../../constants/ui.ts";
|
|
14
6
|
import ActionButton from "../buttons/ActionButton.tsx";
|
|
15
|
-
import
|
|
7
|
+
import {
|
|
8
|
+
type ColumnVisibility,
|
|
9
|
+
type DataTableColumn,
|
|
10
|
+
DEFAULT_MAX_VISIBLE_COLUMNS,
|
|
11
|
+
} from "./types.ts";
|
|
16
12
|
|
|
17
13
|
export interface ColumnPickerProps<T extends object, Filters extends TObject> {
|
|
18
14
|
columns: { [key: string]: DataTableColumn<T, Filters> };
|
|
@@ -36,11 +32,19 @@ const ColumnPicker = <T extends object, Filters extends TObject>({
|
|
|
36
32
|
onVisibilityChange(newVisibility);
|
|
37
33
|
};
|
|
38
34
|
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
35
|
+
const handleDefault = () => {
|
|
36
|
+
let count = 0;
|
|
37
|
+
const newVisibility = columnEntries.reduce((acc, [key, col]) => {
|
|
38
|
+
if (col.defaultHidden) {
|
|
39
|
+
acc[key] = false;
|
|
40
|
+
} else if (count < DEFAULT_MAX_VISIBLE_COLUMNS) {
|
|
41
|
+
acc[key] = true;
|
|
42
|
+
count++;
|
|
43
|
+
} else {
|
|
44
|
+
acc[key] = false;
|
|
45
|
+
}
|
|
46
|
+
return acc;
|
|
47
|
+
}, {} as ColumnVisibility);
|
|
44
48
|
onVisibilityChange(newVisibility);
|
|
45
49
|
};
|
|
46
50
|
|
|
@@ -71,7 +75,13 @@ const ColumnPicker = <T extends object, Filters extends TObject>({
|
|
|
71
75
|
}}
|
|
72
76
|
>
|
|
73
77
|
<Popover.Target>
|
|
74
|
-
<
|
|
78
|
+
<div>
|
|
79
|
+
<ActionButton
|
|
80
|
+
variant="subtle"
|
|
81
|
+
icon={IconColumns}
|
|
82
|
+
onClick={() => setOpened((o) => !o)}
|
|
83
|
+
/>
|
|
84
|
+
</div>
|
|
75
85
|
</Popover.Target>
|
|
76
86
|
<Popover.Dropdown
|
|
77
87
|
bg="transparent"
|
|
@@ -81,43 +91,49 @@ const ColumnPicker = <T extends object, Filters extends TObject>({
|
|
|
81
91
|
backdropFilter: "blur(20px)",
|
|
82
92
|
}}
|
|
83
93
|
>
|
|
84
|
-
<
|
|
85
|
-
|
|
94
|
+
<Flex
|
|
95
|
+
direction="column"
|
|
96
|
+
gap="xs"
|
|
97
|
+
bg={ui.colors.surface}
|
|
98
|
+
p="sm"
|
|
99
|
+
bdrs="sm"
|
|
100
|
+
>
|
|
101
|
+
<Flex justify="space-between">
|
|
86
102
|
<Text size="sm" fw={500}>
|
|
87
103
|
Columns ({visibleCount}/{columnEntries.length})
|
|
88
104
|
</Text>
|
|
89
|
-
<
|
|
90
|
-
<
|
|
105
|
+
<Flex gap={4}>
|
|
106
|
+
<ActionButton
|
|
91
107
|
size="compact-xs"
|
|
92
108
|
variant="subtle"
|
|
93
109
|
onClick={handleShowAll}
|
|
94
110
|
>
|
|
95
111
|
All
|
|
96
|
-
</
|
|
97
|
-
<
|
|
112
|
+
</ActionButton>
|
|
113
|
+
<ActionButton
|
|
98
114
|
size="compact-xs"
|
|
99
115
|
variant="subtle"
|
|
100
|
-
onClick={
|
|
116
|
+
onClick={handleDefault}
|
|
101
117
|
>
|
|
102
|
-
|
|
103
|
-
</
|
|
104
|
-
</
|
|
105
|
-
</
|
|
118
|
+
Default
|
|
119
|
+
</ActionButton>
|
|
120
|
+
</Flex>
|
|
121
|
+
</Flex>
|
|
106
122
|
|
|
107
123
|
<ScrollArea.Autosize mah={300}>
|
|
108
|
-
<
|
|
124
|
+
<Flex direction="column" gap={4}>
|
|
109
125
|
{columnEntries.map(([key, col]) => (
|
|
110
126
|
<Checkbox
|
|
111
127
|
key={key}
|
|
112
|
-
label={col.label}
|
|
128
|
+
label={col.label || key}
|
|
113
129
|
checked={visibility[key] !== false}
|
|
114
130
|
onChange={(e) => handleToggle(key, e.currentTarget.checked)}
|
|
115
131
|
size="sm"
|
|
116
132
|
/>
|
|
117
133
|
))}
|
|
118
|
-
</
|
|
134
|
+
</Flex>
|
|
119
135
|
</ScrollArea.Autosize>
|
|
120
|
-
</
|
|
136
|
+
</Flex>
|
|
121
137
|
</Popover.Dropdown>
|
|
122
138
|
</Popover>
|
|
123
139
|
);
|