@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
@@ -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
- <Stack gap="sm">
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
- </Stack>
442
+ </Flex>
444
443
  );
445
444
 
446
445
  if (props.variant === "plain") {
447
446
  return (
448
- <Stack gap="xs">
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
- </Stack>
464
+ </Flex>
466
465
  );
467
466
  }
468
467
 
469
468
  return (
470
469
  <Fieldset legend={inputProps.label}>
471
- <Stack gap="xs">
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
- </Stack>
482
+ </Flex>
484
483
  </Fieldset>
485
484
  );
486
485
  };
@@ -1,4 +1,4 @@
1
- import { Fieldset, Grid, Stack, Text } from "@mantine/core";
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
- <Stack gap="xs">
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
- </Stack>
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
- <Group
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
- <Stack gap="md" style={{ flex: 1 }}>
175
+ <Flex direction="column" gap="md" style={{ flex: 1 }}>
178
176
  {/* Available Operators */}
179
- <Stack gap="xs">
177
+ <Flex direction="column" gap="xs">
180
178
  <Text size="sm" fw={600}>
181
179
  Operators
182
180
  </Text>
183
- <Stack gap={4}>
181
+ <Flex direction="column" gap={4}>
184
182
  {Object.entries(OPERATOR_INFO).map(([key, info]) => (
185
- <Group key={key} gap="xs" wrap="nowrap">
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
- </Group>
198
+ </Flex>
201
199
  ))}
202
- </Stack>
203
- </Stack>
200
+ </Flex>
201
+ </Flex>
204
202
 
205
203
  <Divider />
206
204
 
207
205
  {/* Logic Operators */}
208
- <Stack gap="xs">
206
+ <Flex direction="column" gap="xs">
209
207
  <Text size="sm" fw={600}>
210
208
  Logic
211
209
  </Text>
212
- <Stack gap={4}>
213
- <Group gap="xs" wrap="nowrap">
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
- </Group>
229
- <Group gap="xs" wrap="nowrap">
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
- </Group>
245
- </Stack>
246
- </Stack>
247
- </Stack>
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
- <Group gap={0} wrap="wrap">
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
- </Group>
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
- </Group>
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, Group, type GroupProps, Text } from "@mantine/core";
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 GroupProps {
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
- <Group gap={4} {...groupProps}>
72
+ <Flex gap={4} {...groupProps}>
73
73
  {crumbs.map((crumb, i) => (
74
- <Group key={crumb.href} gap={4}>
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
- </Group>
85
+ </Flex>
86
86
  ))}
87
- </Group>
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("alepha.server.request.user");
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={item.description}
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 type { ColumnVisibility, DataTableColumn } from "./types.ts";
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 handleHideAll = () => {
40
- const newVisibility = columnEntries.reduce(
41
- (acc, [key]) => ({ ...acc, [key]: false }),
42
- {} as ColumnVisibility,
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
- <ActionButton variant="subtle" icon={IconColumns} />
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
- <Stack gap="xs" bg={ui.colors.surface} p="sm" bdrs="sm">
85
- <Group justify="space-between">
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
- <Group gap={4}>
90
- <Button
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
- </Button>
97
- <Button
112
+ </ActionButton>
113
+ <ActionButton
98
114
  size="compact-xs"
99
115
  variant="subtle"
100
- onClick={handleHideAll}
116
+ onClick={handleDefault}
101
117
  >
102
- None
103
- </Button>
104
- </Group>
105
- </Group>
118
+ Default
119
+ </ActionButton>
120
+ </Flex>
121
+ </Flex>
106
122
 
107
123
  <ScrollArea.Autosize mah={300}>
108
- <Stack gap={4}>
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
- </Stack>
134
+ </Flex>
119
135
  </ScrollArea.Autosize>
120
- </Stack>
136
+ </Flex>
121
137
  </Popover.Dropdown>
122
138
  </Popover>
123
139
  );