@alepha/ui 0.18.0 → 0.18.2

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 (187) hide show
  1. package/dist/admin/{AdminApiKeys-C-6_Q-lH.js → AdminApiKeys-BJhIwfD6.js} +17 -38
  2. package/dist/admin/AdminApiKeys-BJhIwfD6.js.map +1 -0
  3. package/dist/admin/{AdminAudits-Bgbf04hO.js → AdminAudits-DzD_4cDt.js} +23 -19
  4. package/dist/admin/AdminAudits-DzD_4cDt.js.map +1 -0
  5. package/dist/admin/AdminDashboard-C92tIc6x.js +67 -0
  6. package/dist/admin/AdminDashboard-C92tIc6x.js.map +1 -0
  7. package/dist/admin/{AdminFiles-B9a7G3cY.js → AdminFiles-DLpfhBkf.js} +3 -7
  8. package/dist/admin/AdminFiles-DLpfhBkf.js.map +1 -0
  9. package/dist/admin/{AdminJobDashboard-DaTwf5OY.js → AdminJobDashboard-KIOkeMgE.js} +2 -2
  10. package/dist/admin/{AdminJobDashboard-DaTwf5OY.js.map → AdminJobDashboard-KIOkeMgE.js.map} +1 -1
  11. package/dist/admin/{AdminJobExecutions-B9cek5dl.js → AdminJobExecutions-D0Yo_PU0.js} +24 -36
  12. package/dist/admin/AdminJobExecutions-D0Yo_PU0.js.map +1 -0
  13. package/dist/admin/{AdminJobRegistry-DFgV3oqx.js → AdminJobRegistry-PFajqaGK.js} +10 -18
  14. package/dist/admin/AdminJobRegistry-PFajqaGK.js.map +1 -0
  15. package/dist/admin/AdminLayout-B1DXZHDn.js +61 -0
  16. package/dist/admin/AdminLayout-B1DXZHDn.js.map +1 -0
  17. package/dist/admin/{AdminParameters-DHw9ATgl.js → AdminParameters-BspPeqp_.js} +2 -2
  18. package/dist/admin/{AdminParameters-DHw9ATgl.js.map → AdminParameters-BspPeqp_.js.map} +1 -1
  19. package/dist/admin/{AdminSessions-BhGJPI3z.js → AdminSessions-BnH5CZQl.js} +48 -53
  20. package/dist/admin/AdminSessions-BnH5CZQl.js.map +1 -0
  21. package/dist/admin/{AdminUserLayout-BdC4Te8m.js → AdminUserLayout-DUbC6-BI.js} +2 -2
  22. package/dist/admin/{AdminUserLayout-BdC4Te8m.js.map → AdminUserLayout-DUbC6-BI.js.map} +1 -1
  23. package/dist/admin/{AdminUserProfile-DAt23fqY.js → AdminUserProfile-DuTUnjdG.js} +3 -3
  24. package/dist/admin/{AdminUserProfile-DAt23fqY.js.map → AdminUserProfile-DuTUnjdG.js.map} +1 -1
  25. package/dist/admin/{AdminUserSessions-1uzcx02z.js → AdminUserSessions-DvZdAGpL.js} +33 -35
  26. package/dist/admin/AdminUserSessions-DvZdAGpL.js.map +1 -0
  27. package/dist/admin/AdminUsers-CR9z0g_5.js +206 -0
  28. package/dist/admin/AdminUsers-CR9z0g_5.js.map +1 -0
  29. package/dist/admin/{AuthLayout-DFJvCvzw.js → AuthLayout-DsUfp9RG.js} +2 -2
  30. package/dist/admin/{AuthLayout-DFJvCvzw.js.map → AuthLayout-DsUfp9RG.js.map} +1 -1
  31. package/dist/admin/{IconGoogle-CSQLPYwX.js → IconGoogle-Ch1m3Uzl.js} +1 -1
  32. package/dist/admin/{IconGoogle-CSQLPYwX.js.map → IconGoogle-Ch1m3Uzl.js.map} +1 -1
  33. package/dist/admin/{Login-BGheURrg.js → Login-DHbYJKwg.js} +3 -3
  34. package/dist/{auth/Login-Denw_UGy.js.map → admin/Login-DHbYJKwg.js.map} +1 -1
  35. package/dist/{auth/Profile-BMX_Ar_s.js → admin/Profile-B2EcIDB9.js} +2 -2
  36. package/dist/{auth/Profile-BMX_Ar_s.js.map → admin/Profile-B2EcIDB9.js.map} +1 -1
  37. package/dist/admin/{Register-Cs10l8vX.js → Register-Z3fxRbUF.js} +3 -3
  38. package/dist/{demo/Register-a70LPgs2.js.map → admin/Register-Z3fxRbUF.js.map} +1 -1
  39. package/dist/admin/{ResetPassword-BwDdfkGH.js → ResetPassword-_Y1qTTKh.js} +2 -2
  40. package/dist/admin/{ResetPassword-BwDdfkGH.js.map → ResetPassword-_Y1qTTKh.js.map} +1 -1
  41. package/dist/admin/{VerifyEmail-DfXHAiQl.js → VerifyEmail-Bg22bwcC.js} +2 -2
  42. package/dist/admin/{VerifyEmail-DfXHAiQl.js.map → VerifyEmail-Bg22bwcC.js.map} +1 -1
  43. package/dist/admin/{core-2xoLiT0o.js → core-BVO_TQxb.js} +1474 -233
  44. package/dist/admin/core-BVO_TQxb.js.map +1 -0
  45. package/dist/admin/index.d.ts +29 -4
  46. package/dist/admin/index.d.ts.map +1 -1
  47. package/dist/admin/index.js +448 -69
  48. package/dist/admin/index.js.map +1 -1
  49. package/dist/auth/{AuthLayout-CAE1pX9s.js → AuthLayout-C161NeF6.js} +2 -2
  50. package/dist/auth/{AuthLayout-CAE1pX9s.js.map → AuthLayout-C161NeF6.js.map} +1 -1
  51. package/dist/auth/{Login-Denw_UGy.js → Login-C7jIqf00.js} +2 -2
  52. package/dist/{admin/Login-BGheURrg.js.map → auth/Login-C7jIqf00.js.map} +1 -1
  53. package/dist/{admin/Profile-B-c9pCPf.js → auth/Profile-BMpXJ0oi.js} +2 -2
  54. package/dist/{demo/Profile-CWqti7FB.js.map → auth/Profile-BMpXJ0oi.js.map} +1 -1
  55. package/dist/auth/{Register-6hi_cpfF.js → Register-2gx8qll-.js} +2 -2
  56. package/dist/auth/{Register-6hi_cpfF.js.map → Register-2gx8qll-.js.map} +1 -1
  57. package/dist/{demo/ResetPassword-DWN0lzr5.js → auth/ResetPassword-DBxt9hKk.js} +2 -2
  58. package/dist/auth/{ResetPassword-CqfTk1FI.js.map → ResetPassword-DBxt9hKk.js.map} +1 -1
  59. package/dist/{demo/VerifyEmail-DZWL72K4.js → auth/VerifyEmail-Z80Ubajk.js} +2 -2
  60. package/dist/auth/{VerifyEmail-nWiSTMjF.js.map → VerifyEmail-Z80Ubajk.js.map} +1 -1
  61. package/dist/auth/{core-niW0sFLv.js → core-DyfeVr5c.js} +1002 -38
  62. package/dist/auth/core-DyfeVr5c.js.map +1 -0
  63. package/dist/auth/index.d.ts +12 -1
  64. package/dist/auth/index.d.ts.map +1 -1
  65. package/dist/auth/index.js +12 -13
  66. package/dist/auth/index.js.map +1 -1
  67. package/dist/core/index.d.ts +95 -14
  68. package/dist/core/index.d.ts.map +1 -1
  69. package/dist/core/index.js +1473 -232
  70. package/dist/core/index.js.map +1 -1
  71. package/dist/demo/{AuthLayout-jLa0aKsI.js → AuthLayout-DN-ClJQk.js} +2 -2
  72. package/dist/demo/{AuthLayout-jLa0aKsI.js.map → AuthLayout-DN-ClJQk.js.map} +1 -1
  73. package/dist/demo/{DemoButton-BmaWZVwf.js → DemoButton-CGUyR9eM.js} +3 -3
  74. package/dist/demo/{DemoButton-BmaWZVwf.js.map → DemoButton-CGUyR9eM.js.map} +1 -1
  75. package/dist/demo/{DemoDataTable-Z9xyV221.js → DemoDataTable-QFG-xXSx.js} +15 -19
  76. package/dist/demo/DemoDataTable-QFG-xXSx.js.map +1 -0
  77. package/dist/demo/{DemoDialog-4ItHLf9t.js → DemoDialog-DW8QEvD1.js} +2 -2
  78. package/dist/demo/{DemoDialog-4ItHLf9t.js.map → DemoDialog-DW8QEvD1.js.map} +1 -1
  79. package/dist/demo/{DemoFlex-EtVq8QfX.js → DemoFlex-CAhLUanT.js} +3 -3
  80. package/dist/demo/{DemoFlex-EtVq8QfX.js.map → DemoFlex-CAhLUanT.js.map} +1 -1
  81. package/dist/demo/{DemoHeading-BS-vGfkI.js → DemoHeading-yIFmNjHB.js} +3 -3
  82. package/dist/demo/{DemoHeading-BS-vGfkI.js.map → DemoHeading-yIFmNjHB.js.map} +1 -1
  83. package/dist/demo/{DemoHome-Clbn8AmS.js → DemoHome-BSGuBHus.js} +2 -2
  84. package/dist/demo/{DemoHome-Clbn8AmS.js.map → DemoHome-BSGuBHus.js.map} +1 -1
  85. package/dist/demo/{DemoJsonViewer-DkIX_ky2.js → DemoJsonViewer-DsA2IpgV.js} +3 -3
  86. package/dist/demo/{DemoJsonViewer-DkIX_ky2.js.map → DemoJsonViewer-DsA2IpgV.js.map} +1 -1
  87. package/dist/demo/{DemoLayout-C56xb5EE.js → DemoLayout-Cy6xjn6P.js} +2 -2
  88. package/dist/demo/{DemoLayout-C56xb5EE.js.map → DemoLayout-Cy6xjn6P.js.map} +1 -1
  89. package/dist/demo/{DemoLogin-BZwpicOS.js → DemoLogin-vqxgTu4P.js} +8 -8
  90. package/dist/demo/{DemoLogin-BZwpicOS.js.map → DemoLogin-vqxgTu4P.js.map} +1 -1
  91. package/dist/demo/{DemoRegister-C7_qc4MJ.js → DemoRegister-YHPvPg77.js} +8 -8
  92. package/dist/demo/{DemoRegister-C7_qc4MJ.js.map → DemoRegister-YHPvPg77.js.map} +1 -1
  93. package/dist/demo/{DemoResetPassword-BI1Ct4Dw.js → DemoResetPassword-mOW18Zlm.js} +8 -8
  94. package/dist/demo/{DemoResetPassword-BI1Ct4Dw.js.map → DemoResetPassword-mOW18Zlm.js.map} +1 -1
  95. package/dist/demo/{DemoSidebar-CcBo4ltC.js → DemoSidebar-od7aLjP_.js} +3 -3
  96. package/dist/demo/{DemoSidebar-CcBo4ltC.js.map → DemoSidebar-od7aLjP_.js.map} +1 -1
  97. package/dist/demo/{DemoText-CzXuUn3g.js → DemoText-DU3JeRS0.js} +3 -3
  98. package/dist/demo/{DemoText-CzXuUn3g.js.map → DemoText-DU3JeRS0.js.map} +1 -1
  99. package/dist/demo/{DemoToast-BgHDhWrX.js → DemoToast-CUJEiPRa.js} +2 -2
  100. package/dist/demo/{DemoToast-BgHDhWrX.js.map → DemoToast-CUJEiPRa.js.map} +1 -1
  101. package/dist/demo/{DemoTypeForm-DDzWoMSV.js → DemoTypeForm-C1dNkahD.js} +3 -3
  102. package/dist/demo/{DemoTypeForm-DDzWoMSV.js.map → DemoTypeForm-C1dNkahD.js.map} +1 -1
  103. package/dist/demo/{DemoVerifyEmail-C_Irdnov.js → DemoVerifyEmail-D9EcXZ38.js} +8 -8
  104. package/dist/demo/{DemoVerifyEmail-C_Irdnov.js.map → DemoVerifyEmail-D9EcXZ38.js.map} +1 -1
  105. package/dist/demo/{Login-hSOU3jZc.js → Login-CoYf_P_F.js} +2 -2
  106. package/dist/demo/{Login-hSOU3jZc.js.map → Login-CoYf_P_F.js.map} +1 -1
  107. package/dist/demo/{Profile-CWqti7FB.js → Profile-BE_Y3co2.js} +2 -2
  108. package/dist/{admin/Profile-B-c9pCPf.js.map → demo/Profile-BE_Y3co2.js.map} +1 -1
  109. package/dist/demo/{Register-a70LPgs2.js → Register-fXHmBpr3.js} +2 -2
  110. package/dist/{admin/Register-Cs10l8vX.js.map → demo/Register-fXHmBpr3.js.map} +1 -1
  111. package/dist/{auth/ResetPassword-CqfTk1FI.js → demo/ResetPassword-CAPj8MO3.js} +2 -2
  112. package/dist/demo/{ResetPassword-DWN0lzr5.js.map → ResetPassword-CAPj8MO3.js.map} +1 -1
  113. package/dist/demo/{Showcase-Dq3MISpd.js → Showcase-BtEU0pY9.js} +2 -2
  114. package/dist/demo/{Showcase-Dq3MISpd.js.map → Showcase-BtEU0pY9.js.map} +1 -1
  115. package/dist/{auth/VerifyEmail-nWiSTMjF.js → demo/VerifyEmail-DFmdCdYs.js} +2 -2
  116. package/dist/demo/{VerifyEmail-DZWL72K4.js.map → VerifyEmail-DFmdCdYs.js.map} +1 -1
  117. package/dist/demo/{auth-d6n3xbug.js → auth-Djd7SKiw.js} +8 -8
  118. package/dist/demo/{auth-d6n3xbug.js.map → auth-Djd7SKiw.js.map} +1 -1
  119. package/dist/demo/{core-RCUw1Q-a.js → core-B7LNjM78.js} +1484 -226
  120. package/dist/demo/core-B7LNjM78.js.map +1 -0
  121. package/dist/demo/index.js +17 -17
  122. package/package.json +4 -4
  123. package/src/admin/{AdminRouter.ts → AdminRouter.tsx} +128 -19
  124. package/src/admin/components/AdminDashboard.tsx +52 -0
  125. package/src/admin/components/AdminLayout.tsx +32 -40
  126. package/src/admin/components/audits/AdminAudits.tsx +22 -16
  127. package/src/admin/components/files/AdminFiles.tsx +1 -6
  128. package/src/admin/components/jobs/AdminJobExecutions.tsx +33 -39
  129. package/src/admin/components/jobs/AdminJobRegistry.tsx +9 -18
  130. package/src/admin/components/keys/AdminApiKeys.tsx +23 -41
  131. package/src/admin/components/sessions/AdminSessions.tsx +71 -71
  132. package/src/admin/components/users/AdminUserSessions.tsx +33 -31
  133. package/src/admin/components/users/AdminUsers.tsx +184 -72
  134. package/src/admin/index.ts +2 -2
  135. package/src/admin/primitives/$uiAdmin.ts +1 -1
  136. package/src/auth/components/buttons/UserButton.tsx +1 -3
  137. package/src/core/atoms/alephaSidebarAtom.ts +1 -1
  138. package/src/core/atoms/alephaThemeListAtom.ts +14 -1
  139. package/src/core/atoms/alephaThemeOverridesAtom.ts +17 -0
  140. package/src/core/atoms/themes/editorial.ts +184 -0
  141. package/src/core/atoms/themes/monochrome.ts +197 -0
  142. package/src/core/atoms/themes/rosePine.ts +208 -0
  143. package/src/core/atoms/themes/softBrutalism.ts +221 -0
  144. package/src/core/atoms/themes/terminal.ts +186 -0
  145. package/src/core/components/Flex.tsx +91 -1
  146. package/src/core/components/Text.tsx +1 -1
  147. package/src/core/components/buttons/ActionButton.tsx +15 -19
  148. package/src/core/components/buttons/DarkModeButton.tsx +3 -3
  149. package/src/core/components/buttons/LanguageButton.tsx +1 -1
  150. package/src/core/components/buttons/OmnibarButton.tsx +1 -2
  151. package/src/core/components/buttons/ThemeButton.tsx +40 -11
  152. package/src/core/components/buttons/ThemeExpertModal.tsx +184 -0
  153. package/src/core/components/buttons/ToggleSidebarButton.tsx +1 -2
  154. package/src/core/components/layout/AppBar.tsx +10 -0
  155. package/src/core/components/layout/DashboardShell.tsx +10 -7
  156. package/src/core/components/layout/Sidebar.tsx +60 -52
  157. package/src/core/constants/ui.ts +5 -5
  158. package/src/core/hooks/useTheme.ts +26 -3
  159. package/src/core/index.ts +6 -1
  160. package/src/core/interfaces/AlephaTheme.ts +2 -0
  161. package/src/core/providers/ThemeProvider.ts +108 -8
  162. package/src/core/services/DialogService.tsx +24 -3
  163. package/src/core/styles.css +26 -23
  164. package/src/core/table/components/DataTable.tsx +167 -137
  165. package/src/core/table/components/DataTableFilters.tsx +1 -6
  166. package/src/core/table/components/DataTablePagination.tsx +51 -28
  167. package/src/core/table/components/DataTableToolbar.tsx +9 -4
  168. package/src/core/table/index.ts +1 -0
  169. package/src/core/table/interfaces/types.ts +13 -9
  170. package/src/demo/components/core/DemoDataTable.tsx +15 -19
  171. package/dist/admin/AdminApiKeys-C-6_Q-lH.js.map +0 -1
  172. package/dist/admin/AdminAudits-Bgbf04hO.js.map +0 -1
  173. package/dist/admin/AdminFiles-B9a7G3cY.js.map +0 -1
  174. package/dist/admin/AdminJobExecutions-B9cek5dl.js.map +0 -1
  175. package/dist/admin/AdminJobRegistry-DFgV3oqx.js.map +0 -1
  176. package/dist/admin/AdminLayout-DHsvWxVB.js +0 -70
  177. package/dist/admin/AdminLayout-DHsvWxVB.js.map +0 -1
  178. package/dist/admin/AdminSessions-BhGJPI3z.js.map +0 -1
  179. package/dist/admin/AdminUserSessions-1uzcx02z.js.map +0 -1
  180. package/dist/admin/AdminUsers-C85c3eiQ.js +0 -121
  181. package/dist/admin/AdminUsers-C85c3eiQ.js.map +0 -1
  182. package/dist/admin/auth-Dr0Cf8I7.js +0 -319
  183. package/dist/admin/auth-Dr0Cf8I7.js.map +0 -1
  184. package/dist/admin/core-2xoLiT0o.js.map +0 -1
  185. package/dist/auth/core-niW0sFLv.js.map +0 -1
  186. package/dist/demo/DemoDataTable-Z9xyV221.js.map +0 -1
  187. package/dist/demo/core-RCUw1Q-a.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { DataTable, Flex, Text } from "@alepha/ui";
