@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,4 +1,4 @@
1
- import { t as AlephaUI } from "./core-RCUw1Q-a.js";
1
+ import { t as AlephaUI } from "./core-B7LNjM78.js";
2
2
  import { $context, $module } from "alepha";
3
3
  import { IconBell, IconBinaryTree, IconBraces, IconClick, IconForms, IconHeading, IconHome, IconKey, IconLayout, IconLayoutSidebar, IconLetterT, IconLockQuestion, IconLogin, IconMailCheck, IconMessage, IconPackages, IconRowInsertBottom, IconTable, IconUserPlus, IconWall } from "@tabler/icons-react";
4
4
  import { $page } from "alepha/react/router";
@@ -9,7 +9,7 @@ var DemoRouter = class {
9
9
  icon: IconPackages,
10
10
  path: "/demo",
11
11
  label: "Demo",
12
- lazy: () => import("./DemoLayout-C56xb5EE.js"),
12
+ lazy: () => import("./DemoLayout-Cy6xjn6P.js"),
13
13
  children: () => [
14
14
  this.demoHome,
15
15
  this.demoCore,
@@ -24,7 +24,7 @@ var DemoRouter = class {
24
24
  icon: IconHome,
25
25
  path: "/",
26
26
  label: "Home",
27
- lazy: () => import("./DemoHome-Clbn8AmS.js")
27
+ lazy: () => import("./DemoHome-BSGuBHus.js")
28
28
  });
29
29
  demoCore = $page({
30
30
  icon: IconWall,
@@ -41,25 +41,25 @@ var DemoRouter = class {
41
41
  icon: IconRowInsertBottom,
42
42
  path: "/flex",
43
43
  label: "Flex",
44
- lazy: () => import("./DemoFlex-EtVq8QfX.js")
44
+ lazy: () => import("./DemoFlex-CAhLUanT.js")
45
45
  });
46
46
  demoText = $page({
47
47
  icon: IconLetterT,
48
48
  path: "/text",
49
49
  label: "Text",
50
- lazy: () => import("./DemoText-CzXuUn3g.js")
50
+ lazy: () => import("./DemoText-DU3JeRS0.js")
51
51
  });
52
52
  demoHeading = $page({
53
53
  icon: IconHeading,
54
54
  path: "/heading",
55
55
  label: "Heading",
56
- lazy: () => import("./DemoHeading-BS-vGfkI.js")
56
+ lazy: () => import("./DemoHeading-yIFmNjHB.js")
57
57
  });
58
58
  demoButton = $page({
59
59
  icon: IconClick,
60
60
  path: "/button",
61
61
  label: "Button",
62
- lazy: () => import("./DemoButton-BmaWZVwf.js")
62
+ lazy: () => import("./DemoButton-CGUyR9eM.js")
63
63
  });
64
64
  demoLayoutSection = $page({
65
65
  icon: IconLayout,
@@ -75,19 +75,19 @@ var DemoRouter = class {
75
75
  icon: IconLayoutSidebar,
76
76
  path: "/sidebar",
77
77
  label: "Sidebar",
78
- lazy: () => import("./DemoSidebar-CcBo4ltC.js")
78
+ lazy: () => import("./DemoSidebar-od7aLjP_.js")
79
79
  });
80
80
  demoDialog = $page({
81
81
  icon: IconMessage,
82
82
  path: "/dialog",
83
83
  label: "Dialog",
84
- lazy: () => import("./DemoDialog-4ItHLf9t.js")
84
+ lazy: () => import("./DemoDialog-DW8QEvD1.js")
85
85
  });
86
86
  demoToast = $page({
87
87
  icon: IconBell,
88
88
  path: "/toast",
89
89
  label: "Toast",
90
- lazy: () => import("./DemoToast-BgHDhWrX.js")
90
+ lazy: () => import("./DemoToast-CUJEiPRa.js")
91
91
  });
92
92
  demoForm = $page({
93
93
  icon: IconForms,
@@ -99,7 +99,7 @@ var DemoRouter = class {
99
99
  icon: IconForms,
100
100
  path: "/type-form",
101
101
  label: "TypeForm",
102
- lazy: () => import("./DemoTypeForm-DDzWoMSV.js")
102
+ lazy: () => import("./DemoTypeForm-C1dNkahD.js")
103
103
  });
104
104
  demoTable = $page({
105
105
  icon: IconTable,
@@ -111,7 +111,7 @@ var DemoRouter = class {
111
111
  icon: IconTable,
112
112
  path: "/data-table",
113
113
  label: "DataTable",
114
- lazy: () => import("./DemoDataTable-Z9xyV221.js")
114
+ lazy: () => import("./DemoDataTable-QFG-xXSx.js")
115
115
  });
116
116
  demoJson = $page({
117
117
  icon: IconBraces,
@@ -123,7 +123,7 @@ var DemoRouter = class {
123
123
  icon: IconBinaryTree,
124
124
  path: "/viewer",
125
125
  label: "JsonViewer",
126
- lazy: () => import("./DemoJsonViewer-DkIX_ky2.js")
126
+ lazy: () => import("./DemoJsonViewer-DsA2IpgV.js")
127
127
  });
128
128
  demoAuth = $page({
129
129
  icon: IconKey,
@@ -140,25 +140,25 @@ var DemoRouter = class {
140
140
  icon: IconLogin,
141
141
  path: "/login",
142
142
  label: "Login",
143
- lazy: () => import("./DemoLogin-BZwpicOS.js")
143
+ lazy: () => import("./DemoLogin-vqxgTu4P.js")
144
144
  });
145
145
  demoRegister = $page({
146
146
  icon: IconUserPlus,
147
147
  path: "/register",
148
148
  label: "Register",
149
- lazy: () => import("./DemoRegister-C7_qc4MJ.js")
149
+ lazy: () => import("./DemoRegister-YHPvPg77.js")
150
150
  });
151
151
  demoResetPassword = $page({
152
152
  icon: IconLockQuestion,
153
153
  path: "/reset-password",
154
154
  label: "ResetPassword",
155
- lazy: () => import("./DemoResetPassword-BI1Ct4Dw.js")
155
+ lazy: () => import("./DemoResetPassword-mOW18Zlm.js")
156
156
  });
157
157
  demoVerifyEmail = $page({
158
158
  icon: IconMailCheck,
159
159
  path: "/verify-email",
160
160
  label: "VerifyEmail",
161
- lazy: () => import("./DemoVerifyEmail-C_Irdnov.js")
161
+ lazy: () => import("./DemoVerifyEmail-D9EcXZ38.js")
162
162
  });
163
163
  };
164
164
 
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "mantine"
8
8
  ],
9
9
  "author": "Nicolas Foures",
10
- "version": "0.18.0",
10
+ "version": "0.18.2",
11
11
  "type": "module",
12
12
  "engines": {
13
13
  "node": ">=22.0.0"
@@ -40,7 +40,7 @@
40
40
  "@testing-library/dom": "^10.4.1",
41
41
  "@testing-library/react": "^16.3.2",
42
42
  "@types/react-is": "^19.2.0",
43
- "alepha": "0.18.0",
43
+ "alepha": "0.18.2",
44
44
  "react": "^19.2.4",
45
45
  "react-dom": "^19.2.4",
46
46
  "typescript": "^5.9.3",
@@ -48,7 +48,7 @@
48
48
  "vitest": "^4.0.18"
49
49
  },
50
50
  "peerDependencies": {
51
- "alepha": "0.18.0",
51
+ "alepha": "0.18.2",
52
52
  "react": "*",
53
53
  "react-dom": "*"
54
54
  },
@@ -57,7 +57,7 @@
57
57
  "lint": "alepha lint && yarn build:check",
58
58
  "typecheck": "alepha typecheck",
59
59
  "test": "alepha test",
60
- "build": "node scripts/build.ts",
60
+ "build": "node ../alepha/scripts/build.ts",
61
61
  "build:check": "node scripts/build.ts --check"
62
62
  },
63
63
  "repository": {
@@ -1,12 +1,23 @@
1
- import type { DashboardShellProps, SidebarNode } from "@alepha/ui";
2
- import { AuthRouter } from "@alepha/ui/auth";
1
+ import {
2
+ type AppBarItem,
3
+ alephaSidebarAtom,
4
+ Breadcrumbs,
5
+ type DashboardShellProps,
6
+ LanguageButton,
7
+ type SidebarNode,
8
+ ThemeButton,
9
+ } from "@alepha/ui";
10
+ import { AuthRouter, UserButton } from "@alepha/ui/auth";
3
11
  import {
4
12
  IconClock,
13
+ IconDashboard,
5
14
  IconDevices,
6
15
  IconFile,
7
16
  IconHistory,
8
17
  IconKey,
18
+ IconLayoutDashboard,
9
19
  IconListDetails,
20
+ IconLockPassword,
10
21
  IconSettings,
11
22
  IconTerminal2,
12
23
  IconUser,
@@ -25,6 +36,7 @@ import type {
25
36
  } from "alepha/api/users";
26
37
  import { ReactAuth } from "alepha/react/auth";
27
38
  import { $page, ReactRouter, Redirection } from "alepha/react/router";
39
+ import { $cookie } from "alepha/server/cookies";
28
40
  import { $client } from "alepha/server/links";
29
41
 
30
42
  export class AdminRouter {
@@ -40,31 +52,90 @@ export class AdminRouter {
40
52
  protected readonly jobCtrl = $client<AdminJobController>();
41
53
  protected readonly apiKeyCtrl = $client<AdminApiKeyController>();
42
54
 
55
+ public readonly adminCookie = $cookie(alephaSidebarAtom, {
56
+ name: "admin.sidebar",
57
+ });
58
+
43
59
  public configFn?: (adminRouter: AdminRouter) => DashboardShellProps = () => {
44
60
  return {
45
61
  sidebarProps: {
46
62
  items: this.getDefaultSidebarItems(),
47
63
  },
64
+ appBarProps: {
65
+ items: this.getDefaultAppBarItems(),
66
+ },
48
67
  };
49
68
  };
50
69
 
70
+ public getDefaultAppBarItems(): AppBarItem[] {
71
+ return [
72
+ {
73
+ type: "burger",
74
+ position: "left",
75
+ },
76
+ {
77
+ element: <Breadcrumbs />,
78
+ position: "left",
79
+ },
80
+ {
81
+ element: <UserButton />,
82
+ position: "right",
83
+ },
84
+ {
85
+ element: <ThemeButton expert />,
86
+ position: "right",
87
+ },
88
+ {
89
+ element: <LanguageButton />,
90
+ position: "right",
91
+ },
92
+ {
93
+ type: "dark",
94
+ position: "right",
95
+ },
96
+ ];
97
+ }
98
+
51
99
  public getDefaultSidebarItems(): SidebarNode[] {
52
100
  return [
101
+ {
102
+ position: "top",
103
+ type: "search",
104
+ },
105
+ {
106
+ position: "top",
107
+ type: "spacer",
108
+ },
109
+ {
110
+ label: "Dashboard",
111
+ href: "/admin",
112
+ icon: IconLayoutDashboard,
113
+ },
53
114
  {
54
115
  type: "section",
55
- label: "Identity",
116
+ label: "Security",
56
117
  children: [
57
118
  {
58
- ...this.router.node(this.adminUsers.name),
59
- can: () => this.userCtrl.findUsers.can(),
60
- },
61
- {
62
- ...this.router.node(this.adminSessions.name),
63
- can: () => this.sessionCtrl.findSessions.can(),
119
+ label: "Identity",
120
+ icon: IconLockPassword,
121
+ children: [
122
+ {
123
+ ...this.router.node(this.adminUsers.name),
124
+ can: () => this.userCtrl.findUsers.can(),
125
+ },
126
+ {
127
+ ...this.router.node(this.adminSessions.name),
128
+ can: () => this.sessionCtrl.findSessions.can(),
129
+ },
130
+ {
131
+ ...this.router.node(this.adminApiKeys.name),
132
+ can: () => this.apiKeyCtrl.findApiKeys.can(),
133
+ },
134
+ ],
64
135
  },
65
136
  {
66
- ...this.router.node(this.adminApiKeys.name),
67
- can: () => this.apiKeyCtrl.findApiKeys.can(),
137
+ ...this.router.node(this.adminAudits.name),
138
+ can: () => this.auditCtrl.findAudits.can(),
68
139
  },
69
140
  ],
70
141
  },
@@ -77,9 +148,8 @@ export class AdminRouter {
77
148
  can: () => this.fileCtrl.findFiles.can(),
78
149
  },
79
150
  {
80
- ...this.router.node(this.adminJobDashboard.name),
81
- href: undefined,
82
- can: () => this.jobCtrl.getJobRegistry.can(),
151
+ label: "Jobs",
152
+ icon: IconTerminal2,
83
153
  children: [
84
154
  {
85
155
  ...this.router.node(this.adminJobDashboard.name),
@@ -89,10 +159,6 @@ export class AdminRouter {
89
159
  { ...this.router.node(this.adminJobExecutions.name) },
90
160
  ],
91
161
  },
92
- {
93
- ...this.router.node(this.adminAudits.name),
94
- can: () => this.auditCtrl.findAudits.can(),
95
- },
96
162
  {
97
163
  ...this.router.node(this.adminParameters.name),
98
164
  can: () => this.paramCtrl.getParameterTree.can(),
@@ -126,6 +192,10 @@ export class AdminRouter {
126
192
  public readonly adminLayout = $page({
127
193
  path: "/admin",
128
194
  label: "Admin",
195
+ head: {
196
+ title: "Admin Panel",
197
+ titleSeparator: " | ",
198
+ },
129
199
  lazy: () => import("./components/AdminLayout.tsx"),
130
200
  props: () => ({
131
201
  adminShellProps: this.adminShellProps(),
@@ -138,6 +208,18 @@ export class AdminRouter {
138
208
  },
139
209
  });
140
210
 
211
+ // ─────────────────────────────────────────────────────────────────────────────
212
+ // Dashboard
213
+ // ─────────────────────────────────────────────────────────────────────────────
214
+
215
+ public readonly adminDashboard = $page({
216
+ icon: IconLayoutDashboard,
217
+ parent: this.adminLayout,
218
+ path: "/",
219
+ label: "Dashboard",
220
+ lazy: () => import("./components/AdminDashboard.tsx"),
221
+ });
222
+
141
223
  // ─────────────────────────────────────────────────────────────────────────────
142
224
  // Users
143
225
  // ─────────────────────────────────────────────────────────────────────────────
@@ -147,6 +229,9 @@ export class AdminRouter {
147
229
  parent: this.adminLayout,
148
230
  path: "/users",
149
231
  label: "Users",
232
+ head: {
233
+ title: "Users",
234
+ },
150
235
  description: "Manage application users and their roles.",
151
236
  lazy: () => import("./components/users/AdminUsers.tsx"),
152
237
  can: () => this.userCtrl.findUsers.can(),
@@ -155,6 +240,9 @@ export class AdminRouter {
155
240
  public readonly adminUserLayout = $page({
156
241
  parent: this.adminLayout,
157
242
  path: "/users/:userId",
243
+ head: {
244
+ title: "Users",
245
+ },
158
246
  lazy: () => import("./components/users/AdminUserLayout.tsx"),
159
247
  });
160
248
 
@@ -163,6 +251,9 @@ export class AdminRouter {
163
251
  parent: this.adminUserLayout,
164
252
  path: "/",
165
253
  label: "Profile",
254
+ head: {
255
+ title: "User Profile",
256
+ },
166
257
  lazy: () => import("./components/users/AdminUserProfile.tsx"),
167
258
  });
168
259
 
@@ -171,6 +262,9 @@ export class AdminRouter {
171
262
  parent: this.adminUserLayout,
172
263
  path: "/sessions",
173
264
  label: "Sessions",
265
+ head: {
266
+ title: "User Sessions",
267
+ },
174
268
  lazy: () => import("./components/users/AdminUserSessions.tsx"),
175
269
  });
176
270
 
@@ -183,6 +277,9 @@ export class AdminRouter {
183
277
  parent: this.adminLayout,
184
278
  path: "/audits",
185
279
  label: "Audit Log",
280
+ head: {
281
+ title: "Audit Logs",
282
+ },
186
283
  description: "View system-wide audit trail and activity logs.",
187
284
  lazy: () => import("./components/audits/AdminAudits.tsx"),
188
285
  can: () => this.auditCtrl.findAudits.can(),
@@ -198,6 +295,9 @@ export class AdminRouter {
198
295
  path: "/sessions",
199
296
  label: "Sessions",
200
297
  description: "View and manage all active sessions.",
298
+ head: {
299
+ title: "Sessions",
300
+ },
201
301
  lazy: () => import("./components/sessions/AdminSessions.tsx"),
202
302
  can: () => this.sessionCtrl.findSessions.can(),
203
303
  });
@@ -212,6 +312,9 @@ export class AdminRouter {
212
312
  path: "/files",
213
313
  label: "Files",
214
314
  description: "Manage uploaded files and storage.",
315
+ head: {
316
+ title: "Files",
317
+ },
215
318
  lazy: () => import("./components/files/AdminFiles.tsx"),
216
319
  can: () => this.fileCtrl.findFiles.can(),
217
320
  });
@@ -228,6 +331,9 @@ export class AdminRouter {
228
331
  description: "View and manage application parameters.",
229
332
  lazy: () => import("./components/parameters/AdminParameters.tsx"),
230
333
  can: () => this.paramCtrl.getParameterTree.can(),
334
+ head: {
335
+ title: "Parameters",
336
+ },
231
337
  loader: async () => {
232
338
  const treeData = await this.paramCtrl.getParameterTree({});
233
339
  return { treeData };
@@ -239,7 +345,7 @@ export class AdminRouter {
239
345
  // ─────────────────────────────────────────────────────────────────────────────
240
346
 
241
347
  public readonly adminJobDashboard = $page({
242
- icon: IconTerminal2,
348
+ icon: IconDashboard,
243
349
  parent: this.adminLayout,
244
350
  path: "/jobs",
245
351
  label: "Jobs",
@@ -277,6 +383,9 @@ export class AdminRouter {
277
383
  parent: this.adminLayout,
278
384
  path: "/api-keys",
279
385
  label: "API Keys",
386
+ head: {
387
+ title: "API Keys",
388
+ },
280
389
  description: "View and manage API keys for programmatic access.",
281
390
  lazy: () => import("./components/keys/AdminApiKeys.tsx"),
282
391
  can: () => this.apiKeyCtrl.findApiKeys.can(),
@@ -0,0 +1,52 @@
1
+ import { Flex, Text } from "@alepha/ui";
2
+ import { useAuth } from "alepha/react/auth";
3
+
4
+ // ─────────────────────────────────────────────────────────────────────────────
5
+
6
+ const AdminDashboard = () => {
7
+ const auth = useAuth();
8
+
9
+ return (
10
+ <Flex elevated fill col pos="relative" style={{ overflow: "hidden" }}>
11
+ <Flex
12
+ bg="yellow"
13
+ style={{
14
+ position: "absolute",
15
+ top: 0,
16
+ left: 0,
17
+ width: 256,
18
+ height: 256,
19
+ borderRadius: "50%",
20
+ transform: "translate(-50%, -50%)",
21
+ pointerEvents: "none",
22
+ }}
23
+ />
24
+
25
+ {/* Header */}
26
+ <Flex gap={4} p={128} pb="xl" style={{ zIndex: 1 }}>
27
+ <Flex col pos={"relative"}>
28
+ <Text muted bold small uppercase>
29
+ Account Home
30
+ </Text>
31
+ <Text
32
+ top={10}
33
+ pos={"absolute"}
34
+ left={-20}
35
+ fz={42}
36
+ c={"yellow"}
37
+ style={{ transform: "rotate(-15deg)" }}
38
+ >
39
+ !
40
+ </Text>
41
+ <Text fz={36}>Hello, {auth.user?.name ?? "Admin"}</Text>
42
+ <Text muted>
43
+ This is your admin dashboard. You can manage resources from the
44
+ sidebar menu.
45
+ </Text>
46
+ </Flex>
47
+ </Flex>
48
+ </Flex>
49
+ );
50
+ };
51
+
52
+ export default AdminDashboard;
@@ -1,15 +1,13 @@
1
1
  import {
2
2
  ActionButton,
3
3
  AlephaMantineProvider,
4
- Breadcrumbs,
5
4
  DashboardShell,
6
5
  type DashboardShellProps,
7
- LanguageButton,
8
6
  SidebarCollapseButton,
9
- ThemeButton,
7
+ Text,
8
+ ui,
10
9
  } from "@alepha/ui";
11
- import { UserButton } from "@alepha/ui/auth";
12
- import { Flex } from "@mantine/core";
10
+ import { Flex, Image } from "@mantine/core";
13
11
  import { IconArrowLeft } from "@tabler/icons-react";
14
12
 
15
13
  export interface AdminLayoutProps {
@@ -33,45 +31,39 @@ const AdminLayout = (props: AdminLayoutProps) => {
33
31
  >
34
32
  <DashboardShell
35
33
  layout={"alt"}
36
- navbarHeader={
37
- <Flex px={"lg"} align={"center"} justify={"center"}>
38
- <ActionButton variant={"subtle"} icon={IconArrowLeft} href={"/"} />
34
+ navbarHeader={(props) => (
35
+ <Flex gap={"md"} flex={1} px={"lg"} align={"center"}>
36
+ <ActionButton
37
+ href={"/"}
38
+ variant={"default"}
39
+ bd={0}
40
+ icon={IconArrowLeft}
41
+ />
42
+ {!props.collapsed && (
43
+ <>
44
+ <Image pt={4} src={"/favicon.svg"} h={36} w={36} />
45
+ <Flex direction={"column"}>
46
+ <Text bold>Blog</Text>
47
+ <Text small muted mt={-4}>
48
+ Admin Panel
49
+ </Text>
50
+ </Flex>
51
+ </>
52
+ )}
39
53
  </Flex>
40
- }
41
- footerHeight={50}
54
+ )}
55
+ footerHeight={48}
42
56
  navbarFooter={
43
- <Flex flex={1} px={"lg"} gap={"md"} align={"center"}>
44
- <SidebarCollapseButton />
57
+ <Flex flex={1} px={"lg"} align={"center"}>
58
+ <SidebarCollapseButton
59
+ c={"gray"}
60
+ size={"xs"}
61
+ iconSize={ui.sizes.icon.sm}
62
+ p={8}
63
+ bd={0}
64
+ />
45
65
  </Flex>
46
66
  }
47
- appBarProps={{
48
- items: [
49
- {
50
- type: "burger",
51
- position: "left",
52
- },
53
- {
54
- element: <Breadcrumbs />,
55
- position: "left",
56
- },
57
- {
58
- element: <UserButton />,
59
- position: "right",
60
- },
61
- {
62
- element: <ThemeButton />,
63
- position: "right",
64
- },
65
- {
66
- element: <LanguageButton />,
67
- position: "right",
68
- },
69
- {
70
- type: "dark",
71
- position: "right",
72
- },
73
- ],
74
- }}
75
67
  sidebarProps={{
76
68
  autoPopulateMenu: {
77
69
  startsWith: "/admin",