@alepha/ui 0.17.2 → 0.18.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 (270) hide show
  1. package/dist/admin/{AdminApiKeys-CF_qOO3u.js → AdminApiKeys-C-6_Q-lH.js} +56 -192
  2. package/dist/admin/AdminApiKeys-C-6_Q-lH.js.map +1 -0
  3. package/dist/admin/{AdminAudits-BQno3hZG.js → AdminAudits-Bgbf04hO.js} +25 -61
  4. package/dist/admin/AdminAudits-Bgbf04hO.js.map +1 -0
  5. package/dist/admin/{AdminFiles-kvuUaASF.js → AdminFiles-B9a7G3cY.js} +6 -8
  6. package/dist/admin/AdminFiles-B9a7G3cY.js.map +1 -0
  7. package/dist/admin/{AdminJobDashboard-CrPxp0W1.js → AdminJobDashboard-DaTwf5OY.js} +55 -186
  8. package/dist/admin/AdminJobDashboard-DaTwf5OY.js.map +1 -0
  9. package/dist/admin/{AdminJobExecutions-D-b4Zt7W.js → AdminJobExecutions-B9cek5dl.js} +132 -168
  10. package/dist/admin/AdminJobExecutions-B9cek5dl.js.map +1 -0
  11. package/dist/admin/{AdminJobRegistry-CNX5cpDx.js → AdminJobRegistry-DFgV3oqx.js} +60 -83
  12. package/dist/admin/AdminJobRegistry-DFgV3oqx.js.map +1 -0
  13. package/dist/admin/AdminLayout-DHsvWxVB.js +70 -0
  14. package/dist/admin/AdminLayout-DHsvWxVB.js.map +1 -0
  15. package/dist/admin/{AdminParameters-DCGbpt2c.js → AdminParameters-DHw9ATgl.js} +53 -53
  16. package/dist/admin/AdminParameters-DHw9ATgl.js.map +1 -0
  17. package/dist/admin/{AdminSessions-DyhW6RZv.js → AdminSessions-BhGJPI3z.js} +11 -18
  18. package/dist/admin/AdminSessions-BhGJPI3z.js.map +1 -0
  19. package/dist/admin/{AdminUserLayout-CrBj4UuI.js → AdminUserLayout-BdC4Te8m.js} +112 -151
  20. package/dist/admin/AdminUserLayout-BdC4Te8m.js.map +1 -0
  21. package/dist/admin/AdminUserProfile-DAt23fqY.js +69 -0
  22. package/dist/admin/AdminUserProfile-DAt23fqY.js.map +1 -0
  23. package/dist/admin/AdminUserSessions-1uzcx02z.js +109 -0
  24. package/dist/admin/AdminUserSessions-1uzcx02z.js.map +1 -0
  25. package/dist/admin/AdminUsers-C85c3eiQ.js +121 -0
  26. package/dist/admin/AdminUsers-C85c3eiQ.js.map +1 -0
  27. package/dist/{auth/AuthLayout-CdJcrPs4.js → admin/AuthLayout-DFJvCvzw.js} +3 -3
  28. package/dist/{auth/AuthLayout-CdJcrPs4.js.map → admin/AuthLayout-DFJvCvzw.js.map} +1 -1
  29. package/dist/{auth/IconGoogle-Bm18QD2q.js → admin/IconGoogle-CSQLPYwX.js} +1 -1
  30. package/dist/{auth/IconGoogle-Bm18QD2q.js.map → admin/IconGoogle-CSQLPYwX.js.map} +1 -1
  31. package/dist/{demo/DemoLogin-DjJ9314c.js → admin/Login-BGheURrg.js} +15 -129
  32. package/dist/{auth/Login-BS_FYTy0.js.map → admin/Login-BGheURrg.js.map} +1 -1
  33. package/dist/{auth/Profile-CjDsW378.js → admin/Profile-B-c9pCPf.js} +5 -5
  34. package/dist/{auth/Profile-CjDsW378.js.map → admin/Profile-B-c9pCPf.js.map} +1 -1
  35. package/dist/{demo/DemoRegister-DzkJ5M83.js → admin/Register-Cs10l8vX.js} +20 -146
  36. package/dist/{auth/Register-C5eqzAaD.js.map → admin/Register-Cs10l8vX.js.map} +1 -1
  37. package/dist/{demo/DemoResetPassword-DWh4_BpQ.js → admin/ResetPassword-BwDdfkGH.js} +20 -82
  38. package/dist/{auth/ResetPassword-XifinVao.js.map → admin/ResetPassword-BwDdfkGH.js.map} +1 -1
  39. package/dist/{demo/DemoVerifyEmail-DbU_tCj8.js → admin/VerifyEmail-DfXHAiQl.js} +15 -32
  40. package/dist/{auth/VerifyEmail-DTgbeJOO.js.map → admin/VerifyEmail-DfXHAiQl.js.map} +1 -1
  41. package/dist/admin/auth-Dr0Cf8I7.js +319 -0
  42. package/dist/admin/auth-Dr0Cf8I7.js.map +1 -0
  43. package/dist/admin/core-2xoLiT0o.js +4031 -0
  44. package/dist/admin/core-2xoLiT0o.js.map +1 -0
  45. package/dist/admin/index.d.ts +739 -13
  46. package/dist/admin/index.d.ts.map +1 -1
  47. package/dist/admin/index.js +79 -111
  48. package/dist/admin/index.js.map +1 -1
  49. package/dist/admin/rolldown-runtime-CjeV3_4I.js +18 -0
  50. package/dist/auth/AuthLayout-CAE1pX9s.js +22 -0
  51. package/dist/auth/AuthLayout-CAE1pX9s.js.map +1 -0
  52. package/dist/auth/{Login-BS_FYTy0.js → Login-Denw_UGy.js} +8 -8
  53. package/dist/auth/Login-Denw_UGy.js.map +1 -0
  54. package/dist/auth/Profile-BMX_Ar_s.js +155 -0
  55. package/dist/auth/Profile-BMX_Ar_s.js.map +1 -0
  56. package/dist/auth/{Register-C5eqzAaD.js → Register-6hi_cpfF.js} +8 -8
  57. package/dist/auth/Register-6hi_cpfF.js.map +1 -0
  58. package/dist/auth/{ResetPassword-XifinVao.js → ResetPassword-CqfTk1FI.js} +6 -6
  59. package/dist/auth/ResetPassword-CqfTk1FI.js.map +1 -0
  60. package/dist/auth/{VerifyEmail-DTgbeJOO.js → VerifyEmail-nWiSTMjF.js} +5 -5
  61. package/dist/auth/VerifyEmail-nWiSTMjF.js.map +1 -0
  62. package/dist/auth/core-niW0sFLv.js +2264 -0
  63. package/dist/auth/core-niW0sFLv.js.map +1 -0
  64. package/dist/auth/index.d.ts +336 -8
  65. package/dist/auth/index.d.ts.map +1 -1
  66. package/dist/auth/index.js +18 -22
  67. package/dist/auth/index.js.map +1 -1
  68. package/dist/core/index.d.ts +1033 -843
  69. package/dist/core/index.d.ts.map +1 -1
  70. package/dist/core/index.js +1626 -1354
  71. package/dist/core/index.js.map +1 -1
  72. package/dist/demo/AuthLayout-jLa0aKsI.js +22 -0
  73. package/dist/demo/AuthLayout-jLa0aKsI.js.map +1 -0
  74. package/dist/demo/DemoButton-BmaWZVwf.js +178 -0
  75. package/dist/demo/DemoButton-BmaWZVwf.js.map +1 -0
  76. package/dist/demo/{DemoDataTable-lnBKWBf8.js → DemoDataTable-Z9xyV221.js} +18 -18
  77. package/dist/demo/DemoDataTable-Z9xyV221.js.map +1 -0
  78. package/dist/demo/DemoDialog-4ItHLf9t.js +101 -0
  79. package/dist/demo/DemoDialog-4ItHLf9t.js.map +1 -0
  80. package/dist/demo/DemoFlex-EtVq8QfX.js +105 -0
  81. package/dist/demo/DemoFlex-EtVq8QfX.js.map +1 -0
  82. package/dist/demo/DemoHeading-BS-vGfkI.js +18 -0
  83. package/dist/demo/DemoHeading-BS-vGfkI.js.map +1 -0
  84. package/dist/demo/{DemoHome-CUMZsYaH.js → DemoHome-Clbn8AmS.js} +9 -12
  85. package/dist/demo/DemoHome-Clbn8AmS.js.map +1 -0
  86. package/dist/demo/DemoJsonViewer-DkIX_ky2.js +109 -0
  87. package/dist/demo/DemoJsonViewer-DkIX_ky2.js.map +1 -0
  88. package/dist/demo/DemoLayout-C56xb5EE.js +73 -0
  89. package/dist/demo/DemoLayout-C56xb5EE.js.map +1 -0
  90. package/dist/demo/DemoLogin-BZwpicOS.js +128 -0
  91. package/dist/demo/DemoLogin-BZwpicOS.js.map +1 -0
  92. package/dist/demo/DemoRegister-C7_qc4MJ.js +140 -0
  93. package/dist/demo/DemoRegister-C7_qc4MJ.js.map +1 -0
  94. package/dist/demo/DemoResetPassword-BI1Ct4Dw.js +76 -0
  95. package/dist/demo/DemoResetPassword-BI1Ct4Dw.js.map +1 -0
  96. package/dist/demo/{DemoSidebar-C1csnGhX.js → DemoSidebar-CcBo4ltC.js} +6 -9
  97. package/dist/demo/DemoSidebar-CcBo4ltC.js.map +1 -0
  98. package/dist/demo/DemoText-CzXuUn3g.js +124 -0
  99. package/dist/demo/DemoText-CzXuUn3g.js.map +1 -0
  100. package/dist/demo/DemoToast-BgHDhWrX.js +95 -0
  101. package/dist/demo/DemoToast-BgHDhWrX.js.map +1 -0
  102. package/dist/demo/{DemoTypeForm-CWz6fJrJ.js → DemoTypeForm-DDzWoMSV.js} +4 -4
  103. package/dist/demo/{DemoTypeForm-CWz6fJrJ.js.map → DemoTypeForm-DDzWoMSV.js.map} +1 -1
  104. package/dist/demo/DemoVerifyEmail-C_Irdnov.js +30 -0
  105. package/dist/demo/DemoVerifyEmail-C_Irdnov.js.map +1 -0
  106. package/dist/demo/IconGoogle-CSQLPYwX.js +56 -0
  107. package/dist/demo/IconGoogle-CSQLPYwX.js.map +1 -0
  108. package/dist/demo/Login-hSOU3jZc.js +219 -0
  109. package/dist/demo/Login-hSOU3jZc.js.map +1 -0
  110. package/dist/demo/Profile-CWqti7FB.js +155 -0
  111. package/dist/demo/Profile-CWqti7FB.js.map +1 -0
  112. package/dist/demo/Register-a70LPgs2.js +375 -0
  113. package/dist/demo/Register-a70LPgs2.js.map +1 -0
  114. package/dist/demo/ResetPassword-DWN0lzr5.js +286 -0
  115. package/dist/demo/ResetPassword-DWN0lzr5.js.map +1 -0
  116. package/dist/demo/Showcase-Dq3MISpd.js +232 -0
  117. package/dist/demo/Showcase-Dq3MISpd.js.map +1 -0
  118. package/dist/demo/VerifyEmail-DZWL72K4.js +135 -0
  119. package/dist/demo/VerifyEmail-DZWL72K4.js.map +1 -0
  120. package/dist/demo/auth-d6n3xbug.js +257 -0
  121. package/dist/demo/auth-d6n3xbug.js.map +1 -0
  122. package/dist/demo/core-RCUw1Q-a.js +4217 -0
  123. package/dist/demo/core-RCUw1Q-a.js.map +1 -0
  124. package/dist/demo/index.d.ts +17 -6
  125. package/dist/demo/index.d.ts.map +1 -1
  126. package/dist/demo/index.js +92 -24
  127. package/dist/demo/index.js.map +1 -1
  128. package/dist/demo/rolldown-runtime-CjeV3_4I.js +18 -0
  129. package/package.json +16 -20
  130. package/src/admin/AdminRouter.ts +10 -39
  131. package/src/admin/components/AdminLayout.tsx +42 -10
  132. package/src/admin/components/audits/AdminAudits.tsx +10 -64
  133. package/src/admin/components/files/AdminFiles.tsx +2 -3
  134. package/src/admin/components/jobs/AdminJobDashboard.tsx +36 -142
  135. package/src/admin/components/jobs/AdminJobExecutions.tsx +117 -175
  136. package/src/admin/components/jobs/AdminJobRegistry.tsx +58 -73
  137. package/src/admin/components/keys/AdminApiKeys.tsx +21 -169
  138. package/src/admin/components/parameters/AdminParameters.tsx +4 -4
  139. package/src/admin/components/parameters/ParameterEmptyState.tsx +1 -2
  140. package/src/admin/components/parameters/ParameterHistory.tsx +3 -3
  141. package/src/admin/components/parameters/ParameterTree.tsx +2 -8
  142. package/src/admin/components/parameters/types.ts +3 -3
  143. package/src/admin/components/sessions/AdminSessions.tsx +8 -16
  144. package/src/admin/components/users/AdminUserLayout.tsx +113 -150
  145. package/src/admin/components/users/AdminUserProfile.tsx +50 -0
  146. package/src/admin/components/users/AdminUserSessions.tsx +106 -126
  147. package/src/admin/components/users/AdminUsers.tsx +46 -62
  148. package/src/admin/index.ts +0 -4
  149. package/src/auth/components/buttons/UserButton.tsx +1 -1
  150. package/src/auth/index.ts +0 -4
  151. package/src/core/UiRouter.ts +1 -1
  152. package/src/core/atoms/alephaSidebarAtom.ts +7 -31
  153. package/src/core/components/{layout/AlephaMantineProvider.tsx → AlephaMantineProvider.tsx} +3 -4
  154. package/src/core/components/Flex.tsx +63 -0
  155. package/src/core/components/Heading.tsx +19 -0
  156. package/src/core/components/Text.tsx +140 -0
  157. package/src/core/components/buttons/ActionButton.tsx +12 -1
  158. package/src/core/components/buttons/BurgerButton.tsx +3 -3
  159. package/src/core/components/buttons/LanguageButton.tsx +1 -1
  160. package/src/core/components/buttons/ToggleSidebarButton.tsx +1 -4
  161. package/src/core/components/data/DetailDrawer.tsx +144 -0
  162. package/src/core/components/data/DetailList.tsx +64 -0
  163. package/src/core/components/data/StatCards.tsx +50 -0
  164. package/src/core/components/layout/AppBar.tsx +11 -10
  165. package/src/core/components/layout/Breadcrumb.tsx +8 -8
  166. package/src/core/components/layout/Container.tsx +15 -0
  167. package/src/core/components/layout/DashboardShell.tsx +23 -238
  168. package/src/core/components/layout/Omnibar.tsx +1 -2
  169. package/src/core/components/layout/Sidebar.tsx +103 -71
  170. package/src/core/components/layout/index.ts +65 -0
  171. package/src/core/{components/form → form/components}/Control.tsx +32 -14
  172. package/src/core/{components/form → form/components}/ControlArray.tsx +2 -5
  173. package/src/core/{components/form → form/components}/ControlDate.tsx +1 -4
  174. package/src/core/{components/form → form/components}/ControlNumber.tsx +1 -4
  175. package/src/core/{components/form → form/components}/ControlObject.tsx +1 -4
  176. package/src/core/{components/form → form/components}/ControlQueryBuilder.tsx +7 -7
  177. package/src/core/{components/form → form/components}/ControlSelect.tsx +2 -4
  178. package/src/core/{components/form → form/components}/TypeForm.browser.spec.tsx +22 -64
  179. package/src/core/{components/form → form/components}/TypeForm.tsx +1 -3
  180. package/src/core/form/factories/dialogForm.tsx +31 -0
  181. package/src/core/form/index.ts +23 -0
  182. package/src/core/{utils → form/utils}/parseInput.ts +2 -4
  183. package/src/core/index.ts +43 -51
  184. package/src/core/interfaces/AlephaIntent.ts +6 -0
  185. package/src/core/interfaces/AlephaTheme.ts +0 -1
  186. package/src/core/json/factories/dialogJson.tsx +24 -0
  187. package/src/core/json/index.ts +2 -0
  188. package/src/core/primitives/$ui.ts +17 -0
  189. package/src/core/services/DialogService.tsx +1 -48
  190. package/src/core/styles.css +1 -8
  191. package/src/core/{components/table → table/components}/ColumnPicker.tsx +2 -3
  192. package/src/core/{components/table → table/components}/DataTable.tsx +8 -9
  193. package/src/core/{components/table → table/components}/DataTableFilters.tsx +6 -3
  194. package/src/core/{components/table → table/components}/DataTableToolbar.tsx +4 -5
  195. package/src/core/{components/table → table/components}/FilterPicker.tsx +2 -3
  196. package/src/core/table/index.ts +12 -0
  197. package/src/core/{components/table → table/interfaces}/types.ts +2 -2
  198. package/src/demo/DemoRouter.ts +87 -6
  199. package/src/demo/components/DemoHome.tsx +6 -10
  200. package/src/demo/components/DemoLayout.tsx +38 -8
  201. package/src/demo/components/auth/DemoLogin.tsx +1 -1
  202. package/src/demo/components/auth/DemoRegister.tsx +1 -1
  203. package/src/demo/components/auth/DemoResetPassword.tsx +1 -1
  204. package/src/demo/components/auth/DemoVerifyEmail.tsx +1 -1
  205. package/src/demo/components/core/DemoButton.tsx +160 -0
  206. package/src/demo/components/core/DemoFlex.tsx +101 -0
  207. package/src/demo/components/core/DemoHeading.tsx +13 -0
  208. package/src/demo/components/core/DemoText.tsx +110 -0
  209. package/src/demo/components/json/DemoJsonViewer.tsx +1 -1
  210. package/src/demo/components/layout/DemoDialog.tsx +103 -0
  211. package/src/demo/components/{core → layout}/DemoSidebar.tsx +0 -1
  212. package/src/demo/components/layout/DemoToast.tsx +96 -0
  213. package/src/demo/components/shared/MacWindow.tsx +149 -74
  214. package/src/demo/components/shared/Showcase.tsx +4 -8
  215. package/src/demo/index.ts +1 -4
  216. package/src/demo/primitives/$uiDemo.ts +10 -0
  217. package/dist/admin/AdminApiKeys-CF_qOO3u.js.map +0 -1
  218. package/dist/admin/AdminAudits-BQno3hZG.js.map +0 -1
  219. package/dist/admin/AdminFiles-kvuUaASF.js.map +0 -1
  220. package/dist/admin/AdminJobDashboard-CrPxp0W1.js.map +0 -1
  221. package/dist/admin/AdminJobExecutions-D-b4Zt7W.js.map +0 -1
  222. package/dist/admin/AdminJobRegistry-CNX5cpDx.js.map +0 -1
  223. package/dist/admin/AdminLayout-e-ZP5nWw.js +0 -37
  224. package/dist/admin/AdminLayout-e-ZP5nWw.js.map +0 -1
  225. package/dist/admin/AdminParameters-DCGbpt2c.js.map +0 -1
  226. package/dist/admin/AdminSessions-DyhW6RZv.js.map +0 -1
  227. package/dist/admin/AdminUserAudits-D1GcREEE.js +0 -177
  228. package/dist/admin/AdminUserAudits-D1GcREEE.js.map +0 -1
  229. package/dist/admin/AdminUserCreate-DR8LA0tv.js +0 -104
  230. package/dist/admin/AdminUserCreate-DR8LA0tv.js.map +0 -1
  231. package/dist/admin/AdminUserDetails-CDkZNHQD.js +0 -477
  232. package/dist/admin/AdminUserDetails-CDkZNHQD.js.map +0 -1
  233. package/dist/admin/AdminUserLayout-CrBj4UuI.js.map +0 -1
  234. package/dist/admin/AdminUserSessions-srgFHrqy.js +0 -129
  235. package/dist/admin/AdminUserSessions-srgFHrqy.js.map +0 -1
  236. package/dist/admin/AdminUserSettings-BFuxl-xT.js +0 -167
  237. package/dist/admin/AdminUserSettings-BFuxl-xT.js.map +0 -1
  238. package/dist/admin/AdminUsers-D1pDpiwK.js +0 -118
  239. package/dist/admin/AdminUsers-D1pDpiwK.js.map +0 -1
  240. package/dist/demo/DemoDataTable-lnBKWBf8.js.map +0 -1
  241. package/dist/demo/DemoHome-CUMZsYaH.js.map +0 -1
  242. package/dist/demo/DemoJsonViewer-_uokbGaW.js +0 -429
  243. package/dist/demo/DemoJsonViewer-_uokbGaW.js.map +0 -1
  244. package/dist/demo/DemoLayout-DHVoacE6.js +0 -46
  245. package/dist/demo/DemoLayout-DHVoacE6.js.map +0 -1
  246. package/dist/demo/DemoLogin-DjJ9314c.js.map +0 -1
  247. package/dist/demo/DemoRegister-DzkJ5M83.js.map +0 -1
  248. package/dist/demo/DemoResetPassword-DWh4_BpQ.js.map +0 -1
  249. package/dist/demo/DemoSidebar-C1csnGhX.js.map +0 -1
  250. package/dist/demo/DemoVerifyEmail-DbU_tCj8.js.map +0 -1
  251. package/dist/demo/Showcase-BzoXNlCn.js +0 -185
  252. package/dist/demo/Showcase-BzoXNlCn.js.map +0 -1
  253. package/dist/json/index.d.ts +0 -57
  254. package/dist/json/index.d.ts.map +0 -1
  255. package/dist/json/index.js +0 -325
  256. package/dist/json/index.js.map +0 -1
  257. package/src/admin/components/users/AdminUserAudits.tsx +0 -184
  258. package/src/admin/components/users/AdminUserCreate.tsx +0 -85
  259. package/src/admin/components/users/AdminUserDetails.tsx +0 -431
  260. package/src/admin/components/users/AdminUserSettings.tsx +0 -171
  261. package/src/core/components/data/ErrorViewer.tsx +0 -171
  262. package/src/json/extensions/DialogService.tsx +0 -31
  263. package/src/json/index.ts +0 -18
  264. package/src/json/styles.css +0 -1
  265. /package/dist/{demo → auth}/IconGoogle-Ch1m3Uzl.js +0 -0
  266. /package/dist/{demo → auth}/IconGoogle-Ch1m3Uzl.js.map +0 -0
  267. /package/src/{json → core/json}/components/JsonViewer.css +0 -0
  268. /package/src/{json → core/json}/components/JsonViewer.tsx +0 -0
  269. /package/src/core/{components/table → table/components}/DataTablePagination.tsx +0 -0
  270. /package/src/core/{components/table → table/components}/useTableSelection.ts +0 -0
