@alepha/ui 0.18.2 → 0.19.0

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 (257) hide show
  1. package/dist/admin/{AdminApiKeys-BJhIwfD6.js → AdminApiKeys-Bt1PjO6o.js} +3 -4
  2. package/dist/admin/{AdminApiKeys-BJhIwfD6.js.map → AdminApiKeys-Bt1PjO6o.js.map} +1 -1
  3. package/dist/admin/{AdminAudits-DzD_4cDt.js → AdminAudits-C7c1CN4c.js} +3 -4
  4. package/dist/admin/{AdminAudits-DzD_4cDt.js.map → AdminAudits-C7c1CN4c.js.map} +1 -1
  5. package/dist/admin/{AdminDashboard-C92tIc6x.js → AdminDashboard-C3RXpTp6.js} +3 -4
  6. package/dist/admin/{AdminDashboard-C92tIc6x.js.map → AdminDashboard-C3RXpTp6.js.map} +1 -1
  7. package/dist/admin/{AdminFiles-DLpfhBkf.js → AdminFiles-31ivR6Wq.js} +3 -4
  8. package/dist/admin/{AdminFiles-DLpfhBkf.js.map → AdminFiles-31ivR6Wq.js.map} +1 -1
  9. package/dist/admin/{AdminJobDashboard-KIOkeMgE.js → AdminJobDashboard-BABLe7hL.js} +73 -25
  10. package/dist/admin/AdminJobDashboard-BABLe7hL.js.map +1 -0
  11. package/dist/admin/{AdminJobExecutions-D0Yo_PU0.js → AdminJobExecutions-D-G8RIlr.js} +3 -4
  12. package/dist/admin/{AdminJobExecutions-D0Yo_PU0.js.map → AdminJobExecutions-D-G8RIlr.js.map} +1 -1
  13. package/dist/admin/{AdminJobRegistry-PFajqaGK.js → AdminJobRegistry-oIS3K9NX.js} +3 -4
  14. package/dist/admin/{AdminJobRegistry-PFajqaGK.js.map → AdminJobRegistry-oIS3K9NX.js.map} +1 -1
  15. package/dist/admin/{AdminLayout-B1DXZHDn.js → AdminLayout-BmZ9mtXh.js} +8 -25
  16. package/dist/admin/AdminLayout-BmZ9mtXh.js.map +1 -0
  17. package/dist/admin/AdminNotifications-DHdzksww.js +541 -0
  18. package/dist/admin/AdminNotifications-DHdzksww.js.map +1 -0
  19. package/dist/admin/{AdminParameters-BspPeqp_.js → AdminParameters-CyZQSXnN.js} +118 -112
  20. package/dist/admin/AdminParameters-CyZQSXnN.js.map +1 -0
  21. package/dist/admin/{AdminSessions-BnH5CZQl.js → AdminSessions--xwELDSO.js} +3 -4
  22. package/dist/admin/{AdminSessions-BnH5CZQl.js.map → AdminSessions--xwELDSO.js.map} +1 -1
  23. package/dist/admin/{AdminUserLayout-DUbC6-BI.js → AdminUserLayout-DvBTG5gd.js} +82 -115
  24. package/dist/admin/AdminUserLayout-DvBTG5gd.js.map +1 -0
  25. package/dist/admin/{AdminUserProfile-DuTUnjdG.js → AdminUserProfile-CzsPBl6Z.js} +7 -6
  26. package/dist/admin/AdminUserProfile-CzsPBl6Z.js.map +1 -0
  27. package/dist/admin/{AdminUserSessions-DvZdAGpL.js → AdminUserSessions-C-aUnhVN.js} +3 -4
  28. package/dist/admin/{AdminUserSessions-DvZdAGpL.js.map → AdminUserSessions-C-aUnhVN.js.map} +1 -1
  29. package/dist/admin/{AdminUsers-CR9z0g_5.js → AdminUsers-BYwei5sj.js} +4 -4
  30. package/dist/admin/AdminUsers-BYwei5sj.js.map +1 -0
  31. package/dist/admin/{AuthLayout-DsUfp9RG.js → AuthLayout-CkPGLJku.js} +3 -4
  32. package/dist/admin/{AuthLayout-DsUfp9RG.js.map → AuthLayout-CkPGLJku.js.map} +1 -1
  33. package/dist/{demo/IconGoogle-CSQLPYwX.js → admin/IconGoogle-8Nkx6yax.js} +2 -4
  34. package/dist/admin/{IconGoogle-Ch1m3Uzl.js.map → IconGoogle-8Nkx6yax.js.map} +1 -1
  35. package/dist/admin/Login-DSBqNsZc.js +274 -0
  36. package/dist/admin/Login-DSBqNsZc.js.map +1 -0
  37. package/dist/admin/{Profile-B2EcIDB9.js → Profile-CDRjJo0P.js} +31 -29
  38. package/dist/admin/Profile-CDRjJo0P.js.map +1 -0
  39. package/dist/admin/{Register-Z3fxRbUF.js → Register-4QGFOnfh.js} +201 -146
  40. package/dist/admin/Register-4QGFOnfh.js.map +1 -0
  41. package/dist/admin/{ResetPassword-_Y1qTTKh.js → ResetPassword-Gxc9L_mY.js} +9 -10
  42. package/dist/admin/ResetPassword-Gxc9L_mY.js.map +1 -0
  43. package/dist/admin/{VerifyEmail-Bg22bwcC.js → VerifyEmail-D7G5NnaN.js} +25 -11
  44. package/dist/admin/VerifyEmail-D7G5NnaN.js.map +1 -0
  45. package/dist/admin/adminUserAtom-DCi4wf-v.js +11 -0
  46. package/dist/admin/adminUserAtom-DCi4wf-v.js.map +1 -0
  47. package/dist/admin/{core-BVO_TQxb.js → core-D1AbU50V.js} +662 -570
  48. package/dist/admin/core-D1AbU50V.js.map +1 -0
  49. package/dist/admin/index.d.ts +141 -53
  50. package/dist/admin/index.d.ts.map +1 -1
  51. package/dist/admin/index.js +67 -49
  52. package/dist/admin/index.js.map +1 -1
  53. package/dist/admin/rolldown-runtime-CiIaOW0V.js +13 -0
  54. package/dist/{demo/AuthLayout-DN-ClJQk.js → auth/AuthLayout-CfRKcTqP.js} +3 -4
  55. package/dist/auth/{AuthLayout-C161NeF6.js.map → AuthLayout-CfRKcTqP.js.map} +1 -1
  56. package/dist/{admin/IconGoogle-Ch1m3Uzl.js → auth/IconGoogle-8Nkx6yax.js} +2 -4
  57. package/dist/auth/{IconGoogle-Ch1m3Uzl.js.map → IconGoogle-8Nkx6yax.js.map} +1 -1
  58. package/dist/auth/Login-DJyweoPS.js +274 -0
  59. package/dist/auth/Login-DJyweoPS.js.map +1 -0
  60. package/dist/auth/{Profile-BMpXJ0oi.js → Profile-Cy93pNTw.js} +31 -29
  61. package/dist/auth/Profile-Cy93pNTw.js.map +1 -0
  62. package/dist/auth/{Register-2gx8qll-.js → Register-CSqzzitW.js} +201 -146
  63. package/dist/auth/Register-CSqzzitW.js.map +1 -0
  64. package/dist/{demo/ResetPassword-CAPj8MO3.js → auth/ResetPassword-B61QPlQi.js} +9 -10
  65. package/dist/auth/ResetPassword-B61QPlQi.js.map +1 -0
  66. package/dist/{demo/VerifyEmail-DFmdCdYs.js → auth/VerifyEmail-CqBJ11id.js} +25 -11
  67. package/dist/auth/VerifyEmail-CqBJ11id.js.map +1 -0
  68. package/dist/auth/{core-DyfeVr5c.js → core-C6D3pazL.js} +403 -343
  69. package/dist/auth/core-C6D3pazL.js.map +1 -0
  70. package/dist/auth/index.d.ts +93 -54
  71. package/dist/auth/index.d.ts.map +1 -1
  72. package/dist/auth/index.js +30 -31
  73. package/dist/auth/index.js.map +1 -1
  74. package/dist/auth/rolldown-runtime-CiIaOW0V.js +13 -0
  75. package/dist/core/index.d.ts +123 -62
  76. package/dist/core/index.d.ts.map +1 -1
  77. package/dist/core/index.js +878 -776
  78. package/dist/core/index.js.map +1 -1
  79. package/dist/{auth/AuthLayout-C161NeF6.js → demo/AuthLayout-Dq5tSLSc.js} +3 -4
  80. package/dist/demo/{AuthLayout-DN-ClJQk.js.map → AuthLayout-Dq5tSLSc.js.map} +1 -1
  81. package/dist/demo/DemoButton-_Ws2w-J0.js +181 -0
  82. package/dist/demo/DemoButton-_Ws2w-J0.js.map +1 -0
  83. package/dist/demo/DemoControlSelect-ChP4ZOpQ.js +304 -0
  84. package/dist/demo/DemoControlSelect-ChP4ZOpQ.js.map +1 -0
  85. package/dist/demo/DemoDataTable-Hwf_UUni.js +361 -0
  86. package/dist/demo/DemoDataTable-Hwf_UUni.js.map +1 -0
  87. package/dist/demo/{DemoDialog-DW8QEvD1.js → DemoDialog-B01OMVRd.js} +3 -4
  88. package/dist/demo/{DemoDialog-DW8QEvD1.js.map → DemoDialog-B01OMVRd.js.map} +1 -1
  89. package/dist/demo/{DemoFlex-CAhLUanT.js → DemoFlex-870PEl0V.js} +4 -5
  90. package/dist/demo/{DemoFlex-CAhLUanT.js.map → DemoFlex-870PEl0V.js.map} +1 -1
  91. package/dist/demo/{DemoHeading-yIFmNjHB.js → DemoHeading-C1YR27fz.js} +4 -5
  92. package/dist/demo/{DemoHeading-yIFmNjHB.js.map → DemoHeading-C1YR27fz.js.map} +1 -1
  93. package/dist/demo/{DemoHome-BSGuBHus.js → DemoHome-DRbL2eGf.js} +4 -5
  94. package/dist/demo/{DemoHome-BSGuBHus.js.map → DemoHome-DRbL2eGf.js.map} +1 -1
  95. package/dist/demo/{DemoJsonViewer-DsA2IpgV.js → DemoJsonViewer-DoABiqBW.js} +4 -5
  96. package/dist/demo/{DemoJsonViewer-DsA2IpgV.js.map → DemoJsonViewer-DoABiqBW.js.map} +1 -1
  97. package/dist/demo/{DemoLayout-Cy6xjn6P.js → DemoLayout-CN_PDCX2.js} +16 -8
  98. package/dist/demo/DemoLayout-CN_PDCX2.js.map +1 -0
  99. package/dist/demo/{DemoLogin-vqxgTu4P.js → DemoLogin-B5x-ug3Q.js} +51 -35
  100. package/dist/demo/DemoLogin-B5x-ug3Q.js.map +1 -0
  101. package/dist/demo/{DemoRegister-YHPvPg77.js → DemoRegister-Q6sg2xuV.js} +51 -53
  102. package/dist/demo/DemoRegister-Q6sg2xuV.js.map +1 -0
  103. package/dist/demo/{DemoResetPassword-mOW18Zlm.js → DemoResetPassword-DrqZfmEw.js} +14 -19
  104. package/dist/demo/DemoResetPassword-DrqZfmEw.js.map +1 -0
  105. package/dist/demo/{DemoSidebar-od7aLjP_.js → DemoSidebar-CfKS6w1o.js} +4 -5
  106. package/dist/demo/{DemoSidebar-od7aLjP_.js.map → DemoSidebar-CfKS6w1o.js.map} +1 -1
  107. package/dist/demo/{DemoText-DU3JeRS0.js → DemoText-pT6Gi5b5.js} +4 -5
  108. package/dist/demo/{DemoText-DU3JeRS0.js.map → DemoText-pT6Gi5b5.js.map} +1 -1
  109. package/dist/demo/{DemoToast-CUJEiPRa.js → DemoToast-I13NBzQQ.js} +3 -4
  110. package/dist/demo/{DemoToast-CUJEiPRa.js.map → DemoToast-I13NBzQQ.js.map} +1 -1
  111. package/dist/demo/{DemoTypeForm-C1dNkahD.js → DemoTypeForm-BqzcrtvN.js} +9 -6
  112. package/dist/demo/DemoTypeForm-BqzcrtvN.js.map +1 -0
  113. package/dist/demo/DemoVerifyEmail-HwD8xfQw.js +33 -0
  114. package/dist/demo/DemoVerifyEmail-HwD8xfQw.js.map +1 -0
  115. package/dist/{auth/IconGoogle-Ch1m3Uzl.js → demo/IconGoogle-CwQy4G9y.js} +2 -4
  116. package/dist/demo/{IconGoogle-CSQLPYwX.js.map → IconGoogle-CwQy4G9y.js.map} +1 -1
  117. package/dist/demo/Login-CqG1iJbn.js +274 -0
  118. package/dist/demo/Login-CqG1iJbn.js.map +1 -0
  119. package/dist/demo/{Profile-BE_Y3co2.js → Profile-C0ojJCaG.js} +31 -29
  120. package/dist/demo/Profile-C0ojJCaG.js.map +1 -0
  121. package/dist/demo/{Register-fXHmBpr3.js → Register-KKZwr_lL.js} +201 -146
  122. package/dist/demo/Register-KKZwr_lL.js.map +1 -0
  123. package/dist/{auth/ResetPassword-DBxt9hKk.js → demo/ResetPassword-DMrLFEtr.js} +9 -10
  124. package/dist/demo/ResetPassword-DMrLFEtr.js.map +1 -0
  125. package/dist/demo/{Showcase-BtEU0pY9.js → Showcase-D49Wud2v.js} +65 -68
  126. package/dist/demo/Showcase-D49Wud2v.js.map +1 -0
  127. package/dist/{auth/VerifyEmail-Z80Ubajk.js → demo/VerifyEmail-BFCAFz6T.js} +25 -11
  128. package/dist/demo/VerifyEmail-BFCAFz6T.js.map +1 -0
  129. package/dist/demo/{auth-Djd7SKiw.js → auth-D9qTZzCa.js} +18 -35
  130. package/dist/demo/{auth-Djd7SKiw.js.map → auth-D9qTZzCa.js.map} +1 -1
  131. package/dist/demo/{core-B7LNjM78.js → core-DRtQklr3.js} +752 -647
  132. package/dist/demo/core-DRtQklr3.js.map +1 -0
  133. package/dist/demo/index.d.ts +1 -0
  134. package/dist/demo/index.d.ts.map +1 -1
  135. package/dist/demo/index.js +25 -22
  136. package/dist/demo/index.js.map +1 -1
  137. package/dist/demo/rolldown-runtime-CiIaOW0V.js +13 -0
  138. package/package.json +19 -19
  139. package/src/admin/AdminRouter.tsx +42 -2
  140. package/src/admin/atoms/adminUserAtom.ts +7 -0
  141. package/src/admin/components/AdminLayout.tsx +2 -14
  142. package/src/admin/components/jobs/AdminJobDashboard.tsx +51 -20
  143. package/src/admin/components/notifications/AdminNotifications.tsx +519 -0
  144. package/src/admin/components/parameters/ParameterDetails.tsx +12 -270
  145. package/src/admin/components/parameters/ParameterDetailsConfigForm.tsx +238 -0
  146. package/src/admin/components/parameters/ParameterDetailsLoading.tsx +24 -0
  147. package/src/admin/components/parameters/ParameterHistory.tsx +10 -11
  148. package/src/admin/components/parameters/ParameterTree.tsx +28 -184
  149. package/src/admin/components/parameters/ParameterTreeNode.tsx +151 -0
  150. package/src/admin/components/shared/AdminResourceHeader.tsx +2 -25
  151. package/src/admin/components/shared/AdminResourceHeaderMenuItem.tsx +37 -0
  152. package/src/admin/components/shared/AdminResourceTabs.tsx +2 -26
  153. package/src/admin/components/shared/AdminResourceTabsItem.tsx +36 -0
  154. package/src/admin/components/users/AdminUserLayout.tsx +84 -127
  155. package/src/admin/components/users/AdminUserProfile.tsx +5 -2
  156. package/src/admin/components/users/AdminUsers.tsx +1 -1
  157. package/src/auth/components/Login.tsx +188 -121
  158. package/src/auth/components/Profile.tsx +1 -22
  159. package/src/auth/components/ProfileField.tsx +39 -0
  160. package/src/auth/components/Register.tsx +215 -158
  161. package/src/auth/components/ResetPassword.tsx +7 -11
  162. package/src/auth/components/VerifyEmail.tsx +35 -10
  163. package/src/auth/components/buttons/UserButton.tsx +19 -21
  164. package/src/auth/index.ts +1 -0
  165. package/src/core/components/Flex.tsx +34 -0
  166. package/src/core/components/buttons/ActionButton.tsx +105 -78
  167. package/src/core/components/data/DetailDrawer.tsx +102 -96
  168. package/src/core/components/data/DetailList.tsx +2 -1
  169. package/src/core/components/dialogs/PromptDialog.tsx +1 -1
  170. package/src/core/components/layout/Breadcrumb.tsx +4 -7
  171. package/src/core/components/layout/DashboardShell.tsx +18 -4
  172. package/src/core/components/layout/Sidebar.tsx +16 -241
  173. package/src/core/components/layout/SidebarCollapsedItem.tsx +91 -0
  174. package/src/core/components/layout/SidebarItem.tsx +146 -0
  175. package/src/core/components/layout/index.ts +3 -1
  176. package/src/core/form/components/Control.tsx +31 -29
  177. package/src/core/form/components/ControlArray.tsx +13 -39
  178. package/src/core/form/components/ControlDate.tsx +10 -21
  179. package/src/core/form/components/ControlNumber.tsx +4 -33
  180. package/src/core/form/components/ControlQueryBuilder.tsx +12 -175
  181. package/src/core/form/components/ControlQueryBuilderHelp.tsx +165 -0
  182. package/src/core/form/components/ControlSelect.browser.spec.tsx +343 -0
  183. package/src/core/form/components/ControlSelect.tsx +294 -92
  184. package/src/core/form/components/TypeForm.browser.spec.tsx +3 -3
  185. package/src/core/form/components/TypeForm.tsx +5 -2
  186. package/src/core/form/index.ts +8 -1
  187. package/src/core/form/utils/parseInput.ts +7 -3
  188. package/src/core/index.ts +3 -1
  189. package/src/core/json/components/JsonViewer.tsx +103 -319
  190. package/src/core/json/components/JsonViewerCopyButton.tsx +46 -0
  191. package/src/core/json/components/JsonViewerRowNode.tsx +120 -0
  192. package/src/core/json/components/JsonViewerShared.ts +76 -0
  193. package/src/core/services/DialogService.tsx +2 -2
  194. package/src/core/styles.css +13 -2
  195. package/src/core/table/components/ColumnPicker.tsx +3 -3
  196. package/src/core/table/components/DataTable.tsx +88 -29
  197. package/src/core/table/components/DataTableFilters.tsx +6 -11
  198. package/src/core/table/components/DataTablePagination.tsx +9 -3
  199. package/src/core/table/components/DataTableToolbar.tsx +7 -3
  200. package/src/core/table/components/FilterPicker.tsx +3 -3
  201. package/src/core/table/interfaces/types.ts +29 -0
  202. package/src/core/utils/icons.tsx +2 -2
  203. package/src/demo/DemoRouter.ts +8 -1
  204. package/src/demo/components/DemoLayout.tsx +12 -2
  205. package/src/demo/components/auth/DemoLogin.tsx +35 -28
  206. package/src/demo/components/auth/DemoRegister.tsx +35 -49
  207. package/src/demo/components/auth/DemoResetPassword.tsx +5 -9
  208. package/src/demo/components/auth/DemoVerifyEmail.tsx +7 -6
  209. package/src/demo/components/core/DemoButton.tsx +123 -103
  210. package/src/demo/components/core/DemoControlSelect.tsx +325 -0
  211. package/src/demo/components/core/DemoDataTable.tsx +255 -237
  212. package/src/demo/components/core/DemoTypeForm.tsx +7 -2
  213. package/src/demo/components/shared/MacWindow.tsx +5 -11
  214. package/src/demo/components/shared/Showcase.tsx +28 -42
  215. package/dist/admin/AdminJobDashboard-KIOkeMgE.js.map +0 -1
  216. package/dist/admin/AdminLayout-B1DXZHDn.js.map +0 -1
  217. package/dist/admin/AdminParameters-BspPeqp_.js.map +0 -1
  218. package/dist/admin/AdminUserLayout-DUbC6-BI.js.map +0 -1
  219. package/dist/admin/AdminUserProfile-DuTUnjdG.js.map +0 -1
  220. package/dist/admin/AdminUsers-CR9z0g_5.js.map +0 -1
  221. package/dist/admin/Login-DHbYJKwg.js +0 -219
  222. package/dist/admin/Login-DHbYJKwg.js.map +0 -1
  223. package/dist/admin/Profile-B2EcIDB9.js.map +0 -1
  224. package/dist/admin/Register-Z3fxRbUF.js.map +0 -1
  225. package/dist/admin/ResetPassword-_Y1qTTKh.js.map +0 -1
  226. package/dist/admin/VerifyEmail-Bg22bwcC.js.map +0 -1
  227. package/dist/admin/core-BVO_TQxb.js.map +0 -1
  228. package/dist/admin/rolldown-runtime-CjeV3_4I.js +0 -18
  229. package/dist/auth/Login-C7jIqf00.js +0 -219
  230. package/dist/auth/Login-C7jIqf00.js.map +0 -1
  231. package/dist/auth/Profile-BMpXJ0oi.js.map +0 -1
  232. package/dist/auth/Register-2gx8qll-.js.map +0 -1
  233. package/dist/auth/ResetPassword-DBxt9hKk.js.map +0 -1
  234. package/dist/auth/VerifyEmail-Z80Ubajk.js.map +0 -1
  235. package/dist/auth/core-DyfeVr5c.js.map +0 -1
  236. package/dist/auth/rolldown-runtime-CjeV3_4I.js +0 -18
  237. package/dist/demo/DemoButton-CGUyR9eM.js +0 -178
  238. package/dist/demo/DemoButton-CGUyR9eM.js.map +0 -1
  239. package/dist/demo/DemoDataTable-QFG-xXSx.js +0 -358
  240. package/dist/demo/DemoDataTable-QFG-xXSx.js.map +0 -1
  241. package/dist/demo/DemoLayout-Cy6xjn6P.js.map +0 -1
  242. package/dist/demo/DemoLogin-vqxgTu4P.js.map +0 -1
  243. package/dist/demo/DemoRegister-YHPvPg77.js.map +0 -1
  244. package/dist/demo/DemoResetPassword-mOW18Zlm.js.map +0 -1
  245. package/dist/demo/DemoTypeForm-C1dNkahD.js.map +0 -1
  246. package/dist/demo/DemoVerifyEmail-D9EcXZ38.js +0 -30
  247. package/dist/demo/DemoVerifyEmail-D9EcXZ38.js.map +0 -1
  248. package/dist/demo/Login-CoYf_P_F.js +0 -219
  249. package/dist/demo/Login-CoYf_P_F.js.map +0 -1
  250. package/dist/demo/Profile-BE_Y3co2.js.map +0 -1
  251. package/dist/demo/Register-fXHmBpr3.js.map +0 -1
  252. package/dist/demo/ResetPassword-CAPj8MO3.js.map +0 -1
  253. package/dist/demo/Showcase-BtEU0pY9.js.map +0 -1
  254. package/dist/demo/VerifyEmail-DFmdCdYs.js.map +0 -1
  255. package/dist/demo/core-B7LNjM78.js.map +0 -1
  256. package/dist/demo/rolldown-runtime-CjeV3_4I.js +0 -18
  257. package/src/demo/styles.css +0 -0