2
2
  import { Badge, Tooltip } from "@mantine/core";
3
- import { IconCheck, IconUser, IconX } from "@tabler/icons-react";
3
+ import { IconUser } from "@tabler/icons-react";
4
4
  import { type Page, t } from "alepha";
5
5
  import type { AdminAuditController, AuditEntity } from "alepha/api/audits";
6
6
  import { useClient } from "alepha/react";
@@ -29,10 +29,11 @@ const AdminAudits = (props: AdminAuditsProps) => {
29
29
  });
30
30
 
31
31
  return (
32
- <Flex flex={1} direction="column">
32
+ <Flex p="md" flex={1} direction="column">
33
33
  <DataTable<AuditEntity, typeof filters>
34
34
  submitOnInit
35
35
  defaultSize={20}
36
+ defaultFilters={["search", "severity"]}
36
37
  typeFormProps={{
37
38
  skipSubmitButton: true,
38
39
  columns: 4,
@@ -40,9 +41,8 @@ const AdminAudits = (props: AdminAuditsProps) => {
40
41
  tableProps={{
41
42
  horizontalSpacing: "xs",
42
43
  verticalSpacing: "xs",
43
- striped: false,
44
- highlightOnHover: true,
45
44
  }}
45
+ onFilterChange={(_key, _value, form) => form.submit()}
46
46
  filters={filters}
47
47
  tableTrProps={(item) => ({
48
48
  style: {
@@ -69,7 +69,6 @@ const AdminAudits = (props: AdminAuditsProps) => {
69
69
  columns={{
70
70
  type: {
71
71
  label: "Type",
72
- fit: true,
73
72
  value: (item) => (
74
73
  <Badge size="sm" variant="default">
75
74
  {item.type}
@@ -78,7 +77,6 @@ const AdminAudits = (props: AdminAuditsProps) => {
78
77
  },
79
78
  action: {
80
79
  label: "Action",
81
- fit: true,
82
80
  value: (item) => (
83
81
  <Badge size="sm" variant="default">
84
82
  {item.action}
@@ -87,16 +85,24 @@ const AdminAudits = (props: AdminAuditsProps) => {
87
85
  },
88
86
  severity: {
89
87
  label: "Severity",
90
- fit: true,
91
88
  value: (item) => (
92
- <Text size="xs" tt="capitalize">
89
+ <Badge
90
+ size="sm"
91
+ variant="light"
92
+ color={
93
+ item.severity === "critical"
94
+ ? "red"
95
+ : item.severity === "warning"
96
+ ? "yellow"
97
+ : "gray"
98
+ }
99
+ >
93
100
  {item.severity}
94
- </Text>
101
+ </Badge>
95
102
  ),
96
103
  },
97
104
  user: {
98
105
  label: "User",
99
- fit: true,
100
106
  value: (item) =>
101
107
  item.userId ? (
102
108
  <Tooltip
@@ -132,7 +138,6 @@ const AdminAudits = (props: AdminAuditsProps) => {
132
138
  },
133
139
  resource: {
134
140
  label: "Resource",
135
- fit: true,
136
141
  value: (item) =>
137
142
  item.resourceType ? (
138
143
  <Tooltip label={`${item.resourceType}: ${item.resourceId}`}>
@@ -148,19 +153,21 @@ const AdminAudits = (props: AdminAuditsProps) => {
148
153
  },
149
154
  success: {
150
155
  label: "Status",
151
- fit: true,
152
156
  value: (item) =>
153
157
  item.success ? (
154
- <IconCheck size={14} />
158
+ <Badge size="sm" variant="light" color="green">
159
+ OK
160
+ </Badge>
155
161
  ) : (
156
162
  <Tooltip label={item.errorMessage || "Failed"}>
157
- <IconX size={14} />
163
+ <Badge size="sm" variant="light" color="red">
164
+ Failed
165
+ </Badge>
158
166
  </Tooltip>
159
167
  ),
160
168
  },
161
169
  ipAddress: {
162
170
  label: "IP",
163
- fit: true,
164
171
  value: (item) => (
165
172
  <Text size="xs" c="dimmed" ff="monospace">
166
173
  {item.ipAddress || "-"}
@@ -169,7 +176,6 @@ const AdminAudits = (props: AdminAuditsProps) => {
169
176
  },
170
177
  createdAt: {
171
178
  label: "Time",
172
- fit: true,
173
179
  value: (item) => (
174
180
  <Tooltip label={l(item.createdAt, { date: "medium" })}>
175
181
  <Text size="xs" c="dimmed">
@@ -28,7 +28,7 @@ const AdminFiles = () => {
28
28
  };
29
29
 
30
30
  return (
31
- <Flex flex={1} direction={"column"}>
31
+ <Flex p="md" flex={1} direction={"column"}>
32
32
  <DataTable<FileEntity, typeof filters>
33
33
  submitOnInit
34
34
  defaultSize={10}
@@ -64,7 +64,6 @@ const AdminFiles = () => {
64
64
  },
65
65
  bucket: {
66
66
  label: "Bucket",
67
- fit: true,
68
67
  value: (item) => (
69
68
  <Text size="xs" ff="monospace">
70
69
  {item.bucket}
@@ -73,7 +72,6 @@ const AdminFiles = () => {
73
72
  },
74
73
  mimeType: {
75
74
  label: "Type",
76
- fit: true,
77
75
  value: (item) => (
78
76
  <Text size="xs" c="dimmed">
79
77
  {item.mimeType}
@@ -82,7 +80,6 @@ const AdminFiles = () => {
82
80
  },
83
81
  size: {
84
82
  label: "Size",
85
- fit: true,
86
83
  value: (item) => (
87
84
  <Text size="xs" c="dimmed">
88
85
  {formatFileSize(item.size)}
@@ -91,7 +88,6 @@ const AdminFiles = () => {
91
88
  },
92
89
  creatorName: {
93
90
  label: "Creator",
94
- fit: true,
95
91
  value: (item) => (
96
92
  <Text size="xs" c="dimmed">
97
93
  {item.creatorName || "-"}
@@ -100,7 +96,6 @@ const AdminFiles = () => {
100
96
  },
101
97
  createdAt: {
102
98
  label: "Created",
103
- fit: true,
104
99
  value: (item) => (
105
100
  <Text size="xs" c="dimmed">
106
101
  {l(item.createdAt, { date: "fromNow" })}
@@ -109,7 +109,7 @@ const AdminJobExecutions = () => {
109
109
  );
110
110
 
111
111
  return (
112
- <Flex flex={1} direction="column" gap="md">
112
+ <Flex p="md" flex={1} direction="column" gap="md">
113
113
  <DataTable<JobExecutionResource, typeof executionFilters>
114
114
  key={`executions-${refreshKey}`}
115
115
  submitOnInit
@@ -121,13 +121,8 @@ const AdminJobExecutions = () => {
121
121
  tableProps={{
122
122
  horizontalSpacing: "sm",
123
123
  verticalSpacing: "sm",
124
- highlightOnHover: true,
125
- }}
126
- onFilterChange={(key, _value, form) => {
127
- if (key === "job" || key === "status" || key === "priority") {
128
- return form.submit();
129
- }
130
124
  }}
125
+ onFilterChange={(_key, _value, form) => form.submit()}
131
126
  filters={executionFilters}
132
127
  defaultFilters={["job", "status"]}
133
128
  items={async (filters) => {
@@ -141,12 +136,23 @@ const AdminJobExecutions = () => {
141
136
  columns={{
142
137
  status: {
143
138
  label: "Status",
144
- fit: true,
145
- value: (item) => (
146
- <Badge size="sm" variant="default">
147
- {item.status}
148
- </Badge>
149
- ),
139
+ value: (item) => {
140
+ const color =
141
+ item.status === "completed"
142
+ ? "green"
143
+ : item.status === "running"
144
+ ? "blue"
145
+ : item.status === "failed" || item.status === "dead"
146
+ ? "red"
147
+ : item.status === "cancelled"
148
+ ? "yellow"
149
+ : "gray";
150
+ return (
151
+ <Badge size="sm" variant="light" color={color}>
152
+ {item.status}
153
+ </Badge>
154
+ );
155
+ },
150
156
  },
151
157
  jobName: {
152
158
  label: "Job",
@@ -158,7 +164,6 @@ const AdminJobExecutions = () => {
158
164
  },
159
165
  priority: {
160
166
  label: "Priority",
161
- fit: true,
162
167
  value: (item) => (
163
168
  <Text size="xs" c="dimmed">
164
169
  {PRIORITY_LABELS[item.priority] ?? item.priority}
@@ -167,7 +172,6 @@ const AdminJobExecutions = () => {
167
172
  },
168
173
  attempt: {
169
174
  label: "Attempt",
170
- fit: true,
171
175
  value: (item) => (
172
176
  <Text size="sm" ff="monospace">
173
177
  {item.attempt}/{item.maxAttempts}
@@ -176,7 +180,6 @@ const AdminJobExecutions = () => {
176
180
  },
177
181
  triggeredByName: {
178
182
  label: "Trigger",
179
- fit: true,
180
183
  defaultHidden: true,
181
184
  value: (item) => (
182
185
  <Text size="xs" c="dimmed">
@@ -186,7 +189,6 @@ const AdminJobExecutions = () => {
186
189
  },
187
190
  createdAt: {
188
191
  label: "Created",
189
- fit: true,
190
192
  defaultHidden: true,
191
193
  value: (item) => (
192
194
  <Text size="xs" c="dimmed">
@@ -196,7 +198,6 @@ const AdminJobExecutions = () => {
196
198
  },
197
199
  startedAt: {
198
200
  label: "Started",
199
- fit: true,
200
201
  value: (item) => (
201
202
  <Text size="xs" c="dimmed">
202
203
  {item.startedAt
@@ -207,7 +208,6 @@ const AdminJobExecutions = () => {
207
208
  },
208
209
  duration: {
209
210
  label: "Duration",
210
- fit: true,
211
211
  value: (item) => (
212
212
  <Text size="xs" c="dimmed" ff="monospace">
213
213
  {item.startedAt &&
@@ -228,7 +228,6 @@ const AdminJobExecutions = () => {
228
228
  },
229
229
  key: {
230
230
  label: "Key",
231
- fit: true,
232
231
  defaultHidden: true,
233
232
  value: (item) => (
234
233
  <Text size="xs" c="dimmed" ff="monospace">
@@ -238,7 +237,6 @@ const AdminJobExecutions = () => {
238
237
  },
239
238
  workerId: {
240
239
  label: "Worker",
241
- fit: true,
242
240
  defaultHidden: true,
243
241
  value: (item) => (
244
242
  <Text size="xs" c="dimmed" ff="monospace">
@@ -246,25 +244,21 @@ const AdminJobExecutions = () => {
246
244
  </Text>
247
245
  ),
248
246
  },
249
- actions: {
250
- label: "",
251
- fit: true,
252
- actions: (item) => [
253
- {
254
- tooltip: "Retry",
255
- icon: IconRefresh,
256
- onClick: () => handleRetry(item.id),
257
- visible: item.can?.retry,
258
- },
259
- {
260
- tooltip: "Cancel",
261
- icon: IconCircleX,
262
- onClick: () => handleCancel(item.id),
263
- visible: item.can?.cancel,
264
- },
265
- ],
266
- },
267
247
  }}
248
+ rowActions={(item) => [
249
+ {
250
+ label: "Retry",
251
+ icon: IconRefresh,
252
+ onClick: () => handleRetry(item.id),
253
+ visible: item.can?.retry,
254
+ },
255
+ {
256
+ label: "Cancel",
257
+ icon: IconCircleX,
258
+ onClick: () => handleCancel(item.id),
259
+ visible: item.can?.cancel,
260
+ },
261
+ ]}
268
262
  panel={{
269
263
  can: (item) => Boolean(item.error || item.key || item.workerId),
270
264
  render: (item) => (
@@ -88,7 +88,7 @@ const AdminJobRegistry = () => {
88
88
  );
89
89
 
90
90
  return (
91
- <Flex flex={1} direction="column" gap="md">
91
+ <Flex p="md" flex={1} direction="column" gap="md">
92
92
  <DataTable<JobRegistration, typeof registryFilters>
93
93
  key={`registry-${refreshKey}`}
94
94
  submitOnInit
@@ -99,7 +99,6 @@ const AdminJobRegistry = () => {
99
99
  tableProps={{
100
100
  horizontalSpacing: "sm",
101
101
  verticalSpacing: "sm",
102
- highlightOnHover: true,
103
102
  }}
104
103
  onFilterChange={(_key, _value, form) => form.submit()}
105
104
  filters={registryFilters}
@@ -121,7 +120,6 @@ const AdminJobRegistry = () => {
121
120
  },
122
121
  type: {
123
122
  label: "Type",
124
- fit: true,
125
123
  value: (item) => (
126
124
  <Badge size="sm" variant="default">
127
125
  {item.type}
@@ -130,7 +128,6 @@ const AdminJobRegistry = () => {
130
128
  },
131
129
  priority: {
132
130
  label: "Priority",
133
- fit: true,
134
131
  value: (item) => (
135
132
  <Text size="sm" tt="capitalize">
136
133
  {item.priority}
@@ -139,7 +136,6 @@ const AdminJobRegistry = () => {
139
136
  },
140
137
  concurrency: {
141
138
  label: "Concurrency",
142
- fit: true,
143
139
  value: (item) => (
144
140
  <Text size="sm" ff="monospace">
145
141
  {item.concurrency}
@@ -148,7 +144,6 @@ const AdminJobRegistry = () => {
148
144
  },
149
145
  queue: {
150
146
  label: "Queue",
151
- fit: true,
152
147
  value: (item) => {
153
148
  const q = queueMap.get(item.name);
154
149
  if (
@@ -187,19 +182,15 @@ const AdminJobRegistry = () => {
187
182
  );
188
183
  },
189
184
  },
190
- actions: {
191
- label: "",
192
- fit: true,
193
- actions: (item) => [
194
- {
195
- tooltip: "Trigger",
196
- color: "blue",
197
- icon: IconPlayerPlay,
198
- onClick: () => handleTriggerJob(item.name),
199
- },
200
- ],
201
- },
202
185
  }}
186
+ rowActions={(item) => [
187
+ {
188
+ label: "Trigger",
189
+ color: "blue",
190
+ icon: IconPlayerPlay,
191
+ onClick: () => handleTriggerJob(item.name),
192
+ },
193
+ ]}
203
194
  panel={(item) => {
204
195
  const cron = cronMap.get(item.name);
205
196
  const failure = failureMap.get(item.name);
@@ -146,7 +146,7 @@ const AdminApiKeys = () => {
146
146
  }, []);
147
147
 
148
148
  return (
149
- <Flex flex={1} direction="column" gap="md">
149
+ <Flex p="md" flex={1} direction="column" gap="md">
150
150
  <StatCards
151
151
  items={[
152
152
  { label: "Total Keys", value: stats.total, icon: IconKey },
@@ -167,13 +167,8 @@ const AdminApiKeys = () => {
167
167
  tableProps={{
168
168
  horizontalSpacing: "sm",
169
169
  verticalSpacing: "sm",
170
- highlightOnHover: true,
171
- }}
172
- onFilterChange={(key, _value, form) => {
173
- if (key === "userId" || key === "includeRevoked") {
174
- return form.submit();
175
- }
176
170
  }}
171
+ onFilterChange={(_key, _value, form) => form.submit()}
177
172
  filters={filters}
178
173
  tableTrProps={(item) => {
179
174
  const status = getKeyStatus(item);
@@ -218,7 +213,6 @@ const AdminApiKeys = () => {
218
213
  },
219
214
  token: {
220
215
  label: "Key",
221
- fit: true,
222
216
  value: (item) => (
223
217
  <Flex gap={4}>
224
218
  <Code
@@ -240,12 +234,21 @@ const AdminApiKeys = () => {
240
234
  },
241
235
  status: {
242
236
  label: "Status",
243
- fit: true,
244
237
  value: (item) => {
245
238
  const status = getKeyStatus(item);
246
239
  return (
247
- <Badge size="sm" variant="default">
248
- {status.toUpperCase()}
240
+ <Badge
241
+ size="sm"
242
+ variant="light"
243
+ color={
244
+ status === "active"
245
+ ? "green"
246
+ : status === "expired"
247
+ ? "yellow"
248
+ : "red"
249
+ }
250
+ >
251
+ {status}
249
252
  </Badge>
250
253
  );
251
254
  },
@@ -277,7 +280,6 @@ const AdminApiKeys = () => {
277
280
  },
278
281
  usage: {
279
282
  label: "Usage",
280
- fit: true,
281
283
  value: (item) => (
282
284
  <Flex direction="column" gap={2}>
283
285
  <Text size="xs" ff="monospace" fw={500}>
@@ -307,7 +309,6 @@ const AdminApiKeys = () => {
307
309
  },
308
310
  userId: {
309
311
  label: "Owner",
310
- fit: true,
311
312
  value: (item) => (
312
313
  <ActionButton
313
314
  variant="subtle"
@@ -325,7 +326,6 @@ const AdminApiKeys = () => {
325
326
  },
326
327
  createdAt: {
327
328
  label: "Created",
328
- fit: true,
329
329
  value: (item) => (
330
330
  <Text size="xs" c="dimmed">
331
331
  {l(item.createdAt, { date: "fromNow" })}
@@ -334,7 +334,6 @@ const AdminApiKeys = () => {
334
334
  },
335
335
  expiresAt: {
336
336
  label: "Expires",
337
- fit: true,
338
337
  value: (item) => {
339
338
  if (!item.expiresAt) {
340
339
  return (
@@ -351,33 +350,16 @@ const AdminApiKeys = () => {
351
350
  );
352
351
  },
353
352
  },
354
- actions: {
355
- label: "",
356
- fit: true,
357
- value: (item) => {
358
- const status = getKeyStatus(item);
359
- if (status === "revoked") {
360
- return (
361
- <Tooltip label="Already revoked">
362
- <IconCheck size={14} color="var(--mantine-color-dimmed)" />
363
- </Tooltip>
364
- );
365
- }
366
-
367
- return (
368
- <Tooltip label="Revoke key">
369
- <ActionButton
370
- size="xs"
371
- variant="subtle"
372
- onClick={() => handleRevoke(item)}
373
- >
374
- <IconTrash size={14} />
375
- </ActionButton>
376
- </Tooltip>
377
- );
378
- },
379
- },
380
353
  }}
354
+ rowActions={(item) => [
355
+ {
356
+ label: "Revoke key",
357
+ icon: IconTrash,
358
+ color: "red",
359
+ onClick: () => handleRevoke(item),
360
+ visible: getKeyStatus(item) === "active",
361
+ },
362
+ ]}
381
363
  />
382
364
  </Flex>
383
365
  );