@@ -3,28 +3,17 @@ import {
3
3
  ClipboardButton,
4
4
  DataTable,
5
5
  Flex,
6
+ StatCards,
6
7
  Text,
7
8
  useDialog,
8
9
  useToast,
9
10
  } from "@alepha/ui";
11
+ import { Badge, Code, Tooltip } from "@mantine/core";
10
12
  import {
11
- ActionIcon,
12
- Badge,
13
- Code,
14
- Paper,
15
- RingProgress,
16
- SimpleGrid,
17
- ThemeIcon,
18
- Tooltip,
19
- } from "@mantine/core";
20
- import {
21
- IconCalendarOff,
22
13
  IconCheck,
23
14
  IconClock,
24
15
  IconKey,
25
16
  IconNetwork,
26
- IconShieldCheck,
27
- IconShieldOff,
28
17
  IconTrash,
29
18
  IconUser,
30
19
  } from "@tabler/icons-react";
@@ -76,127 +65,10 @@ const getKeyStatus = (
76
65
  return "active";
77
66
  };
78
67
 
79
- const getStatusColor = (status: "active" | "revoked" | "expired") => {
80
- switch (status) {
81
- case "active":
82
- return "teal";
83
- case "revoked":
84
- return "red";
85
- case "expired":
86
- return "orange";
87
- }
88
- };
89
-
90
- const getStatusIcon = (status: "active" | "revoked" | "expired") => {
91
- switch (status) {
92
- case "active":
93
- return <IconShieldCheck size={14} />;
94
- case "revoked":
95
- return <IconShieldOff size={14} />;
96
- case "expired":
97
- return <IconCalendarOff size={14} />;
98
- }
99
- };
100
-
101
68
  const formatKeyPreview = (prefix: string, suffix: string) => {
102
69
  return `${prefix}...${suffix}`;
103
70
  };