@@ -16,6 +16,7 @@ declare class DemoRouter {
16
16
  demoToast: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, alepha_react_router0.TPropsParentDefault>;
17
17
  demoForm: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, alepha_react_router0.TPropsParentDefault>;
18
18
  demoTypeForm: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, alepha_react_router0.TPropsParentDefault>;
19
+ demoControlSelect: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, alepha_react_router0.TPropsParentDefault>;
19
20
  demoTable: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, alepha_react_router0.TPropsParentDefault>;
20
21
  demoDataTable: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, alepha_react_router0.TPropsParentDefault>;
21
22
  demoJson: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, alepha_react_router0.TPropsParentDefault>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/demo/DemoRouter.ts","../../src/demo/primitives/$uiDemo.ts","../../src/demo/index.ts"],"mappings":";;;;cAwBa,UAAA;EACX,UAAA,EAAU,oBAAA,CAAA,aAAA,CADW,oBAAA,CACX,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAgBV,QAAA,EAAQ,oBAAA,CAAA,aAAA,CAhBE,oBAAA,CAgBF,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAQR,QAAA,EAAQ,oBAAA,CAAA,aAAA,CARA,oBAAA,CAQA,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAYR,QAAA,EAAQ,oBAAA,CAAA,aAAA,CAZA,oBAAA,CAYA,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOR,QAAA,EAAQ,oBAAA,CAAA,aAAA,CAPA,oBAAA,CAOA,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOR,WAAA,EAAW,oBAAA,CAAA,aAAA,CAPH,oBAAA,CAOG,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOX,UAAA,EAAU,oBAAA,CAAA,aAAA,CAPC,oBAAA,CAOD,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAQV,iBAAA,EAAiB,oBAAA,CAAA,aAAA,CARP,oBAAA,CAQO,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOjB,WAAA,EAAW,oBAAA,CAAA,aAAA,CAPM,oBAAA,CAON,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOX,UAAA,EAAU,oBAAA,CAAA,aAAA,CAPC,oBAAA,CAOD,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOV,SAAA,EAAS,oBAAA,CAAA,aAAA,CAPC,oBAAA,CAOD,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAQT,QAAA,EAAQ,oBAAA,CAAA,aAAA,CARC,oBAAA,CAQD,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOR,YAAA,EAAY,oBAAA,CAAA,aAAA,CAPJ,oBAAA,CAOI,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAQZ,SAAA,EAAS,oBAAA,CAAA,aAAA,CARG,oBAAA,CAQH,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOT,aAAA,EAAa,oBAAA,CAAA,aAAA,CAPJ,oBAAA,CAOI,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAQb,QAAA,EAAQ,oBAAA,CAAA,aAAA,CARK,oBAAA,CAQL,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOR,cAAA,EAAc,oBAAA,CAAA,aAAA,CAPN,oBAAA,CAOM,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAQd,QAAA,EAAQ,oBAAA,CAAA,aAAA,CARM,oBAAA,CAQN,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAYR,SAAA,EAAS,oBAAA,CAAA,aAAA,CAZD,oBAAA,CAYC,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOT,YAAA,EAAY,oBAAA,CAAA,aAAA,CAPH,oBAAA,CAOG,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOZ,iBAAA,EAAiB,oBAAA,CAAA,aAAA,CAPL,oBAAA,CAOK,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOjB,eAAA,EAAe,oBAAA,CAAA,aAAA,CAPE,oBAAA,CAOF,gBAAA,OAAA,oBAAA,CAAA,mBAAA;AAAA;;;;;;cC/LJ,OAAA,QAAO,UAAA;;;;;ADkBpB;;;;;;;;;cEFa,YAAA,EAAY,MAAA,CAAA,OAAA,CAGvB,MAAA,CAHuB,MAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/demo/DemoRouter.ts","../../src/demo/primitives/$uiDemo.ts","../../src/demo/index.ts"],"mappings":";;;;cAwBa,UAAA;EACX,UAAA,EAAU,oBAAA,CAAA,aAAA,CADW,oBAAA,CACX,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAgBV,QAAA,EAAQ,oBAAA,CAAA,aAAA,CAhBE,oBAAA,CAgBF,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAQR,QAAA,EAAQ,oBAAA,CAAA,aAAA,CARA,oBAAA,CAQA,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAYR,QAAA,EAAQ,oBAAA,CAAA,aAAA,CAZA,oBAAA,CAYA,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOR,QAAA,EAAQ,oBAAA,CAAA,aAAA,CAPA,oBAAA,CAOA,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOR,WAAA,EAAW,oBAAA,CAAA,aAAA,CAPH,oBAAA,CAOG,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOX,UAAA,EAAU,oBAAA,CAAA,aAAA,CAPC,oBAAA,CAOD,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAQV,iBAAA,EAAiB,oBAAA,CAAA,aAAA,CARP,oBAAA,CAQO,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOjB,WAAA,EAAW,oBAAA,CAAA,aAAA,CAPM,oBAAA,CAON,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOX,UAAA,EAAU,oBAAA,CAAA,aAAA,CAPC,oBAAA,CAOD,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOV,SAAA,EAAS,oBAAA,CAAA,aAAA,CAPC,oBAAA,CAOD,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAQT,QAAA,EAAQ,oBAAA,CAAA,aAAA,CARC,oBAAA,CAQD,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOR,YAAA,EAAY,oBAAA,CAAA,aAAA,CAPJ,oBAAA,CAOI,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOZ,iBAAA,EAAiB,oBAAA,CAAA,aAAA,CAPL,oBAAA,CAOK,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAQjB,SAAA,EAAS,oBAAA,CAAA,aAAA,CARQ,oBAAA,CAQR,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOT,aAAA,EAAa,oBAAA,CAAA,aAAA,CAPJ,oBAAA,CAOI,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAQb,QAAA,EAAQ,oBAAA,CAAA,aAAA,CARK,oBAAA,CAQL,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOR,cAAA,EAAc,oBAAA,CAAA,aAAA,CAPN,oBAAA,CAOM,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAQd,QAAA,EAAQ,oBAAA,CAAA,aAAA,CARM,oBAAA,CAQN,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAYR,SAAA,EAAS,oBAAA,CAAA,aAAA,CAZD,oBAAA,CAYC,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOT,YAAA,EAAY,oBAAA,CAAA,aAAA,CAPH,oBAAA,CAOG,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOZ,iBAAA,EAAiB,oBAAA,CAAA,aAAA,CAPL,oBAAA,CAOK,gBAAA,OAAA,oBAAA,CAAA,mBAAA;EAOjB,eAAA,EAAe,oBAAA,CAAA,aAAA,CAPE,oBAAA,CAOF,gBAAA,OAAA,oBAAA,CAAA,mBAAA;AAAA;;;;;;cCtMJ,OAAA,QAAO,UAAA;;;;;ADkBpB;;;;;;;;;cEFa,YAAA,EAAY,MAAA,CAAA,OAAA,CAGvB,MAAA,CAHuB,MAAA"}
@@ -1,15 +1,14 @@
1
- import { t as AlephaUI } from "./core-B7LNjM78.js";
1
+ import { t as AlephaUI } from "./core-DRtQklr3.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";
5
-
6
5
  //#region ../../src/demo/DemoRouter.ts
7
6
  var DemoRouter = class {
8
7
  demoLayout = $page({
9
8
  icon: IconPackages,
10
9
  path: "/demo",
11
10
  label: "Demo",
12
- lazy: () => import("./DemoLayout-Cy6xjn6P.js"),
11
+ lazy: () => import("./DemoLayout-CN_PDCX2.js"),
13
12
  children: () => [
14
13
  this.demoHome,
15
14
  this.demoCore,
@@ -24,7 +23,7 @@ var DemoRouter = class {
24
23
  icon: IconHome,
25
24
  path: "/",
26
25
  label: "Home",
27
- lazy: () => import("./DemoHome-BSGuBHus.js")
26
+ lazy: () => import("./DemoHome-DRbL2eGf.js")
28
27
  });
29
28
  demoCore = $page({
30
29
  icon: IconWall,
@@ -41,25 +40,25 @@ var DemoRouter = class {
41
40
  icon: IconRowInsertBottom,
42
41
  path: "/flex",
43
42
  label: "Flex",
44
- lazy: () => import("./DemoFlex-CAhLUanT.js")
43
+ lazy: () => import("./DemoFlex-870PEl0V.js")
45
44
  });
46
45
  demoText = $page({
47
46
  icon: IconLetterT,
48
47
  path: "/text",
49
48
  label: "Text",
50
- lazy: () => import("./DemoText-DU3JeRS0.js")
49
+ lazy: () => import("./DemoText-pT6Gi5b5.js")
51
50
  });
52
51
  demoHeading = $page({
53
52
  icon: IconHeading,
54
53
  path: "/heading",
55
54
  label: "Heading",
56
- lazy: () => import("./DemoHeading-yIFmNjHB.js")
55
+ lazy: () => import("./DemoHeading-C1YR27fz.js")
57
56
  });
58
57
  demoButton = $page({
59
58
  icon: IconClick,
60
59
  path: "/button",
61
60
  label: "Button",
62
- lazy: () => import("./DemoButton-CGUyR9eM.js")
61
+ lazy: () => import("./DemoButton-_Ws2w-J0.js")
63
62
  });
64
63
  demoLayoutSection = $page({
65
64
  icon: IconLayout,
@@ -75,31 +74,37 @@ var DemoRouter = class {
75
74
  icon: IconLayoutSidebar,
76
75
  path: "/sidebar",
77
76
  label: "Sidebar",
78
- lazy: () => import("./DemoSidebar-od7aLjP_.js")
77
+ lazy: () => import("./DemoSidebar-CfKS6w1o.js")
79
78
  });
80
79
  demoDialog = $page({
81
80
  icon: IconMessage,
82
81
  path: "/dialog",
83
82
  label: "Dialog",
84
- lazy: () => import("./DemoDialog-DW8QEvD1.js")
83
+ lazy: () => import("./DemoDialog-B01OMVRd.js")
85
84
  });
86
85
  demoToast = $page({
87
86
  icon: IconBell,
88
87
  path: "/toast",
89
88
  label: "Toast",
90
- lazy: () => import("./DemoToast-CUJEiPRa.js")
89
+ lazy: () => import("./DemoToast-I13NBzQQ.js")
91
90
  });
92
91
  demoForm = $page({
93
92
  icon: IconForms,
94
93
  path: "/form",
95
94
  label: "Form",
96
- children: () => [this.demoTypeForm]
95
+ children: () => [this.demoTypeForm, this.demoControlSelect]
97
96
  });
98
97
  demoTypeForm = $page({
99
98
  icon: IconForms,
100
99
  path: "/type-form",
101
100
  label: "TypeForm",
102
- lazy: () => import("./DemoTypeForm-C1dNkahD.js")
101
+ lazy: () => import("./DemoTypeForm-BqzcrtvN.js")
102
+ });
103
+ demoControlSelect = $page({
104
+ icon: IconForms,
105
+ path: "/control-select",
106
+ label: "ControlSelect",
107
+ lazy: () => import("./DemoControlSelect-ChP4ZOpQ.js")
103
108
  });
104
109
  demoTable = $page({
105
110
  icon: IconTable,
@@ -111,7 +116,7 @@ var DemoRouter = class {
111
116
  icon: IconTable,
112
117
  path: "/data-table",
113
118
  label: "DataTable",
114
- lazy: () => import("./DemoDataTable-QFG-xXSx.js")
119
+ lazy: () => import("./DemoDataTable-Hwf_UUni.js")
115
120
  });
116
121
  demoJson = $page({
117
122
  icon: IconBraces,
@@ -123,7 +128,7 @@ var DemoRouter = class {
123
128
  icon: IconBinaryTree,
124
129
  path: "/viewer",
125
130
  label: "JsonViewer",
126
- lazy: () => import("./DemoJsonViewer-DsA2IpgV.js")
131
+ lazy: () => import("./DemoJsonViewer-DoABiqBW.js")
127
132
  });
128
133
  demoAuth = $page({
129
134
  icon: IconKey,
@@ -140,28 +145,27 @@ var DemoRouter = class {
140
145
  icon: IconLogin,
141
146
  path: "/login",
142
147
  label: "Login",
143
- lazy: () => import("./DemoLogin-vqxgTu4P.js")
148
+ lazy: () => import("./DemoLogin-B5x-ug3Q.js")
144
149
  });
145
150
  demoRegister = $page({
146
151
  icon: IconUserPlus,
147
152
  path: "/register",
148
153
  label: "Register",
149
- lazy: () => import("./DemoRegister-YHPvPg77.js")
154
+ lazy: () => import("./DemoRegister-Q6sg2xuV.js")
150
155
  });
151
156
  demoResetPassword = $page({
152
157
  icon: IconLockQuestion,
153
158
  path: "/reset-password",
154
159
  label: "ResetPassword",
155
- lazy: () => import("./DemoResetPassword-mOW18Zlm.js")
160
+ lazy: () => import("./DemoResetPassword-DrqZfmEw.js")
156
161
  });
157
162
  demoVerifyEmail = $page({
158
163
  icon: IconMailCheck,
159
164
  path: "/verify-email",
160
165
  label: "VerifyEmail",
161
- lazy: () => import("./DemoVerifyEmail-D9EcXZ38.js")
166
+ lazy: () => import("./DemoVerifyEmail-HwD8xfQw.js")
162
167
  });
163
168
  };
164
-
165
169
  //#endregion
166
170
  //#region ../../src/demo/primitives/$uiDemo.ts
167
171
  /**
@@ -171,7 +175,6 @@ const $uiDemo = () => {
171
175
  const { alepha } = $context();
172
176
  return alepha.inject(DemoRouter);
173
177
  };
174
-
175
178
  //#endregion
176
179
  //#region ../../src/demo/index.ts
177
180
  /**
@@ -189,7 +192,7 @@ const AlephaUIDemo = $module({
189
192
  name: "alepha.ui.demo",
190
193
  services: [AlephaUI, DemoRouter]
191
194
  });
192
-
193
195
  //#endregion
194
196
  export { $uiDemo, AlephaUIDemo, DemoRouter };
197
+
195
198
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/demo/DemoRouter.ts","../../src/demo/primitives/$uiDemo.ts","../../src/demo/index.ts"],"sourcesContent":["import {\n IconBell,\n IconBinaryTree,\n IconBraces,\n IconClick,\n IconForms,\n IconHeading,\n IconHome,\n IconKey,\n IconLayout,\n IconLayoutSidebar,\n IconLetterT,\n IconLockQuestion,\n IconLogin,\n IconMailCheck,\n IconMessage,\n IconPackages,\n IconRowInsertBottom,\n IconTable,\n IconUserPlus,\n IconWall,\n} from \"@tabler/icons-react\";\nimport { $page } from \"alepha/react/router\";\n\nexport class DemoRouter {\n demoLayout = $page({\n icon: IconPackages,\n path: \"/demo\",\n label: \"Demo\",\n lazy: () => import(\"./components/DemoLayout.tsx\"),\n children: () => [\n this.demoHome,\n this.demoCore,\n this.demoLayoutSection,\n this.demoForm,\n this.demoTable,\n this.demoJson,\n this.demoAuth,\n ],\n });\n\n demoHome = $page({\n icon: IconHome,\n path: \"/\",\n label: \"Home\",\n lazy: () => import(\"./components/DemoHome.tsx\"),\n });\n\n // Core Components\n demoCore = $page({\n icon: IconWall,\n path: \"/core\",\n label: \"Core\",\n children: () => [\n this.demoFlex,\n this.demoText,\n this.demoButton,\n this.demoHeading,\n ],\n });\n\n demoFlex = $page({\n icon: IconRowInsertBottom,\n path: \"/flex\",\n label: \"Flex\",\n lazy: () => import(\"./components/core/DemoFlex.tsx\"),\n });\n\n demoText = $page({\n icon: IconLetterT,\n path: \"/text\",\n label: \"Text\",\n lazy: () => import(\"./components/core/DemoText.tsx\"),\n });\n\n demoHeading = $page({\n icon: IconHeading,\n path: \"/heading\",\n label: \"Heading\",\n lazy: () => import(\"./components/core/DemoHeading.tsx\"),\n });\n\n demoButton = $page({\n icon: IconClick,\n path: \"/button\",\n label: \"Button\",\n lazy: () => import(\"./components/core/DemoButton.tsx\"),\n });\n\n // Layout Components\n demoLayoutSection = $page({\n icon: IconLayout,\n path: \"/layout\",\n label: \"Layout\",\n children: () => [this.demoSidebar, this.demoDialog, this.demoToast],\n });\n\n demoSidebar = $page({\n icon: IconLayoutSidebar,\n path: \"/sidebar\",\n label: \"Sidebar\",\n lazy: () => import(\"./components/layout/DemoSidebar.tsx\"),\n });\n\n demoDialog = $page({\n icon: IconMessage,\n path: \"/dialog\",\n label: \"Dialog\",\n lazy: () => import(\"./components/layout/DemoDialog.tsx\"),\n });\n\n demoToast = $page({\n icon: IconBell,\n path: \"/toast\",\n label: \"Toast\",\n lazy: () => import(\"./components/layout/DemoToast.tsx\"),\n });\n\n // Form Components\n demoForm = $page({\n icon: IconForms,\n path: \"/form\",\n label: \"Form\",\n children: () => [this.demoTypeForm],\n });\n\n demoTypeForm = $page({\n icon: IconForms,\n path: \"/type-form\",\n label: \"TypeForm\",\n lazy: () => import(\"./components/core/DemoTypeForm.tsx\"),\n });\n\n // Table Components\n demoTable = $page({\n icon: IconTable,\n path: \"/table\",\n label: \"Table\",\n children: () => [this.demoDataTable],\n });\n\n demoDataTable = $page({\n icon: IconTable,\n path: \"/data-table\",\n label: \"DataTable\",\n lazy: () => import(\"./components/core/DemoDataTable.tsx\"),\n });\n\n // JSON Components\n demoJson = $page({\n icon: IconBraces,\n path: \"/json\",\n label: \"Json\",\n children: () => [this.demoJsonViewer],\n });\n\n demoJsonViewer = $page({\n icon: IconBinaryTree,\n path: \"/viewer\",\n label: \"JsonViewer\",\n lazy: () => import(\"./components/json/DemoJsonViewer.tsx\"),\n });\n\n // Auth Components\n demoAuth = $page({\n icon: IconKey,\n path: \"/auth\",\n label: \"Auth\",\n children: () => [\n this.demoLogin,\n this.demoRegister,\n this.demoResetPassword,\n this.demoVerifyEmail,\n ],\n });\n\n demoLogin = $page({\n icon: IconLogin,\n path: \"/login\",\n label: \"Login\",\n lazy: () => import(\"./components/auth/DemoLogin.tsx\"),\n });\n\n demoRegister = $page({\n icon: IconUserPlus,\n path: \"/register\",\n label: \"Register\",\n lazy: () => import(\"./components/auth/DemoRegister.tsx\"),\n });\n\n demoResetPassword = $page({\n icon: IconLockQuestion,\n path: \"/reset-password\",\n label: \"ResetPassword\",\n lazy: () => import(\"./components/auth/DemoResetPassword.tsx\"),\n });\n\n demoVerifyEmail = $page({\n icon: IconMailCheck,\n path: \"/verify-email\",\n label: \"VerifyEmail\",\n lazy: () => import(\"./components/auth/DemoVerifyEmail.tsx\"),\n });\n}\n","import { $context } from \"alepha\";\nimport { DemoRouter } from \"../DemoRouter.ts\";\n\n/**\n * Register Demo UI components and get the DemoRouter instance.\n */\nexport const $uiDemo = () => {\n const { alepha } = $context();\n return alepha.inject(DemoRouter);\n};\n","import { AlephaUI } from \"@alepha/ui\";\nimport { $module } from \"alepha\";\nimport { DemoRouter } from \"./DemoRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport { DemoRouter } from \"./DemoRouter.ts\";\nexport * from \"./primitives/$uiDemo.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Component showcase and documentation.\n *\n * **Features:**\n * - DemoLayout for demo pages\n * - DemoHome landing page\n * - MacWindow component for showcases\n * - Showcase component for component demos\n *\n * @module alepha.ui.demo\n */\nexport const AlephaUIDemo = $module({\n name: \"alepha.ui.demo\",\n services: [AlephaUI, DemoRouter],\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/demo/DemoRouter.ts","../../src/demo/primitives/$uiDemo.ts","../../src/demo/index.ts"],"sourcesContent":["import {\n IconBell,\n IconBinaryTree,\n IconBraces,\n IconClick,\n IconForms,\n IconHeading,\n IconHome,\n IconKey,\n IconLayout,\n IconLayoutSidebar,\n IconLetterT,\n IconLockQuestion,\n IconLogin,\n IconMailCheck,\n IconMessage,\n IconPackages,\n IconRowInsertBottom,\n IconTable,\n IconUserPlus,\n IconWall,\n} from \"@tabler/icons-react\";\nimport { $page } from \"alepha/react/router\";\n\nexport class DemoRouter {\n demoLayout = $page({\n icon: IconPackages,\n path: \"/demo\",\n label: \"Demo\",\n lazy: () => import(\"./components/DemoLayout.tsx\"),\n children: () => [\n this.demoHome,\n this.demoCore,\n this.demoLayoutSection,\n this.demoForm,\n this.demoTable,\n this.demoJson,\n this.demoAuth,\n ],\n });\n\n demoHome = $page({\n icon: IconHome,\n path: \"/\",\n label: \"Home\",\n lazy: () => import(\"./components/DemoHome.tsx\"),\n });\n\n // Core Components\n demoCore = $page({\n icon: IconWall,\n path: \"/core\",\n label: \"Core\",\n children: () => [\n this.demoFlex,\n this.demoText,\n this.demoButton,\n this.demoHeading,\n ],\n });\n\n demoFlex = $page({\n icon: IconRowInsertBottom,\n path: \"/flex\",\n label: \"Flex\",\n lazy: () => import(\"./components/core/DemoFlex.tsx\"),\n });\n\n demoText = $page({\n icon: IconLetterT,\n path: \"/text\",\n label: \"Text\",\n lazy: () => import(\"./components/core/DemoText.tsx\"),\n });\n\n demoHeading = $page({\n icon: IconHeading,\n path: \"/heading\",\n label: \"Heading\",\n lazy: () => import(\"./components/core/DemoHeading.tsx\"),\n });\n\n demoButton = $page({\n icon: IconClick,\n path: \"/button\",\n label: \"Button\",\n lazy: () => import(\"./components/core/DemoButton.tsx\"),\n });\n\n // Layout Components\n demoLayoutSection = $page({\n icon: IconLayout,\n path: \"/layout\",\n label: \"Layout\",\n children: () => [this.demoSidebar, this.demoDialog, this.demoToast],\n });\n\n demoSidebar = $page({\n icon: IconLayoutSidebar,\n path: \"/sidebar\",\n label: \"Sidebar\",\n lazy: () => import(\"./components/layout/DemoSidebar.tsx\"),\n });\n\n demoDialog = $page({\n icon: IconMessage,\n path: \"/dialog\",\n label: \"Dialog\",\n lazy: () => import(\"./components/layout/DemoDialog.tsx\"),\n });\n\n demoToast = $page({\n icon: IconBell,\n path: \"/toast\",\n label: \"Toast\",\n lazy: () => import(\"./components/layout/DemoToast.tsx\"),\n });\n\n // Form Components\n demoForm = $page({\n icon: IconForms,\n path: \"/form\",\n label: \"Form\",\n children: () => [this.demoTypeForm, this.demoControlSelect],\n });\n\n demoTypeForm = $page({\n icon: IconForms,\n path: \"/type-form\",\n label: \"TypeForm\",\n lazy: () => import(\"./components/core/DemoTypeForm.tsx\"),\n });\n\n demoControlSelect = $page({\n icon: IconForms,\n path: \"/control-select\",\n label: \"ControlSelect\",\n lazy: () => import(\"./components/core/DemoControlSelect.tsx\"),\n });\n\n // Table Components\n demoTable = $page({\n icon: IconTable,\n path: \"/table\",\n label: \"Table\",\n children: () => [this.demoDataTable],\n });\n\n demoDataTable = $page({\n icon: IconTable,\n path: \"/data-table\",\n label: \"DataTable\",\n lazy: () => import(\"./components/core/DemoDataTable.tsx\"),\n });\n\n // JSON Components\n demoJson = $page({\n icon: IconBraces,\n path: \"/json\",\n label: \"Json\",\n children: () => [this.demoJsonViewer],\n });\n\n demoJsonViewer = $page({\n icon: IconBinaryTree,\n path: \"/viewer\",\n label: \"JsonViewer\",\n lazy: () => import(\"./components/json/DemoJsonViewer.tsx\"),\n });\n\n // Auth Components\n demoAuth = $page({\n icon: IconKey,\n path: \"/auth\",\n label: \"Auth\",\n children: () => [\n this.demoLogin,\n this.demoRegister,\n this.demoResetPassword,\n this.demoVerifyEmail,\n ],\n });\n\n demoLogin = $page({\n icon: IconLogin,\n path: \"/login\",\n label: \"Login\",\n lazy: () => import(\"./components/auth/DemoLogin.tsx\"),\n });\n\n demoRegister = $page({\n icon: IconUserPlus,\n path: \"/register\",\n label: \"Register\",\n lazy: () => import(\"./components/auth/DemoRegister.tsx\"),\n });\n\n demoResetPassword = $page({\n icon: IconLockQuestion,\n path: \"/reset-password\",\n label: \"ResetPassword\",\n lazy: () => import(\"./components/auth/DemoResetPassword.tsx\"),\n });\n\n demoVerifyEmail = $page({\n icon: IconMailCheck,\n path: \"/verify-email\",\n label: \"VerifyEmail\",\n lazy: () => import(\"./components/auth/DemoVerifyEmail.tsx\"),\n });\n}\n","import { $context } from \"alepha\";\nimport { DemoRouter } from \"../DemoRouter.ts\";\n\n/**\n * Register Demo UI components and get the DemoRouter instance.\n */\nexport const $uiDemo = () => {\n const { alepha } = $context();\n return alepha.inject(DemoRouter);\n};\n","import { AlephaUI } from \"@alepha/ui\";\nimport { $module } from \"alepha\";\nimport { DemoRouter } from \"./DemoRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport { DemoRouter } from \"./DemoRouter.ts\";\nexport * from \"./primitives/$uiDemo.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Component showcase and documentation.\n *\n * **Features:**\n * - DemoLayout for demo pages\n * - DemoHome landing page\n * - MacWindow component for showcases\n * - Showcase component for component demos\n *\n * @module alepha.ui.demo\n */\nexport const AlephaUIDemo = $module({\n name: \"alepha.ui.demo\",\n services: [AlephaUI, DemoRouter],\n});\n"],"mappings":";;;;;AAwBA,IAAa,aAAb,MAAwB;CACtB,aAAa,MAAM;EACjB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACnB,gBAAgB;GACd,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACN;EACF,CAAC;CAEF,WAAW,MAAM;EACf,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAGF,WAAW,MAAM;EACf,MAAM;EACN,MAAM;EACN,OAAO;EACP,gBAAgB;GACd,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACN;EACF,CAAC;CAEF,WAAW,MAAM;EACf,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAEF,WAAW,MAAM;EACf,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAEF,cAAc,MAAM;EAClB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAEF,aAAa,MAAM;EACjB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAGF,oBAAoB,MAAM;EACxB,MAAM;EACN,MAAM;EACN,OAAO;EACP,gBAAgB;GAAC,KAAK;GAAa,KAAK;GAAY,KAAK;GAAU;EACpE,CAAC;CAEF,cAAc,MAAM;EAClB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAEF,aAAa,MAAM;EACjB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAEF,YAAY,MAAM;EAChB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAGF,WAAW,MAAM;EACf,MAAM;EACN,MAAM;EACN,OAAO;EACP,gBAAgB,CAAC,KAAK,cAAc,KAAK,kBAAkB;EAC5D,CAAC;CAEF,eAAe,MAAM;EACnB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAEF,oBAAoB,MAAM;EACxB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAGF,YAAY,MAAM;EAChB,MAAM;EACN,MAAM;EACN,OAAO;EACP,gBAAgB,CAAC,KAAK,cAAc;EACrC,CAAC;CAEF,gBAAgB,MAAM;EACpB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAGF,WAAW,MAAM;EACf,MAAM;EACN,MAAM;EACN,OAAO;EACP,gBAAgB,CAAC,KAAK,eAAe;EACtC,CAAC;CAEF,iBAAiB,MAAM;EACrB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAGF,WAAW,MAAM;EACf,MAAM;EACN,MAAM;EACN,OAAO;EACP,gBAAgB;GACd,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACN;EACF,CAAC;CAEF,YAAY,MAAM;EAChB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAEF,eAAe,MAAM;EACnB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAEF,oBAAoB,MAAM;EACxB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;CAEF,kBAAkB,MAAM;EACtB,MAAM;EACN,MAAM;EACN,OAAO;EACP,YAAY,OAAO;EACpB,CAAC;;;;;;;AC3MJ,MAAa,gBAAgB;CAC3B,MAAM,EAAE,WAAW,UAAU;AAC7B,QAAO,OAAO,OAAO,WAAW;;;;;;;;;;;;;;;ACclC,MAAa,eAAe,QAAQ;CAClC,MAAM;CACN,UAAU,CAAC,UAAU,WAAW;CACjC,CAAC"}
@@ -0,0 +1,13 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __defProp = Object.defineProperty;
3
+ var __exportAll = (all, no_symbols) => {
4
+ let target = {};
5
+ for (var name in all) __defProp(target, name, {
6
+ get: all[name],
7
+ enumerable: true
8
+ });
9
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
10
+ return target;
11
+ };
12
+ //#endregion
13
+ export { __exportAll as t };
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "mantine"
8
8
  ],
9
9
  "author": "Nicolas Foures",
10
- "version": "0.18.2",
10
+ "version": "0.19.0",
11
11
  "type": "module",
12
12
  "engines": {
13
13
  "node": ">=22.0.0"
@@ -22,33 +22,33 @@
22
22
  "styles.css"
23
23
  ],
24
24
  "dependencies": {
25
- "@mantine/charts": "^8.3.15",
26
- "@mantine/core": "^8.3.15",
27
- "@mantine/dates": "^8.3.15",
28
- "@mantine/hooks": "^8.3.15",
29
- "@mantine/modals": "^8.3.15",
30
- "@mantine/notifications": "^8.3.15",
31
- "@mantine/nprogress": "^8.3.15",
32
- "@mantine/spotlight": "^8.3.15",
33
- "@tabler/icons-react": "^3.37.1",
34
- "dayjs": "^1.11.19",
25
+ "@mantine/charts": "^8.3.18",
26
+ "@mantine/core": "^8.3.18",
27
+ "@mantine/dates": "^8.3.18",
28
+ "@mantine/hooks": "^8.3.18",
29
+ "@mantine/modals": "^8.3.18",
30
+ "@mantine/notifications": "^8.3.18",
31
+ "@mantine/nprogress": "^8.3.18",
32
+ "@mantine/spotlight": "^8.3.18",
33
+ "@tabler/icons-react": "^3.40.0",
34
+ "dayjs": "^1.11.20",
35
35
  "react-is": "^19.2.4",
36
- "recharts": "^3.7.0"
36
+ "recharts": "^3.8.0"
37
37
  },
38
38
  "devDependencies": {
39
- "@biomejs/biome": "^2.4.4",
39
+ "@biomejs/biome": "^2.4.8",
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.2",
43
+ "alepha": "0.19.0",
44
44
  "react": "^19.2.4",
45
45
  "react-dom": "^19.2.4",
46
46
  "typescript": "^5.9.3",
47
- "vite": "^7.3.1",
48
- "vitest": "^4.0.18"
47
+ "vite": "^8.0.0",
48
+ "vitest": "^4.1.0"
49
49
  },
50
50
  "peerDependencies": {
51
- "alepha": "0.18.2",
51
+ "alepha": "0.19.0",
52
52
  "react": "*",
53
53
  "react-dom": "*"
54
54
  },
@@ -58,7 +58,7 @@
58
58
  "typecheck": "alepha typecheck",
59
59
  "test": "alepha test",
60
60
  "build": "node ../alepha/scripts/build.ts",
61
- "build:check": "node scripts/build.ts --check"
61
+ "build:check": "node ../alepha/scripts/build.ts --check"
62
62
  },
63
63
  "repository": {
64
64
  "type": "git",
@@ -87,6 +87,6 @@
87
87
  "default": "./dist/demo/index.js"
88
88
  },
89
89
  "./styles": "./src/core/styles.css",
90
- "./json/styles": "./src/json/styles.css"
90
+ "./styles.css": "./src/core/styles.css"
91
91
  }
92
92
  }
@@ -9,6 +9,7 @@ import {
9
9
  } from "@alepha/ui";
10
10
  import { AuthRouter, UserButton } from "@alepha/ui/auth";
11
11
  import {
12
+ IconBell,
12
13
  IconClock,
13
14
  IconDashboard,
14
15
  IconDevices,
@@ -23,12 +24,12 @@ import {
23
24
  IconUser,
24
25
  IconUsers,
25
26
  } from "@tabler/icons-react";
26
- import { $inject } from "alepha";
27
+ import { $inject, t } from "alepha";
27
28
  import type { AdminAuditController } from "alepha/api/audits";
28
29
  import type { FileController } from "alepha/api/files";
29
30
  import type { AdminJobController } from "alepha/api/jobs";
30
31
  import type { AdminApiKeyController } from "alepha/api/keys";
31
-
32
+ import type { AdminNotificationController } from "alepha/api/notifications";
32
33
  import type { AdminParameterController } from "alepha/api/parameters";
33
34
  import type {
34
35
  AdminSessionController,
@@ -36,6 +37,7 @@ import type {
36
37
  } from "alepha/api/users";
37
38
  import { ReactAuth } from "alepha/react/auth";
38
39
  import { $page, ReactRouter, Redirection } from "alepha/react/router";
40
+ import { $secure } from "alepha/security";
39
41
  import { $cookie } from "alepha/server/cookies";
40
42
  import { $client } from "alepha/server/links";
41
43
 
@@ -51,6 +53,7 @@ export class AdminRouter {
51
53
  protected readonly auditCtrl = $client<AdminAuditController>();
52
54
  protected readonly jobCtrl = $client<AdminJobController>();
53
55
  protected readonly apiKeyCtrl = $client<AdminApiKeyController>();
56
+ protected readonly notificationCtrl = $client<AdminNotificationController>();
54
57
 
55
58
  public readonly adminCookie = $cookie(alephaSidebarAtom, {
56
59
  name: "admin.sidebar",
@@ -159,6 +162,10 @@ export class AdminRouter {
159
162
  { ...this.router.node(this.adminJobExecutions.name) },
160
163
  ],
161
164
  },
165
+ {
166
+ ...this.router.node(this.adminNotifications.name),
167
+ can: () => this.notificationCtrl.findNotifications.can(),
168
+ },
162
169
  {
163
170
  ...this.router.node(this.adminParameters.name),
164
171
  can: () => this.paramCtrl.getParameterTree.can(),
@@ -196,6 +203,11 @@ export class AdminRouter {
196
203
  title: "Admin Panel",
197
204
  titleSeparator: " | ",
198
205
  },
206
+ use: [
207
+ $secure({
208
+ permissions: ["admin:access"],
209
+ }),
210
+ ],
199
211
  lazy: () => import("./components/AdminLayout.tsx"),
200
212
  props: () => ({
201
213
  adminShellProps: this.adminShellProps(),
@@ -243,7 +255,18 @@ export class AdminRouter {
243
255
  head: {
244
256
  title: "Users",
245
257
  },
258
+ schema: {
259
+ params: t.object({
260
+ userId: t.text(),
261
+ }),
262
+ },
246
263
  lazy: () => import("./components/users/AdminUserLayout.tsx"),
264
+ loader: async ({ params }) => {
265
+ const user = await this.userCtrl.getUser({
266
+ params: { id: params.userId },
267
+ });
268
+ return { user };
269
+ },
247
270
  });
248
271
 
249
272
  public readonly adminUserProfile = $page({
@@ -390,4 +413,21 @@ export class AdminRouter {
390
413
  lazy: () => import("./components/keys/AdminApiKeys.tsx"),
391
414
  can: () => this.apiKeyCtrl.findApiKeys.can(),
392
415
  });
416
+
417
+ // ─────────────────────────────────────────────────────────────────────────────
418
+ // Notifications
419
+ // ─────────────────────────────────────────────────────────────────────────────
420
+
421
+ public readonly adminNotifications = $page({
422
+ icon: IconBell,
423
+ parent: this.adminLayout,
424
+ path: "/notifications",
425
+ label: "Notifications",
426
+ description: "View sent notifications and their delivery status.",
427
+ head: {
428
+ title: "Notifications",
429
+ },
430
+ lazy: () => import("./components/notifications/AdminNotifications.tsx"),
431
+ can: () => this.notificationCtrl.findNotifications.can(),
432
+ });
393
433
  }
@@ -0,0 +1,7 @@
1
+ import { $atom, t } from "alepha";
2
+ import { users } from "alepha/api/users";
3
+
4
+ export const adminUserAtom = $atom({
5
+ name: "alepha.admin.user",
6
+ schema: t.optional(users.schema),
7
+ });
@@ -4,10 +4,9 @@ import {
4
4
  DashboardShell,
5
5
  type DashboardShellProps,
6
6
  SidebarCollapseButton,
7
- Text,
8
7
  ui,
9
8
  } from "@alepha/ui";
10
- import { Flex, Image } from "@mantine/core";
9
+ import { Flex } from "@mantine/core";
11
10
  import { IconArrowLeft } from "@tabler/icons-react";
12
11
 
13
12
  export interface AdminLayoutProps {
@@ -31,7 +30,7 @@ const AdminLayout = (props: AdminLayoutProps) => {
31
30
  >
32
31
  <DashboardShell
33
32
  layout={"alt"}
34
- navbarHeader={(props) => (
33
+ navbarHeader={() => (
35
34
  <Flex gap={"md"} flex={1} px={"lg"} align={"center"}>
36
35
  <ActionButton
37
36
  href={"/"}
@@ -39,17 +38,6 @@ const AdminLayout = (props: AdminLayoutProps) => {
39
38
  bd={0}
40
39
  icon={IconArrowLeft}
41
40
  />
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
- )}
53
41
  </Flex>
54
42
  )}
55
43
  footerHeight={48}
@@ -1,6 +1,6 @@
1
1
  import { ActionButton, Flex, StatCards, Text, useToast } from "@alepha/ui";
2
2
  import { AreaChart, BarChart, DonutChart } from "@mantine/charts";
3
- import { Paper, SimpleGrid, Table } from "@mantine/core";
3
+ import { Paper, SegmentedControl, SimpleGrid, Table } from "@mantine/core";
4
4
  import {
5
5
  IconAlertTriangle,
6
6
  IconCircleCheck,
@@ -21,6 +21,13 @@ import { useCallback, useEffect, useState } from "react";
21
21
 
22
22
  // ─────────────────────────────────────────────────────────────────────────────
23
23
 
24
+ const TIME_RANGES = [
25
+ { label: "24h", value: "1" },
26
+ { label: "7d", value: "7" },
27
+ { label: "14d", value: "14" },
28
+ { label: "30d", value: "30" },
29
+ ];
30
+
24
31
  const formatDuration = (
25
32
  start: Date | string,
26
33
  end?: Date | string | null,
@@ -53,20 +60,23 @@ const AdminJobDashboard = () => {
53
60
  const { l } = useI18n();
54
61
  const toast = useToast();
55
62
 
63
+ const [days, setDays] = useState("7");
56
64
  const [stats, setStats] = useState<JobStats | null>(null);
57
65
  const [recent, setRecent] = useState<RecentExecution[]>([]);
58
66
  const [failures, setFailures] = useState<JobFailure[]>([]);
59
67
  const [activity, setActivity] = useState<JobActivityPoint[]>([]);
60
68
  const [queueDepth, setQueueDepth] = useState<JobQueueDepth[]>([]);
61
69
 
70
+ const daysNum = Number(days);
71
+
62
72
  const loadData = useCallback(async () => {
63
73
  try {
64
74
  const [statsData, recentData, failureData, activityData, queueData] =
65
75
  await Promise.all([
66
- client.getJobStats(),
76
+ client.getJobStats({ query: { days: daysNum } }),
67
77
  client.findJobExecutions({ query: { sort: "-createdAt", size: 10 } }),
68
- client.getJobTopFailures(),
69
- client.getJobActivity({ query: { days: 14 } }),
78
+ client.getJobTopFailures({ query: { days: daysNum } }),
79
+ client.getJobActivity({ query: { days: daysNum } }),
70
80
  client.getJobQueueDepth(),
71
81
  ]);
72
82
  setStats(statsData);
@@ -77,7 +87,7 @@ const AdminJobDashboard = () => {
77
87
  } catch {
78
88
  toast.danger("Failed to load dashboard data");
79
89
  }
80
- }, [client, toast]);
90
+ }, [client, toast, daysNum]);
81
91
 
82
92
  useEffect(() => {
83
93
  loadData();
@@ -119,19 +129,40 @@ const AdminJobDashboard = () => {
119
129
  ].filter((d) => d.value > 0)
120
130
  : [];
121
131
 
132
+ const rangeLabel =
133
+ TIME_RANGES.find((r) => r.value === days)?.label ?? `${days}d`;
134
+
122
135
  return (
123
136
  <Flex flex={1} direction="column" gap="md" p="md">
124
137
  <Flex justify="space-between" align="center">
125
138
  <Text size="lg" fw={600}>
126
139
  Jobs Dashboard
127
140
  </Text>
128
- <ActionButton
129
- tooltip="Refresh"
130
- variant="light"
131
- size="sm"
132
- icon={IconRefresh}
133
- onClick={loadData}
134
- />
141
+ <Flex
142
+ gap="sm"
143
+ align="center"
144
+ py="xs"
145
+ px="sm"
146
+ style={{
147
+ backgroundColor: "var(--mantine-color-body)",
148
+ borderRadius: "var(--mantine-radius-md)",
149
+ border: "1px solid var(--mantine-color-default-border)",
150
+ }}
151
+ >
152
+ <SegmentedControl
153
+ size="xs"
154
+ data={TIME_RANGES}
155
+ value={days}
156
+ onChange={setDays}
157
+ />
158
+ <ActionButton
159
+ tooltip="Refresh"
160
+ variant="minimal"
161
+ size="sm"
162
+ icon={IconRefresh}
163
+ onClick={loadData}
164
+ />
165
+ </Flex>
135
166
  </Flex>
136
167
 
137
168
  {/* Stats Cards */}
@@ -149,13 +180,13 @@ const AdminJobDashboard = () => {
149
180
  icon: IconPlayerPlay,
150
181
  },
151
182
  {
152
- label: "Completed 24h",
153
- value: stats.completed24h,
183
+ label: `Completed (${rangeLabel})`,
184
+ value: stats.completed,
154
185
  icon: IconCircleCheck,
155
186
  },
156
187
  {
157
- label: "Failed 24h",
158
- value: stats.failed24h,
188
+ label: `Failed (${rangeLabel})`,
189
+ value: stats.failed,
159
190
  icon: IconAlertTriangle,
160
191
  },
161
192
  ]}
@@ -167,7 +198,7 @@ const AdminJobDashboard = () => {
167
198
  {/* Activity Timeline */}
168
199
  <Paper p="md" radius="md" withBorder>
169
200
  <Text size="sm" fw={600} mb="sm">
170
- Activity (14d)
201
+ Activity ({rangeLabel})
171
202
  </Text>
172
203
  {activityChartData.length > 0 ? (
173
204
  <AreaChart
@@ -292,10 +323,10 @@ const AdminJobDashboard = () => {
292
323
  </Table>
293
324
  </Paper>
294
325
 
295
- {/* Top Failures (7d) */}
326
+ {/* Top Failures */}
296
327
  <Paper p="md" radius="md" withBorder>
297
328
  <Text size="sm" fw={600} mb="sm">
298
- Top Failures (7d)
329
+ Top Failures ({rangeLabel})
299
330
  </Text>
300
331
  {failures.length > 0 ? (
301
332
  <Table>
@@ -336,7 +367,7 @@ const AdminJobDashboard = () => {
336
367
  ) : (
337
368
  <Flex h={100} align="center" justify="center">
338
369
  <Text size="sm" c="dimmed">
339
- No failures in the last 7 days
370
+ No failures in the last {rangeLabel}
340
371
  </Text>
341
372
  </Flex>
342
373
  )}