104
71
 
105
- // ─────────────────────────────────────────────────────────────────────────────
106
- // Stats Cards
107
- // ─────────────────────────────────────────────────────────────────────────────
108
-
109
- interface StatsCardsProps {
110
- stats: KeyStats;
111
- loading: boolean;
112
- }
113
-
114
- const StatsCards = ({ stats, loading }: StatsCardsProps) => {
115
- const activePercentage =
116
- stats.total > 0 ? Math.round((stats.active / stats.total) * 100) : 0;
117
-
118
- return (
119
- <SimpleGrid cols={{ base: 2, sm: 4 }} spacing="md">
120
- <Paper p="md" radius="md" withBorder>
121
- <Flex justify="space-between">
122
- <Flex>
123
- <Text size="xs" c="dimmed" tt="uppercase" fw={600}>
124
- Total Keys
125
- </Text>
126
- <Text size="xl" fw={700} ff="monospace">
127
- {stats.total}
128
- </Text>
129
- </Flex>
130
- <ThemeIcon size="lg" radius="md" variant="light" color="blue">
131
- <IconKey size={20} />
132
- </ThemeIcon>
133
- </Flex>
134
- </Paper>
135
-
136
- <Paper p="md" radius="md" withBorder>
137
- <Flex justify="space-between">
138
- <Flex>
139
- <Text size="xs" c="dimmed" tt="uppercase" fw={600}>
140
- Active
141
- </Text>
142
- <Text size="xl" fw={700} ff="monospace" c="teal">
143
- {stats.active}
144
- </Text>
145
- </Flex>
146
- <RingProgress
147
- size={48}
148
- thickness={4}
149
- roundCaps
150
- sections={[{ value: activePercentage, color: "teal" }]}
151
- />
152
- </Flex>
153
- </Paper>
154
-
155
- <Paper p="md" radius="md" withBorder>
156
- <Flex justify="space-between">
157
- <Flex>
158
- <Text size="xs" c="dimmed" tt="uppercase" fw={600}>
159
- Revoked
160
- </Text>
161
- <Text size="xl" fw={700} ff="monospace" c="red">
162
- {stats.revoked}
163
- </Text>
164
- </Flex>
165
- <ThemeIcon
166
- size="lg"
167
- radius="md"
168
- variant="light"
169
- color={stats.revoked > 0 ? "red" : "gray"}
170
- >
171
- <IconShieldOff size={20} />
172
- </ThemeIcon>
173
- </Flex>
174
- </Paper>
175
-
176
- <Paper p="md" radius="md" withBorder>
177
- <Flex justify="space-between">
178
- <Flex>
179
- <Text size="xs" c="dimmed" tt="uppercase" fw={600}>
180
- Never Used
181
- </Text>
182
- <Text size="xl" fw={700} ff="monospace" c="yellow">
183
- {stats.neverUsed}
184
- </Text>
185
- </Flex>
186
- <ThemeIcon
187
- size="lg"
188
- radius="md"
189
- variant="light"
190
- color={stats.neverUsed > 0 ? "yellow" : "gray"}
191
- >
192
- <IconClock size={20} />
193
- </ThemeIcon>
194
- </Flex>
195
- </Paper>
196
- </SimpleGrid>
197
- );
198
- };
199
-
200
72
  // ─────────────────────────────────────────────────────────────────────────────
201
73
  // Main Component
202
74
  // ─────────────────────────────────────────────────────────────────────────────
@@ -245,7 +117,6 @@ const AdminApiKeys = () => {
245
117
  [client, dialog, toast],
246
118
  );
247
119
 
248
- // Calculate stats from loaded data
249
120
  const updateStats = useCallback((keys: ApiKeyResource[]) => {
250
121
  const now = new Date();
251
122
  const newStats: KeyStats = {
@@ -276,10 +147,15 @@ const AdminApiKeys = () => {
276
147
 
277
148
  return (
278
149
  <Flex flex={1} direction="column" gap="md">
279
- {/* Stats Header */}
280
- <StatsCards stats={stats} loading={loading} />
150
+ <StatCards
151
+ items={[
152
+ { label: "Total Keys", value: stats.total, icon: IconKey },
153
+ { label: "Active", value: stats.active, icon: IconCheck },
154
+ { label: "Revoked", value: stats.revoked, icon: IconTrash },
155
+ { label: "Never Used", value: stats.neverUsed, icon: IconClock },
156
+ ]}
157
+ />
281
158
 
282
- {/* API Keys Table */}
283
159
  <DataTable<ApiKeyResource, typeof filters>
284
160
  key={refreshKey}
285
161
  submitOnInit
@@ -302,13 +178,7 @@ const AdminApiKeys = () => {
302
178
  tableTrProps={(item) => {
303
179
  const status = getKeyStatus(item);
304
180
  if (status === "revoked") {
305
- return {
306
- opacity: 0.6,
307
- style: {
308
- textDecoration: "line-through",
309
- textDecorationColor: "var(--mantine-color-red-5)",
310
- },
311
- };
181
+ return { opacity: 0.6 };
312
182
  }
313
183
  if (status === "expired") {
314
184
  return { opacity: 0.7 };
@@ -323,7 +193,6 @@ const AdminApiKeys = () => {
323
193
  },
324
194
  });
325
195
 
326
- // Update stats with all keys (need to fetch all for accurate stats)
327
196
  const allKeys = await client.findApiKeys({
328
197
  query: { includeRevoked: true, size: 100 },
329
198
  });
@@ -336,19 +205,9 @@ const AdminApiKeys = () => {
336
205
  label: "Name",
337
206
  value: (item) => (
338
207
  <Flex direction="column" gap={2}>
339
- <Flex gap="xs">
340
- <ThemeIcon
341
- size="xs"
342
- radius="sm"
343
- variant="light"
344
- color={getStatusColor(getKeyStatus(item))}
345
- >
346
- <IconKey size={10} />
347
- </ThemeIcon>
348
- <Text size="sm" fw={600}>
349
- {item.name}
350
- </Text>
351
- </Flex>
208
+ <Text size="sm" fw={600}>
209
+ {item.name}
210
+ </Text>
352
211
  {item.description && (
353
212
  <Text size="xs" c="dimmed" lineClamp={1}>
354
213
  {item.description}
@@ -385,12 +244,7 @@ const AdminApiKeys = () => {
385
244
  value: (item) => {
386
245
  const status = getKeyStatus(item);
387
246
  return (
388
- <Badge
389
- size="sm"
390
- variant="light"
391
- color={getStatusColor(status)}
392
- leftSection={getStatusIcon(status)}
393
- >
247
+ <Badge size="sm" variant="default">
394
248
  {status.toUpperCase()}
395
249
  </Badge>
396
250
  );
@@ -444,7 +298,7 @@ const AdminApiKeys = () => {
444
298
  )}
445
299
  </Flex>
446
300
  ) : (
447
- <Text size="xs" c="yellow">
301
+ <Text size="xs" c="dimmed">
448
302
  Never used
449
303
  </Text>
450
304
  )}
@@ -458,7 +312,7 @@ const AdminApiKeys = () => {
458
312
  <ActionButton
459
313
  variant="subtle"
460
314
  size="xs"
461
- href={router.path("adminUserDetails", {
315
+ href={router.path("adminUserProfile", {
462
316
  params: { userId: item.userId },
463
317
  })}
464
318
  leftSection={<IconUser size={12} />}
@@ -490,9 +344,8 @@ const AdminApiKeys = () => {
490
344
  );
491
345
  }
492
346
 
493
- const isExpired = new Date(item.expiresAt) < new Date();
494
347
  return (
495
- <Text size="xs" c={isExpired ? "orange" : "dimmed"}>
348
+ <Text size="xs" c="dimmed">
496
349
  {l(item.expiresAt, { date: "fromNow" })}
497
350
  </Text>
498
351
  );
@@ -513,14 +366,13 @@ const AdminApiKeys = () => {
513
366
 
514
367
  return (
515
368
  <Tooltip label="Revoke key">
516
- <ActionIcon
517
- size="sm"
369
+ <ActionButton
370
+ size="xs"
518
371
  variant="subtle"
519
- color="red"
520
372
  onClick={() => handleRevoke(item)}
521
373
  >
522
374
  <IconTrash size={14} />
523
- </ActionIcon>
375
+ </ActionButton>
524
376
  </Tooltip>
525
377
  );
526
378
  },
@@ -1,9 +1,9 @@
1
- import { Text, useToast } from "@alepha/ui";
2
- import { Card, Flex } from "@mantine/core";
1
+ import { Flex, Text, useToast } from "@alepha/ui";
2
+ import { Card } from "@mantine/core";
3
3
  import { IconSettings } from "@tabler/icons-react";
4
4
  import type {
5
5
  AdminParameterController,
6
- Parameter,
6
+ ParameterResponse,
7
7
  ParameterTreeNode,
8
8
  } from "alepha/api/parameters";
9
9
  import { useClient } from "alepha/react";
@@ -29,7 +29,7 @@ const AdminParameters = ({
29
29
  useState<ParameterTreeNode[]>(initialTreeData);
30
30
  const [selectedConfig, setSelectedConfig] = useState<string | null>(null);
31
31
  const [configValue, setConfigValue] = useState<ParameterValue | null>(null);
32
- const [history, setHistory] = useState<Parameter[]>([]);
32
+ const [history, setHistory] = useState<ParameterResponse[]>([]);
33
33
  const [loadingConfig, setLoadingConfig] = useState(false);
34
34
  const [loadingHistory, setLoadingHistory] = useState(false);
35
35
  const [saving, setSaving] = useState(false);
@@ -1,5 +1,4 @@
1
- import { Text } from "@alepha/ui";
2
- import { Flex } from "@mantine/core";
1
+ import { Flex, Text } from "@alepha/ui";
3
2
  import { IconArrowLeft } from "@tabler/icons-react";
4
3
 
5
4
  /**
@@ -1,13 +1,13 @@
1
1
  import { ActionButton, Flex, Text } from "@alepha/ui";
2
2
  import { Badge, Loader, ScrollArea, Timeline } from "@mantine/core";
3
3
  import { IconHistory } from "@tabler/icons-react";
4
- import type { Parameter } from "alepha/api/parameters";
4
+ import type { ParameterResponse } from "alepha/api/parameters";
5
5
  import { useI18n } from "alepha/react/i18n";
6
6
  import { getStatusColor } from "./types.ts";
7
7
 
8
8
  export interface ParameterHistoryProps {
9
9
  selectedConfig: string | null;
10
- history: Parameter[];
10
+ history: ParameterResponse[];
11
11
  loading: boolean;
12
12
  onRollback: (version: number) => void;
13
13
  }
@@ -106,7 +106,7 @@ const ParameterHistory = ({
106
106
 
107
107
  return (
108
108
  <Flex
109
- w={160}
109
+ w={220}
110
110
  h="100%"
111
111
  p="xs"
112
112
  style={{
@@ -1,11 +1,5 @@
1
- import { ActionButton, Text } from "@alepha/ui";
2
- import {
3
- Collapse,
4
- Flex,
5
- ScrollArea,
6
- TextInput,
7
- UnstyledButton,
8
- } from "@mantine/core";
1
+ import { ActionButton, Flex, Text } from "@alepha/ui";
2
+ import { Collapse, ScrollArea, TextInput, UnstyledButton } from "@mantine/core";
9
3
  import {
10
4
  IconChevronDown,
11
5
  IconChevronRight,
@@ -1,8 +1,8 @@
1
- import type { Parameter } from "alepha/api/parameters";
1
+ import type { ParameterResponse } from "alepha/api/parameters";
2
2
 
3
3
  export interface ParameterValue {
4
- current?: Parameter;
5
- next?: Parameter;
4
+ current?: ParameterResponse;
5
+ next?: ParameterResponse;
6
6
  /**
7
7
  * Default value from the registered $parameter primitive.
8
8
  */
@@ -1,5 +1,4 @@
1
1
  import { ActionButton, DataTable, Flex, Text } from "@alepha/ui";
2
- import { Badge } from "@mantine/core";
3
2
  import {
4
3
  IconDeviceDesktop,
5
4
  IconDeviceMobile,
@@ -106,7 +105,7 @@ const AdminSessions = (props: AdminSessionsProps) => {
106
105
  <ActionButton
107
106
  variant="subtle"
108
107
  size="xs"
109
- href={router.path("adminUserDetails", {
108
+ href={router.path("adminUserProfile", {
110
109
  params: { userId: item.userId },
111
110
  })}
112
111
  >
@@ -120,17 +119,11 @@ const AdminSessions = (props: AdminSessionsProps) => {
120
119
  label: "Device",
121
120
  fit: true,
122
121
  value: (item) => (
123
- <Flex gap={4}>
122
+ <Flex gap={4} align="center">
124
123
  {item.userAgent ? (
125
124
  <>
126
- <Badge
127
- size="xs"
128
- variant="light"
129
- leftSection={getDeviceIcon(item.userAgent.device)}
130
- >
131
- {item.userAgent.device}
132
- </Badge>
133
- <Text size="xs" c="dimmed">
125
+ {getDeviceIcon(item.userAgent.device)}
126
+ <Text size="xs">
134
127
  {item.userAgent.browser} / {item.userAgent.os}
135
128
  </Text>
136
129
  </>
@@ -155,13 +148,12 @@ const AdminSessions = (props: AdminSessionsProps) => {
155
148
  label: "Status",
156
149
  fit: true,
157
150
  value: (item) => (
158
- <Badge
159
- size="sm"
160
- variant="light"
161
- color={isExpired(item.expiresAt) ? "red" : "green"}
151
+ <Text
152
+ size="xs"
153
+ c={isExpired(item.expiresAt) ? "dimmed" : undefined}
162
154
  >
163
155
  {isExpired(item.expiresAt) ? "Expired" : "Active"}
164
- </Badge>
156
+ </Text>
165
157
  ),
166
158
  },
167
159
  createdAt: {