@alepha/ui 0.15.0 → 0.15.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 (207) hide show
  1. package/dist/admin/AdminAudits-BlGGKLof.js +3 -0
  2. package/dist/admin/{AdminAudits-DIrCCPk3.js → AdminAudits-C0DPYw0W.js} +4 -4
  3. package/dist/admin/AdminAudits-C0DPYw0W.js.map +1 -0
  4. package/dist/admin/AdminFiles-Bg9feLFH.js +3 -0
  5. package/dist/admin/{AdminFiles-RsL178Ta.js → AdminFiles-Cu8GHgQ3.js} +5 -5
  6. package/dist/admin/AdminFiles-Cu8GHgQ3.js.map +1 -0
  7. package/dist/admin/AdminLayout-BfeFXiul.js +3 -0
  8. package/dist/admin/{AdminLayout-XiSivwWH.js → AdminLayout-QJLIesuG.js} +1 -1
  9. package/dist/admin/{AdminLayout-XiSivwWH.js.map → AdminLayout-QJLIesuG.js.map} +1 -1
  10. package/dist/admin/{AdminNotifications-cIbywWKi.js → AdminNotifications-CgYkBuG_.js} +5 -5
  11. package/dist/admin/AdminNotifications-CgYkBuG_.js.map +1 -0
  12. package/dist/admin/AdminNotifications-DmfGPqHe.js +3 -0
  13. package/dist/admin/{AdminParameters-BKObzzpN.js → AdminParameters-Cl-R0nXt.js} +1 -1
  14. package/dist/admin/{AdminParameters-D-q3Qmhv.js → AdminParameters-hjNG_KXb.js} +4 -4
  15. package/dist/admin/AdminParameters-hjNG_KXb.js.map +1 -0
  16. package/dist/admin/{AdminSessions-vOgkrQ2U.js → AdminSessions-Bey9cuy1.js} +6 -6
  17. package/dist/admin/AdminSessions-Bey9cuy1.js.map +1 -0
  18. package/dist/admin/AdminSessions-Cn4_jB04.js +3 -0
  19. package/dist/admin/{AdminUserAudits-CSsN1fIC.js → AdminUserAudits-C7AN9jx7.js} +4 -4
  20. package/dist/admin/AdminUserAudits-C7AN9jx7.js.map +1 -0
  21. package/dist/admin/{AdminUserAudits-DmAnivo3.js → AdminUserAudits-Cp_ERd2g.js} +1 -1
  22. package/dist/admin/{AdminUserCreate-DpA13zwj.js → AdminUserCreate-Chr-7hLk.js} +1 -1
  23. package/dist/admin/{AdminUserCreate-B72nu-3W.js → AdminUserCreate-DiXi1EWB.js} +4 -4
  24. package/dist/admin/AdminUserCreate-DiXi1EWB.js.map +1 -0
  25. package/dist/admin/{AdminUserDetails-Zib_B6Al.js → AdminUserDetails-Dcn3OwMC.js} +1 -1
  26. package/dist/admin/{AdminUserDetails-CKM2IEMr.js → AdminUserDetails-yM4x8JE6.js} +5 -5
  27. package/dist/admin/AdminUserDetails-yM4x8JE6.js.map +1 -0
  28. package/dist/admin/{AdminUserLayout-BNBOEiAO.js → AdminUserLayout-CfeQHH6e.js} +1 -1
  29. package/dist/admin/{AdminUserLayout-D7En9UBq.js → AdminUserLayout-D9bqGt6T.js} +3 -3
  30. package/dist/admin/AdminUserLayout-D9bqGt6T.js.map +1 -0
  31. package/dist/admin/{AdminUserSessions-DEaGu6n6.js → AdminUserSessions-kmkXG-xf.js} +4 -4
  32. package/dist/admin/AdminUserSessions-kmkXG-xf.js.map +1 -0
  33. package/dist/admin/AdminUserSessions-rvA0ztxn.js +3 -0
  34. package/dist/admin/{AdminUserSettings-Di73D7g2.js → AdminUserSettings-BnzRAcqV.js} +4 -4
  35. package/dist/admin/AdminUserSettings-BnzRAcqV.js.map +1 -0
  36. package/dist/admin/AdminUserSettings-CXs-jtRv.js +3 -0
  37. package/dist/admin/{AdminUsers-BnGIRvmV.js → AdminUsers-CYkcUWCg.js} +6 -6
  38. package/dist/admin/AdminUsers-CYkcUWCg.js.map +1 -0
  39. package/dist/admin/AdminUsers-DdFXzrEn.js +3 -0
  40. package/dist/admin/index.d.ts +33 -18
  41. package/dist/admin/index.d.ts.map +1 -1
  42. package/dist/admin/index.js +48 -33
  43. package/dist/admin/index.js.map +1 -1
  44. package/dist/auth/{AuthLayout-B1sUB8fB.js → AuthLayout-Dj5K4SIN.js} +2 -2
  45. package/dist/auth/AuthLayout-Dj5K4SIN.js.map +1 -0
  46. package/dist/{demo/IconGoogle-DvmFiEDB.js → auth/IconGoogle-DpSlPZ1u.js} +1 -1
  47. package/dist/auth/{IconGoogle-Cm5d8J3f.js.map → IconGoogle-DpSlPZ1u.js.map} +1 -1
  48. package/dist/auth/{Login-Cjxv3EDi.js → Login-BAFVcX_J.js} +6 -6
  49. package/dist/auth/Login-BAFVcX_J.js.map +1 -0
  50. package/dist/auth/Login-C5PUsp8I.js +4 -0
  51. package/dist/auth/{Register-CGlbQ50l.js → Register-CZRXEcWy.js} +7 -7
  52. package/dist/auth/Register-CZRXEcWy.js.map +1 -0
  53. package/dist/auth/Register-DMTs5ep_.js +4 -0
  54. package/dist/auth/ResetPassword-D-mhMtmx.js +3 -0
  55. package/dist/auth/{ResetPassword-DvqD_1SJ.js → ResetPassword-DTYNsBIj.js} +5 -5
  56. package/dist/auth/ResetPassword-DTYNsBIj.js.map +1 -0
  57. package/dist/auth/VerifyEmail-BsrCmncc.js +3 -0
  58. package/dist/auth/{VerifyEmail-VaBruOnO.js → VerifyEmail-DolENWGn.js} +4 -4
  59. package/dist/auth/VerifyEmail-DolENWGn.js.map +1 -0
  60. package/dist/auth/index.d.ts +34 -23
  61. package/dist/auth/index.d.ts.map +1 -1
  62. package/dist/auth/index.js +25 -14
  63. package/dist/auth/index.js.map +1 -1
  64. package/dist/core/index.d.ts +272 -209
  65. package/dist/core/index.d.ts.map +1 -1
  66. package/dist/core/index.js +314 -99
  67. package/dist/core/index.js.map +1 -1
  68. package/dist/demo/{DemoDataTable-2mzzf__a.js → DemoDataTable-CguplbR7.js} +2 -2
  69. package/dist/demo/{DemoDataTable-2mzzf__a.js.map → DemoDataTable-CguplbR7.js.map} +1 -1
  70. package/dist/demo/{DemoHome-CnuL5WV9.js → DemoHome-Cce2bWmg.js} +1 -1
  71. package/dist/demo/{DemoHome-CnuL5WV9.js.map → DemoHome-Cce2bWmg.js.map} +1 -1
  72. package/dist/demo/DemoHome-DC9qkMNe.js +3 -0
  73. package/dist/demo/DemoJsonViewer-DIssGVlJ.js +4 -0
  74. package/dist/demo/{DemoJsonViewer-NUGst5wW.js → DemoJsonViewer-Dgdk3Txb.js} +3 -3
  75. package/dist/demo/{DemoJsonViewer-NUGst5wW.js.map → DemoJsonViewer-Dgdk3Txb.js.map} +1 -1
  76. package/dist/demo/{DemoLayout-dvbeuBBf.js → DemoLayout-B20TEuhV.js} +2 -2
  77. package/dist/demo/DemoLayout-B20TEuhV.js.map +1 -0
  78. package/dist/demo/DemoLayout-DSRyf4qJ.js +3 -0
  79. package/dist/demo/{DemoLogin-DvltFTER.js → DemoLogin-mtkN6340.js} +7 -7
  80. package/dist/demo/DemoLogin-mtkN6340.js.map +1 -0
  81. package/dist/demo/{DemoRegister-Vu6ZPWib.js → DemoRegister-C0MW7anp.js} +8 -8
  82. package/dist/demo/DemoRegister-C0MW7anp.js.map +1 -0
  83. package/dist/demo/{DemoResetPassword-BFwmqwec.js → DemoResetPassword-CPTy88iK.js} +6 -6
  84. package/dist/demo/DemoResetPassword-CPTy88iK.js.map +1 -0
  85. package/dist/demo/{DemoSidebar-DWnjYHoP.js → DemoSidebar-MVmQKfMt.js} +2 -2
  86. package/dist/demo/{DemoSidebar-DWnjYHoP.js.map → DemoSidebar-MVmQKfMt.js.map} +1 -1
  87. package/dist/demo/{DemoTypeForm-P5_VInW2.js → DemoTypeForm-w-qtfRlC.js} +3 -3
  88. package/dist/demo/DemoTypeForm-w-qtfRlC.js.map +1 -0
  89. package/dist/demo/{DemoVerifyEmail-C_ooC5u8.js → DemoVerifyEmail-C8FFJT5A.js} +5 -5
  90. package/dist/demo/DemoVerifyEmail-C8FFJT5A.js.map +1 -0
  91. package/dist/{auth/IconGoogle-Cm5d8J3f.js → demo/IconGoogle-CbBF8Hqq.js} +1 -1
  92. package/dist/demo/{IconGoogle-DvmFiEDB.js.map → IconGoogle-CbBF8Hqq.js.map} +1 -1
  93. package/dist/demo/{Showcase-vemLuO2t.js → Showcase-CQrMWars.js} +4 -4
  94. package/dist/demo/Showcase-CQrMWars.js.map +1 -0
  95. package/dist/demo/index.d.ts +37 -27
  96. package/dist/demo/index.d.ts.map +1 -1
  97. package/dist/demo/index.js +26 -16
  98. package/dist/demo/index.js.map +1 -1
  99. package/dist/json/index.d.ts +17 -17
  100. package/dist/json/index.d.ts.map +1 -1
  101. package/package.json +13 -14
  102. package/src/admin/AdminRouter.ts +2 -2
  103. package/src/admin/MainRouter.ts +1 -1
  104. package/src/admin/components/audits/AdminAudits.tsx +3 -3
  105. package/src/admin/components/files/AdminFiles.tsx +2 -2
  106. package/src/admin/components/jobs/AdminJobs.tsx +2 -2
  107. package/src/admin/components/notifications/AdminNotifications.tsx +2 -2
  108. package/src/admin/components/parameters/AdminParameters.tsx +1 -1
  109. package/src/admin/components/parameters/ParameterDetails.tsx +2 -2
  110. package/src/admin/components/parameters/ParameterHistory.tsx +1 -1
  111. package/src/admin/components/parameters/types.ts +9 -3
  112. package/src/admin/components/sessions/AdminSessions.tsx +3 -3
  113. package/src/admin/components/shared/AdminResourceHeader.tsx +1 -1
  114. package/src/admin/components/shared/AdminResourceTabs.tsx +1 -1
  115. package/src/admin/components/users/AdminUserAudits.tsx +3 -3
  116. package/src/admin/components/users/AdminUserCreate.tsx +3 -3
  117. package/src/admin/components/users/AdminUserDetails.tsx +4 -4
  118. package/src/admin/components/users/AdminUserLayout.tsx +2 -2
  119. package/src/admin/components/users/AdminUserSessions.tsx +3 -3
  120. package/src/admin/components/users/AdminUserSettings.tsx +3 -3
  121. package/src/admin/components/users/AdminUsers.tsx +3 -3
  122. package/src/admin/index.ts +16 -1
  123. package/src/auth/AuthI18n.ts +1 -1
  124. package/src/auth/AuthRouter.ts +2 -2
  125. package/src/auth/components/AuthLayout.tsx +1 -1
  126. package/src/auth/components/Login.tsx +4 -4
  127. package/src/auth/components/Register.tsx +5 -5
  128. package/src/auth/components/ResetPassword.tsx +4 -4
  129. package/src/auth/components/VerifyEmail.tsx +3 -3
  130. package/src/auth/components/buttons/UserButton.tsx +2 -2
  131. package/src/auth/index.ts +14 -3
  132. package/src/core/RootRouter.ts +1 -1
  133. package/src/core/atoms/alephaSidebarAtom.ts +57 -0
  134. package/src/core/components/buttons/ActionButton.tsx +9 -9
  135. package/src/core/components/buttons/BurgerButton.tsx +5 -4
  136. package/src/core/components/buttons/LanguageButton.tsx +1 -1
  137. package/src/core/components/buttons/OmnibarButton.tsx +20 -1
  138. package/src/core/components/buttons/ThemeButton.tsx +1 -1
  139. package/src/core/components/buttons/ToggleSidebarButton.tsx +33 -23
  140. package/src/core/components/form/Control.tsx +1 -1
  141. package/src/core/components/form/ControlArray.tsx +2 -2
  142. package/src/core/components/form/ControlDate.tsx +1 -1
  143. package/src/core/components/form/ControlNumber.tsx +2 -2
  144. package/src/core/components/form/ControlObject.tsx +1 -1
  145. package/src/core/components/form/ControlQueryBuilder.tsx +1 -1
  146. package/src/core/components/form/ControlSelect.tsx +1 -1
  147. package/src/core/components/form/TypeForm.tsx +2 -2
  148. package/src/core/components/layout/AdminShell.tsx +205 -27
  149. package/src/core/components/layout/AlephaMantineProvider.tsx +3 -3
  150. package/src/core/components/layout/Omnibar.tsx +2 -2
  151. package/src/core/components/layout/Sidebar.tsx +42 -77
  152. package/src/core/components/table/DataTable.tsx +2 -2
  153. package/src/core/components/table/DataTableFilters.tsx +1 -1
  154. package/src/core/components/table/types.ts +1 -1
  155. package/src/core/hooks/useDialog.ts +1 -1
  156. package/src/core/hooks/useTheme.ts +1 -1
  157. package/src/core/hooks/useToast.ts +1 -1
  158. package/src/core/index.ts +57 -6
  159. package/src/core/providers/ThemeProvider.ts +1 -1
  160. package/src/core/styles.css +58 -0
  161. package/src/core/utils/parseInput.ts +1 -1
  162. package/src/demo/DemoRouter.ts +1 -1
  163. package/src/demo/components/DemoLayout.tsx +1 -1
  164. package/src/demo/components/core/DemoTypeForm.tsx +1 -1
  165. package/src/demo/components/json/DemoJsonViewer.tsx +1 -1
  166. package/src/demo/components/shared/Showcase.tsx +1 -1
  167. package/src/demo/index.ts +11 -1
  168. package/src/json/index.ts +13 -0
  169. package/dist/admin/AdminAudits-B3EhKhN7.js +0 -3
  170. package/dist/admin/AdminAudits-DIrCCPk3.js.map +0 -1
  171. package/dist/admin/AdminFiles-C8OG4dtD.js +0 -3
  172. package/dist/admin/AdminFiles-RsL178Ta.js.map +0 -1
  173. package/dist/admin/AdminLayout-BnSmtA4x.js +0 -3
  174. package/dist/admin/AdminNotifications-BSL4B2fQ.js +0 -3
  175. package/dist/admin/AdminNotifications-cIbywWKi.js.map +0 -1
  176. package/dist/admin/AdminParameters-D-q3Qmhv.js.map +0 -1
  177. package/dist/admin/AdminSessions-DHG9zPfr.js +0 -3
  178. package/dist/admin/AdminSessions-vOgkrQ2U.js.map +0 -1
  179. package/dist/admin/AdminUserAudits-CSsN1fIC.js.map +0 -1
  180. package/dist/admin/AdminUserCreate-B72nu-3W.js.map +0 -1
  181. package/dist/admin/AdminUserDetails-CKM2IEMr.js.map +0 -1
  182. package/dist/admin/AdminUserLayout-D7En9UBq.js.map +0 -1
  183. package/dist/admin/AdminUserSessions-D9X2_HMA.js +0 -3
  184. package/dist/admin/AdminUserSessions-DEaGu6n6.js.map +0 -1
  185. package/dist/admin/AdminUserSettings-Di73D7g2.js.map +0 -1
  186. package/dist/admin/AdminUserSettings-yI-JECf5.js +0 -3
  187. package/dist/admin/AdminUsers-BnGIRvmV.js.map +0 -1
  188. package/dist/admin/AdminUsers-CG9-2Z8W.js +0 -3
  189. package/dist/auth/AuthLayout-B1sUB8fB.js.map +0 -1
  190. package/dist/auth/Login-BWi-pPbO.js +0 -4
  191. package/dist/auth/Login-Cjxv3EDi.js.map +0 -1
  192. package/dist/auth/Register-CGlbQ50l.js.map +0 -1
  193. package/dist/auth/Register-CWdkXWkc.js +0 -4
  194. package/dist/auth/ResetPassword-BUdM7T_R.js +0 -3
  195. package/dist/auth/ResetPassword-DvqD_1SJ.js.map +0 -1
  196. package/dist/auth/VerifyEmail-BYmtnkEl.js +0 -3
  197. package/dist/auth/VerifyEmail-VaBruOnO.js.map +0 -1
  198. package/dist/demo/DemoHome-D6Z7EE4V.js +0 -3
  199. package/dist/demo/DemoJsonViewer-CYUggLop.js +0 -4
  200. package/dist/demo/DemoLayout-ZFDzyvY3.js +0 -3
  201. package/dist/demo/DemoLayout-dvbeuBBf.js.map +0 -1
  202. package/dist/demo/DemoLogin-DvltFTER.js.map +0 -1
  203. package/dist/demo/DemoRegister-Vu6ZPWib.js.map +0 -1
  204. package/dist/demo/DemoResetPassword-BFwmqwec.js.map +0 -1
  205. package/dist/demo/DemoTypeForm-P5_VInW2.js.map +0 -1
  206. package/dist/demo/DemoVerifyEmail-C_ooC5u8.js.map +0 -1
  207. package/dist/demo/Showcase-vemLuO2t.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminUserLayout-D9bqGt6T.js","names":["Text","Text","AdminResourceHeader","AdminResourceTabs"],"sources":["../../src/admin/components/shared/AdminResourceHeader.tsx","../../src/admin/components/shared/AdminResourceTabs.tsx","../../src/admin/components/users/AdminUserLayout.tsx"],"sourcesContent":["import { ActionButton } from \"@alepha/ui\";\nimport {\n ActionIcon,\n Avatar,\n Badge,\n Button,\n Group,\n Menu,\n Stack,\n Text,\n Tooltip,\n} from \"@mantine/core\";\nimport {\n IconChevronDown,\n IconChevronLeft,\n IconExternalLink,\n} from \"@tabler/icons-react\";\nimport { useRouter } from \"alepha/react/router\";\nimport type { ComponentType, ReactNode } from \"react\";\n\nexport interface AdminResourceAction {\n label: string;\n icon?: ComponentType<{ size?: number }>;\n onClick?: () => void;\n href?: string;\n color?: string;\n disabled?: boolean;\n loading?: boolean;\n variant?: \"filled\" | \"light\" | \"outline\" | \"subtle\";\n}\n\nexport interface AdminResourceHeaderProps {\n /**\n * Back navigation URL\n */\n backHref?: string;\n\n /**\n * Back navigation label\n */\n backLabel?: string;\n\n /**\n * Avatar content (letter, image URL, or custom node)\n */\n avatar?: string | ReactNode;\n\n /**\n * Avatar color\n */\n avatarColor?: string;\n\n /**\n * Resource title (e.g., user name)\n */\n title: string;\n\n /**\n * Secondary text (e.g., email)\n */\n subtitle?: string;\n\n /**\n * Tertiary identifier to copy (e.g., user ID)\n */\n identifier?: string;\n\n /**\n * Label for the identifier tooltip\n */\n identifierLabel?: string;\n\n /**\n * Status badge\n */\n status?: {\n label: string;\n color: \"green\" | \"red\" | \"yellow\" | \"blue\" | \"gray\";\n };\n\n /**\n * Additional badges (e.g., roles)\n */\n badges?: Array<{\n label: string;\n color?: string;\n variant?: \"filled\" | \"light\" | \"outline\" | \"dot\";\n }>;\n\n /**\n * Primary action button\n */\n primaryAction?: AdminResourceAction;\n\n /**\n * Menu actions (shown in dropdown)\n */\n menuActions?: AdminResourceAction[];\n\n /**\n * External link URL\n */\n externalUrl?: string;\n\n /**\n * Loading state\n */\n loading?: boolean;\n}\n\nconst ActionMenuItem = (props: { action: AdminResourceAction }) => {\n const { action } = props;\n const router = useRouter();\n\n const menuItemProps: Record<string, unknown> = {};\n if (action.href) {\n Object.assign(menuItemProps, router.anchor(action.href));\n } else if (action.onClick) {\n menuItemProps.onClick = action.onClick;\n }\n\n return (\n <Menu.Item\n leftSection={action.icon ? <action.icon size={16} /> : undefined}\n color={action.color}\n disabled={action.disabled}\n {...menuItemProps}\n >\n {action.label}\n </Menu.Item>\n );\n};\n\nconst AdminResourceHeader = (props: AdminResourceHeaderProps) => {\n const {\n backHref,\n backLabel = \"Back\",\n avatar,\n avatarColor = \"blue\",\n title,\n subtitle,\n identifier,\n identifierLabel = \"ID\",\n status,\n badges = [],\n primaryAction,\n menuActions = [],\n externalUrl,\n } = props;\n\n const renderAvatar = () => {\n if (typeof avatar === \"string\") {\n if (avatar.startsWith(\"http\") || avatar.startsWith(\"/\")) {\n return (\n <Avatar src={avatar} size={56} radius=\"md\" color={avatarColor} />\n );\n }\n return (\n <Avatar size={56} radius=\"md\" color={avatarColor}>\n {avatar}\n </Avatar>\n );\n }\n if (avatar) {\n return avatar;\n }\n return (\n <Avatar size={56} radius=\"md\" color={avatarColor}>\n {title.charAt(0).toUpperCase()}\n </Avatar>\n );\n };\n\n return (\n <Stack gap=\"xs\">\n {/* Breadcrumb / Back navigation */}\n {backHref && (\n <Group>\n <ActionButton\n variant=\"subtle\"\n size=\"xs\"\n href={backHref}\n leftSection={<IconChevronLeft size={14} />}\n c=\"dimmed\"\n >\n {backLabel}\n </ActionButton>\n </Group>\n )}\n\n {/* Main header */}\n <Group justify=\"space-between\" align=\"flex-start\" wrap=\"nowrap\">\n {/* Left: Avatar + Info */}\n <Group gap=\"md\" wrap=\"nowrap\">\n {renderAvatar()}\n\n <Stack gap={2} justify=\"center\" style={{ minHeight: 56 }}>\n {/* Title row */}\n <Group gap=\"xs\" align=\"center\">\n <Text size=\"md\" fw={600} lh={1.2}>\n {title}\n </Text>\n {status && (\n <Badge\n size=\"xs\"\n variant=\"light\"\n color={status.color}\n tt=\"lowercase\"\n >\n {status.label}\n </Badge>\n )}\n </Group>\n\n {/* Subtitle */}\n {subtitle && (\n <Text size=\"xs\" c=\"dimmed\">\n {subtitle}\n </Text>\n )}\n </Stack>\n </Group>\n\n {/* Right: Actions */}\n <Group gap=\"xs\">\n {externalUrl && (\n <Tooltip label=\"Open in new tab\" openDelay={500}>\n <ActionIcon\n variant=\"subtle\"\n color=\"gray\"\n component=\"a\"\n href={externalUrl}\n target=\"_blank\"\n >\n <IconExternalLink size={18} />\n </ActionIcon>\n </Tooltip>\n )}\n\n {primaryAction && (\n <ActionButton\n variant={primaryAction.variant ?? \"light\"}\n color={primaryAction.color}\n onClick={primaryAction.onClick}\n href={primaryAction.href}\n loading={primaryAction.loading}\n disabled={primaryAction.disabled}\n leftSection={\n primaryAction.icon ? (\n <primaryAction.icon size={16} />\n ) : undefined\n }\n >\n {primaryAction.label}\n </ActionButton>\n )}\n\n {menuActions.length > 0 && (\n <Menu position=\"bottom-end\" shadow=\"md\" width={220}>\n <Menu.Target>\n <Button\n variant=\"default\"\n rightSection={<IconChevronDown size={16} />}\n >\n Actions\n </Button>\n </Menu.Target>\n <Menu.Dropdown>\n {menuActions.map((action, index) => (\n <ActionMenuItem key={index} action={action} />\n ))}\n </Menu.Dropdown>\n </Menu>\n )}\n </Group>\n </Group>\n </Stack>\n );\n};\n\nexport default AdminResourceHeader;\n","import { Tabs } from \"@mantine/core\";\nimport { useActive, useRouter } from \"alepha/react/router\";\nimport type { ComponentType, ReactNode } from \"react\";\n\nexport interface AdminResourceTab {\n /**\n * Tab key/value\n */\n value: string;\n\n /**\n * Tab label\n */\n label: string;\n\n /**\n * Tab icon\n */\n icon?: ComponentType<{ size?: number }>;\n\n /**\n * Navigation href\n */\n href: string;\n\n /**\n * Whether tab is disabled\n */\n disabled?: boolean;\n\n /**\n * Badge count to show\n */\n count?: number;\n}\n\nexport interface AdminResourceTabsProps {\n /**\n * Array of tab configurations\n */\n tabs: AdminResourceTab[];\n\n /**\n * Currently active tab value\n */\n activeTab?: string;\n\n /**\n * Content to render below tabs\n */\n children?: ReactNode;\n}\n\nconst TabItem = (props: { tab: AdminResourceTab }) => {\n const { tab } = props;\n const router = useRouter();\n const { isActive, isPending } = useActive({ href: tab.href });\n const anchorProps = router.anchor(tab.href);\n\n return (\n <Tabs.Tab\n value={tab.value}\n component=\"a\"\n leftSection={tab.icon ? <tab.icon size={16} /> : undefined}\n disabled={tab.disabled}\n data-active={isActive || undefined}\n style={{\n opacity: isPending ? 0.6 : 1,\n }}\n {...anchorProps}\n >\n {tab.label}\n {tab.count !== undefined && tab.count > 0 && ` (${tab.count})`}\n </Tabs.Tab>\n );\n};\n\nconst AdminResourceTabs = (props: AdminResourceTabsProps) => {\n const { tabs, activeTab, children } = props;\n\n return (\n <Tabs value={activeTab} variant=\"default\">\n <Tabs.List>\n {tabs.map((tab) => (\n <TabItem key={tab.value} tab={tab} />\n ))}\n </Tabs.List>\n\n {children}\n </Tabs>\n );\n};\n\nexport default AdminResourceTabs;\n","import { Box, Center, Loader, Stack, Text } from \"@mantine/core\";\nimport {\n IconBan,\n IconDevices,\n IconHistory,\n IconLock,\n IconMail,\n IconPencil,\n IconSettings,\n IconShieldCheck,\n IconTrash,\n IconUser,\n} from \"@tabler/icons-react\";\nimport type { AdminUserController, UserEntity } from \"alepha/api/users\";\nimport { useClient } from \"alepha/react\";\nimport { NestedView, useRouter, useRouterState } from \"alepha/react/router\";\nimport { useEffect, useState } from \"react\";\nimport type { AdminRouter } from \"../../AdminRouter.ts\";\nimport AdminResourceHeader from \"../shared/AdminResourceHeader.tsx\";\nimport AdminResourceTabs from \"../shared/AdminResourceTabs.tsx\";\n\nexport interface AdminUserLayoutProps {\n userRealmName?: string;\n}\n\nconst AdminUserLayout = (props: AdminUserLayoutProps) => {\n const router = useRouter<AdminRouter>();\n const state = useRouterState();\n const client = useClient<AdminUserController>();\n const userId = state.params.userId as string;\n\n const [user, setUser] = useState<UserEntity | null>(null);\n const [loading, setLoading] = useState(true);\n const [actionLoading, setActionLoading] = useState<string | null>(null);\n\n useEffect(() => {\n const loadUser = async () => {\n try {\n const data = await client.getUser({\n params: { id: userId },\n query: { userRealmName: props.userRealmName },\n });\n setUser(data);\n } finally {\n setLoading(false);\n }\n };\n\n loadUser();\n }, [userId]);\n\n if (loading) {\n return (\n <Center flex={1}>\n <Loader />\n </Center>\n );\n }\n\n if (!user) {\n return (\n <Center flex={1}>\n <Stack align=\"center\" gap=\"xs\">\n <IconUser size={48} opacity={0.3} />\n <Text c=\"dimmed\">User not found</Text>\n </Stack>\n </Center>\n );\n }\n\n const displayName =\n user.firstName || user.lastName\n ? `${user.firstName ?? \"\"} ${user.lastName ?? \"\"}`.trim()\n : user.username || user.email || \"User\";\n\n const currentPath = state.url.pathname;\n const getActiveTab = () => {\n if (currentPath.endsWith(\"/sessions\")) return \"sessions\";\n if (currentPath.endsWith(\"/settings\")) return \"settings\";\n if (currentPath.endsWith(\"/audits\")) return \"audits\";\n return \"profile\";\n };\n\n const handleBlockUser = async () => {\n setActionLoading(\"block\");\n try {\n const updated = await client.updateUser({\n params: { id: userId },\n query: { userRealmName: props.userRealmName },\n body: { enabled: !user.enabled },\n });\n setUser(updated);\n } finally {\n setActionLoading(null);\n }\n };\n\n const handleSendVerification = async () => {\n setActionLoading(\"verify\");\n // TODO: Implement send verification\n await new Promise((resolve) => setTimeout(resolve, 1000));\n setActionLoading(null);\n };\n\n const handleResetPassword = async () => {\n setActionLoading(\"reset\");\n // TODO: Implement reset password\n await new Promise((resolve) => setTimeout(resolve, 1000));\n setActionLoading(null);\n };\n\n const handleDeleteUser = async () => {\n if (\n !confirm(\n \"Are you sure you want to delete this user? This action cannot be undone.\",\n )\n ) {\n return;\n }\n setActionLoading(\"delete\");\n try {\n await client.deleteUser({\n params: { id: userId },\n query: { userRealmName: props.userRealmName },\n });\n await router.go(\"adminUsers\");\n } finally {\n setActionLoading(null);\n }\n };\n\n return (\n <Box py=\"xl\" px=\"xl\" flex={1}>\n <Stack gap=\"lg\">\n <AdminResourceHeader\n backHref={router.path(\"adminUsers\")}\n backLabel=\"Users\"\n avatar={user.picture || displayName.charAt(0).toUpperCase()}\n avatarColor={user.enabled ? \"blue\" : \"gray\"}\n title={displayName}\n subtitle={user.email || user.username || undefined}\n status={{\n label: user.enabled ? \"Active\" : \"Disabled\",\n color: user.enabled ? \"green\" : \"red\",\n }}\n menuActions={[\n {\n label: \"Edit Profile\",\n icon: IconPencil,\n href: router.path(\"adminUserDetails\", { params: { userId } }),\n },\n {\n label: user.enabled ? \"Disable User\" : \"Enable User\",\n icon: user.enabled ? IconBan : IconShieldCheck,\n color: user.enabled ? \"orange\" : \"green\",\n onClick: handleBlockUser,\n loading: actionLoading === \"block\",\n },\n ...(user.email && !user.emailVerified\n ? [\n {\n label: \"Send Verification Email\",\n icon: IconMail,\n onClick: handleSendVerification,\n loading: actionLoading === \"verify\",\n },\n ]\n : []),\n {\n label: \"Reset Password\",\n icon: IconLock,\n onClick: handleResetPassword,\n loading: actionLoading === \"reset\",\n },\n {\n label: \"Delete User\",\n icon: IconTrash,\n color: \"red\",\n onClick: handleDeleteUser,\n loading: actionLoading === \"delete\",\n },\n ]}\n />\n\n <AdminResourceTabs\n activeTab={getActiveTab()}\n tabs={[\n {\n value: \"profile\",\n label: \"Profile\",\n icon: IconUser,\n href: router.path(\"adminUserDetails\", { params: { userId } }),\n },\n {\n value: \"sessions\",\n label: \"Sessions\",\n icon: IconDevices,\n href: router.path(\"adminUserSessions\", { params: { userId } }),\n },\n {\n value: \"audits\",\n label: \"Activity\",\n icon: IconHistory,\n href: router.path(\"adminUserAudits\", { params: { userId } }),\n },\n {\n value: \"settings\",\n label: \"Settings\",\n icon: IconSettings,\n href: router.path(\"adminUserSettings\", { params: { userId } }),\n },\n ]}\n />\n\n <NestedView />\n </Stack>\n </Box>\n );\n};\n\nexport default AdminUserLayout;\n"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { ActionButton, DataTable, Flex, Text } from "@alepha/ui";
2
2
  import { t } from "alepha";
3
- import { useRouterState } from "@alepha/react/router";
4
3
  import { IconDeviceDesktop, IconDeviceMobile, IconDeviceTablet, IconTrash } from "@tabler/icons-react";
4
+ import { useRouterState } from "alepha/react/router";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
- import { useClient } from "@alepha/react";
7
- import { useI18n } from "@alepha/react/i18n";
8
6
  import { Badge, Group } from "@mantine/core";
7
+ import { useClient } from "alepha/react";
8
+ import { useI18n } from "alepha/react/i18n";
9
9
  import { useState } from "react";
10
10
 
11
11
  //#region ../../src/admin/components/users/AdminUserSessions.tsx
@@ -127,4 +127,4 @@ var AdminUserSessions_default = AdminUserSessions;
127
127
 
128
128
  //#endregion
129
129
  export { AdminUserSessions_default as t };
130
- //# sourceMappingURL=AdminUserSessions-DEaGu6n6.js.map
130
+ //# sourceMappingURL=AdminUserSessions-kmkXG-xf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminUserSessions-kmkXG-xf.js","names":[],"sources":["../../src/admin/components/users/AdminUserSessions.tsx"],"sourcesContent":["import { ActionButton, DataTable, Flex, Text } from \"@alepha/ui\";\nimport { Badge, Group } from \"@mantine/core\";\nimport {\n IconDeviceDesktop,\n IconDeviceMobile,\n IconDeviceTablet,\n IconTrash,\n} from \"@tabler/icons-react\";\nimport { type Page, t } from \"alepha\";\nimport type { AdminSessionController, SessionEntity } from \"alepha/api/users\";\nimport { useClient } from \"alepha/react\";\nimport { useI18n } from \"alepha/react/i18n\";\nimport { useRouterState } from \"alepha/react/router\";\nimport { useState } from \"react\";\n\nexport interface AdminUserSessionsProps {\n userRealmName?: string;\n}\n\nconst AdminUserSessions = (props: AdminUserSessionsProps) => {\n const state = useRouterState();\n const client = useClient<AdminSessionController>();\n const { l } = useI18n();\n const userId = state.params.userId as string;\n const [refreshKey, setRefreshKey] = useState(0);\n\n const getDeviceIcon = (device?: string) => {\n switch (device) {\n case \"MOBILE\":\n return <IconDeviceMobile size={14} />;\n case \"TABLET\":\n return <IconDeviceTablet size={14} />;\n default:\n return <IconDeviceDesktop size={14} />;\n }\n };\n\n const isExpired = (expiresAt: Date | string) => {\n return new Date(expiresAt) < new Date();\n };\n\n const handleDelete = async (sessionId: string) => {\n await client.deleteSession({\n params: { id: sessionId },\n query: { userRealmName: props.userRealmName },\n });\n setRefreshKey((k) => k + 1);\n };\n\n const filters = t.object({});\n\n return (\n <Flex flex={1} direction=\"column\">\n <DataTable<SessionEntity, typeof filters>\n key={refreshKey}\n submitOnInit\n defaultSize={10}\n filters={filters}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n }}\n tableTrProps={(item) => {\n if (isExpired(item.expiresAt)) {\n return {\n opacity: 0.5,\n };\n }\n return {};\n }}\n items={async (filters) => {\n const response = await client.findSessions({\n query: {\n ...filters,\n userId,\n userRealmName: props.userRealmName,\n },\n });\n\n return response as Page<SessionEntity>;\n }}\n columns={{\n userAgent: {\n label: \"Device\",\n value: (item) => (\n <Group gap={4}>\n {item.userAgent ? (\n <>\n <Badge\n size=\"xs\"\n variant=\"light\"\n leftSection={getDeviceIcon(item.userAgent.device)}\n >\n {item.userAgent.device}\n </Badge>\n <Text size=\"xs\" c=\"dimmed\">\n {item.userAgent.browser} / {item.userAgent.os}\n </Text>\n </>\n ) : (\n <Text size=\"xs\" c=\"dimmed\">\n -\n </Text>\n )}\n </Group>\n ),\n },\n ip: {\n label: \"IP Address\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" ff=\"monospace\" c=\"dimmed\">\n {item.ip || \"-\"}\n </Text>\n ),\n },\n expiresAt: {\n label: \"Status\",\n fit: true,\n value: (item) => (\n <Badge\n size=\"sm\"\n variant=\"light\"\n color={isExpired(item.expiresAt) ? \"red\" : \"green\"}\n >\n {isExpired(item.expiresAt) ? \"Expired\" : \"Active\"}\n </Badge>\n ),\n },\n createdAt: {\n label: \"Created\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {l(item.createdAt, { date: \"fromNow\" })}\n </Text>\n ),\n },\n actions: {\n label: \"\",\n fit: true,\n value: (item) => (\n <ActionButton\n size=\"xs\"\n variant=\"subtle\"\n color=\"red\"\n onClick={() => handleDelete(item.id)}\n >\n <IconTrash size={14} />\n </ActionButton>\n ),\n },\n }}\n />\n </Flex>\n );\n};\n\nexport default AdminUserSessions;\n"],"mappings":";;;;;;;;;;;AAmBA,MAAM,qBAAqB,UAAkC;CAC3D,MAAM,QAAQ,gBAAgB;CAC9B,MAAM,SAAS,WAAmC;CAClD,MAAM,EAAE,MAAM,SAAS;CACvB,MAAM,SAAS,MAAM,OAAO;CAC5B,MAAM,CAAC,YAAY,iBAAiB,SAAS,EAAE;CAE/C,MAAM,iBAAiB,WAAoB;AACzC,UAAQ,QAAR;GACE,KAAK,SACH,QAAO,oBAAC,oBAAiB,MAAM,KAAM;GACvC,KAAK,SACH,QAAO,oBAAC,oBAAiB,MAAM,KAAM;GACvC,QACE,QAAO,oBAAC,qBAAkB,MAAM,KAAM;;;CAI5C,MAAM,aAAa,cAA6B;AAC9C,SAAO,IAAI,KAAK,UAAU,mBAAG,IAAI,MAAM;;CAGzC,MAAM,eAAe,OAAO,cAAsB;AAChD,QAAM,OAAO,cAAc;GACzB,QAAQ,EAAE,IAAI,WAAW;GACzB,OAAO,EAAE,eAAe,MAAM,eAAe;GAC9C,CAAC;AACF,iBAAe,MAAM,IAAI,EAAE;;AAK7B,QACE,oBAAC;EAAK,MAAM;EAAG,WAAU;YACvB,oBAAC;GAEC;GACA,aAAa;GACb,SARU,EAAE,OAAO,EAAE,CAAC;GAStB,YAAY;IACV,mBAAmB;IACnB,iBAAiB;IAClB;GACD,eAAe,SAAS;AACtB,QAAI,UAAU,KAAK,UAAU,CAC3B,QAAO,EACL,SAAS,IACV;AAEH,WAAO,EAAE;;GAEX,OAAO,OAAO,YAAY;AASxB,WARiB,MAAM,OAAO,aAAa,EACzC,OAAO;KACL,GAAG;KACH;KACA,eAAe,MAAM;KACtB,EACF,CAAC;;GAIJ,SAAS;IACP,WAAW;KACT,OAAO;KACP,QAAQ,SACN,oBAAC;MAAM,KAAK;gBACT,KAAK,YACJ,4CACE,oBAAC;OACC,MAAK;OACL,SAAQ;OACR,aAAa,cAAc,KAAK,UAAU,OAAO;iBAEhD,KAAK,UAAU;QACV,EACR,qBAAC;OAAK,MAAK;OAAK,GAAE;;QACf,KAAK,UAAU;QAAQ;QAAI,KAAK,UAAU;;QACtC,IACN,GAEH,oBAAC;OAAK,MAAK;OAAK,GAAE;iBAAS;QAEpB;OAEH;KAEX;IACD,IAAI;KACF,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,IAAG;MAAY,GAAE;gBAC9B,KAAK,MAAM;OACP;KAEV;IACD,WAAW;KACT,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MACC,MAAK;MACL,SAAQ;MACR,OAAO,UAAU,KAAK,UAAU,GAAG,QAAQ;gBAE1C,UAAU,KAAK,UAAU,GAAG,YAAY;OACnC;KAEX;IACD,WAAW;KACT,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;OAClC;KAEV;IACD,SAAS;KACP,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MACC,MAAK;MACL,SAAQ;MACR,OAAM;MACN,eAAe,aAAa,KAAK,GAAG;gBAEpC,oBAAC,aAAU,MAAM,KAAM;OACV;KAElB;IACF;KAlGI,WAmGL;GACG;;AAIX,gCAAe"}
@@ -0,0 +1,3 @@
1
+ import { t as AdminUserSessions_default } from "./AdminUserSessions-kmkXG-xf.js";
2
+
3
+ export { AdminUserSessions_default as default };
@@ -1,9 +1,9 @@
1
1
  import { ActionButton, Flex, Text } from "@alepha/ui";
2
- import { useRouter, useRouterState } from "@alepha/react/router";
3
2
  import { IconAlertCircle, IconCheck, IconMail, IconTrash } from "@tabler/icons-react";
3
+ import { useRouter, useRouterState } from "alepha/react/router";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
- import { useClient } from "@alepha/react";
6
5
  import { Alert, Card, Group, Loader, Stack } from "@mantine/core";
6
+ import { useClient } from "alepha/react";
7
7
  import { useEffect, useState } from "react";
8
8
 
9
9
  //#region ../../src/admin/components/users/AdminUserSettings.tsx
@@ -53,7 +53,7 @@ const AdminUserSettings = (props) => {
53
53
  query: {
54
54
  userRealmName: props.userRealmName,
55
55
  method: "link",
56
- verifyUrl: `${window.location.origin}/verify-email`
56
+ verifyUrl: `${window.location.origin}/auth/verify-email`
57
57
  },
58
58
  body: { email: user.email }
59
59
  });
@@ -163,4 +163,4 @@ var AdminUserSettings_default = AdminUserSettings;
163
163
 
164
164
  //#endregion
165
165
  export { AdminUserSettings_default as t };
166
- //# sourceMappingURL=AdminUserSettings-Di73D7g2.js.map
166
+ //# sourceMappingURL=AdminUserSettings-BnzRAcqV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminUserSettings-BnzRAcqV.js","names":[],"sources":["../../src/admin/components/users/AdminUserSettings.tsx"],"sourcesContent":["import { ActionButton, Flex, Text } from \"@alepha/ui\";\nimport { Alert, Card, Group, Loader, Stack } from \"@mantine/core\";\nimport {\n IconAlertCircle,\n IconCheck,\n IconMail,\n IconTrash,\n} from \"@tabler/icons-react\";\nimport type {\n AdminUserController,\n UserController,\n UserEntity,\n} from \"alepha/api/users\";\nimport { useClient } from \"alepha/react\";\nimport { useRouter, useRouterState } from \"alepha/react/router\";\nimport { useEffect, useState } from \"react\";\nimport type { AdminRouter } from \"../../AdminRouter.ts\";\n\nexport interface AdminUserSettingsProps {\n userRealmName?: string;\n}\n\nconst AdminUserSettings = (props: AdminUserSettingsProps) => {\n const router = useRouter<AdminRouter>();\n const state = useRouterState();\n const adminClient = useClient<AdminUserController>();\n const userClient = useClient<UserController>();\n const userId = state.params.userId as string;\n\n const [user, setUser] = useState<UserEntity | null>(null);\n const [loading, setLoading] = useState(true);\n const [deleteLoading, setDeleteLoading] = useState(false);\n const [verifyLoading, setVerifyLoading] = useState(false);\n const [verifySuccess, setVerifySuccess] = useState(false);\n\n useEffect(() => {\n const loadUser = async () => {\n try {\n const data = await adminClient.getUser({\n params: { id: userId },\n query: { userRealmName: props.userRealmName },\n });\n setUser(data);\n } finally {\n setLoading(false);\n }\n };\n\n loadUser();\n }, [userId]);\n\n const handleDelete = async () => {\n if (!confirm(\"Are you sure you want to delete this user?\")) {\n return;\n }\n\n setDeleteLoading(true);\n try {\n await adminClient.deleteUser({\n params: { id: userId },\n query: { userRealmName: props.userRealmName },\n });\n await router.go(\"adminUsers\");\n } finally {\n setDeleteLoading(false);\n }\n };\n\n const handleTriggerEmailVerification = async () => {\n if (!user?.email) return;\n\n setVerifyLoading(true);\n setVerifySuccess(false);\n try {\n await userClient.requestEmailVerification({\n query: {\n userRealmName: props.userRealmName,\n method: \"link\",\n verifyUrl: `${window.location.origin}/auth/verify-email`,\n },\n body: { email: user.email },\n });\n setVerifySuccess(true);\n } finally {\n setVerifyLoading(false);\n }\n };\n\n if (loading) {\n return (\n <Flex flex={1} justify=\"center\" align=\"center\">\n <Loader />\n </Flex>\n );\n }\n\n if (!user) {\n return (\n <Flex flex={1} justify=\"center\" align=\"center\">\n <Text c=\"dimmed\">User not found</Text>\n </Flex>\n );\n }\n\n return (\n <Flex flex={1} direction=\"column\" gap=\"md\">\n {user.email && !user.emailVerified && (\n <Card withBorder p=\"lg\">\n <Stack gap=\"md\">\n <Text size=\"lg\" fw={500}>\n Email Verification\n </Text>\n\n <Alert variant=\"light\" color=\"yellow\" icon={<IconMail />}>\n <Text size=\"sm\">\n This user's email ({user.email}) is not verified. You can send a\n verification link to the user.\n </Text>\n </Alert>\n\n {verifySuccess && (\n <Alert variant=\"light\" color=\"green\" icon={<IconCheck />}>\n <Text size=\"sm\">\n Verification link sent successfully to {user.email}.\n </Text>\n </Alert>\n )}\n\n <Group>\n <ActionButton\n leftSection={<IconMail size={16} />}\n loading={verifyLoading}\n onClick={handleTriggerEmailVerification}\n >\n Send Verification Link\n </ActionButton>\n </Group>\n </Stack>\n </Card>\n )}\n\n <Card withBorder p=\"lg\">\n <Stack gap=\"md\">\n <Text size=\"lg\" fw={500} c=\"red\">\n Danger Zone\n </Text>\n\n <Alert variant=\"light\" color=\"red\" icon={<IconAlertCircle />}>\n <Text size=\"sm\">\n Deleting this user will permanently remove their account and all\n associated data. This action cannot be undone.\n </Text>\n </Alert>\n\n <Group>\n <ActionButton\n color=\"red\"\n leftSection={<IconTrash size={16} />}\n loading={deleteLoading}\n onClick={handleDelete}\n >\n Delete User\n </ActionButton>\n </Group>\n </Stack>\n </Card>\n </Flex>\n );\n};\n\nexport default AdminUserSettings;\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { t as AdminUserSettings_default } from "./AdminUserSettings-BnzRAcqV.js";
2
+
3
+ export { AdminUserSettings_default as default };
@@ -1,11 +1,11 @@
1
1
  import { DataTable, Text } from "@alepha/ui";
2
2
  import { t } from "alepha";
3
- import { useRouter } from "@alepha/react/router";
4
3
  import { IconCheck, IconUsersPlus, IconX } from "@tabler/icons-react";
4
+ import { useRouter } from "alepha/react/router";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
- import { useClient } from "@alepha/react";
7
- import { useI18n } from "@alepha/react/i18n";
8
6
  import { Badge, Flex as Flex$1, Group } from "@mantine/core";
7
+ import { useClient } from "alepha/react";
8
+ import { useI18n } from "alepha/react/i18n";
9
9
  import { users } from "alepha/api/users";
10
10
 
11
11
  //#region ../../src/admin/components/users/AdminUsers.tsx
@@ -47,9 +47,9 @@ const AdminUsers = (props) => {
47
47
  if (!item.enabled) baseProps.opacity = .5;
48
48
  return baseProps;
49
49
  },
50
- items: async (filters$1) => {
50
+ items: async (filters) => {
51
51
  return await client.findUsers({ query: {
52
- ...filters$1,
52
+ ...filters,
53
53
  userRealmName: props.userRealmName
54
54
  } });
55
55
  },
@@ -116,4 +116,4 @@ var AdminUsers_default = AdminUsers;
116
116
 
117
117
  //#endregion
118
118
  export { AdminUsers_default as t };
119
- //# sourceMappingURL=AdminUsers-BnGIRvmV.js.map
119
+ //# sourceMappingURL=AdminUsers-CYkcUWCg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminUsers-CYkcUWCg.js","names":["Flex"],"sources":["../../src/admin/components/users/AdminUsers.tsx"],"sourcesContent":["import { DataTable, Text } from \"@alepha/ui\";\nimport { Badge, Flex, Group } from \"@mantine/core\";\nimport { IconCheck, IconUsersPlus, IconX } from \"@tabler/icons-react\";\nimport { type Page, t } from \"alepha\";\nimport {\n type AdminUserController,\n type UserEntity,\n users,\n} from \"alepha/api/users\";\nimport { useClient } from \"alepha/react\";\nimport { useI18n } from \"alepha/react/i18n\";\nimport { useRouter } from \"alepha/react/router\";\nimport type { AdminRouter } from \"../../AdminRouter.ts\";\n\nexport interface AdminUsersProps {\n userRealmName?: string;\n}\n\nconst AdminUsers = (props: AdminUsersProps) => {\n const client = useClient<AdminUserController>();\n const router = useRouter<AdminRouter>();\n const { l } = useI18n();\n\n const filters = t.object({\n query: t.optional(\n t.string({\n $control: {\n query: t.omit(users.schema, [\"id\", \"version\"]),\n },\n }),\n ),\n });\n\n return (\n <Flex flex={1} direction=\"column\">\n <DataTable<UserEntity, typeof filters>\n submitOnInit\n actions={[\n {\n icon: IconUsersPlus,\n href: router.path(\"adminUserCreate\"),\n label: \"Create User\",\n },\n ]}\n defaultSize={10}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 3,\n }}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n striped: false,\n highlightOnHover: true,\n }}\n onFilterChange={(key, value, form) => {\n if (key === \"query\") {\n return form.submit();\n }\n }}\n filters={filters}\n tableTrProps={(item) => {\n const baseProps: Record<string, any> = {\n style: { cursor: \"pointer\" },\n onClick: () =>\n router.go(\"adminUserDetails\", {\n params: { userId: item.id },\n }),\n };\n\n if (!item.enabled) {\n baseProps.opacity = 0.5;\n }\n\n return baseProps;\n }}\n items={async (filters) => {\n const response = await client.findUsers({\n query: {\n ...filters,\n userRealmName: props.userRealmName,\n },\n });\n\n return response as Page<UserEntity>;\n }}\n columns={{\n username: {\n label: \"Username\",\n value: (item) => (\n <Text size=\"sm\" fw={500}>\n {item.username || \"-\"}\n </Text>\n ),\n },\n email: {\n label: \"Email\",\n value: (item) => (\n <Group gap=\"xs\">\n <Text size=\"sm\">{item.email || \"-\"}</Text>\n {item.email && (\n <Badge\n size=\"xs\"\n variant=\"light\"\n color={item.emailVerified ? \"green\" : \"gray\"}\n leftSection={\n item.emailVerified ? (\n <IconCheck size={10} />\n ) : (\n <IconX size={10} />\n )\n }\n >\n {item.emailVerified ? \"Verified\" : \"Unverified\"}\n </Badge>\n )}\n </Group>\n ),\n },\n roles: {\n label: \"Roles\",\n value: (item) => (\n <Group gap={4}>\n {item.roles.map((role: string) => (\n <Badge key={role} size=\"xs\" variant=\"outline\">\n {role}\n </Badge>\n ))}\n </Group>\n ),\n },\n enabled: {\n label: \"Status\",\n fit: true,\n value: (item) => (\n <Badge\n size=\"sm\"\n variant=\"light\"\n color={item.enabled ? \"green\" : \"red\"}\n >\n {item.enabled ? \"Active\" : \"Disabled\"}\n </Badge>\n ),\n },\n createdAt: {\n label: \"Created\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {l(item.createdAt, { date: \"fromNow\" })}\n </Text>\n ),\n },\n }}\n />\n </Flex>\n );\n};\n\nexport default AdminUsers;\n"],"mappings":";;;;;;;;;;;AAkBA,MAAM,cAAc,UAA2B;CAC7C,MAAM,SAAS,WAAgC;CAC/C,MAAM,SAAS,WAAwB;CACvC,MAAM,EAAE,MAAM,SAAS;CAEvB,MAAM,UAAU,EAAE,OAAO,EACvB,OAAO,EAAE,SACP,EAAE,OAAO,EACP,UAAU,EACR,OAAO,EAAE,KAAK,MAAM,QAAQ,CAAC,MAAM,UAAU,CAAC,EAC/C,EACF,CAAC,CACH,EACF,CAAC;AAEF,QACE,oBAACA;EAAK,MAAM;EAAG,WAAU;YACvB,oBAAC;GACC;GACA,SAAS,CACP;IACE,MAAM;IACN,MAAM,OAAO,KAAK,kBAAkB;IACpC,OAAO;IACR,CACF;GACD,aAAa;GACb,eAAe;IACb,kBAAkB;IAClB,SAAS;IACV;GACD,YAAY;IACV,mBAAmB;IACnB,iBAAiB;IACjB,SAAS;IACT,kBAAkB;IACnB;GACD,iBAAiB,KAAK,OAAO,SAAS;AACpC,QAAI,QAAQ,QACV,QAAO,KAAK,QAAQ;;GAGf;GACT,eAAe,SAAS;IACtB,MAAM,YAAiC;KACrC,OAAO,EAAE,QAAQ,WAAW;KAC5B,eACE,OAAO,GAAG,oBAAoB,EAC5B,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAC5B,CAAC;KACL;AAED,QAAI,CAAC,KAAK,QACR,WAAU,UAAU;AAGtB,WAAO;;GAET,OAAO,OAAO,YAAY;AAQxB,WAPiB,MAAM,OAAO,UAAU,EACtC,OAAO;KACL,GAAG;KACH,eAAe,MAAM;KACtB,EACF,CAAC;;GAIJ,SAAS;IACP,UAAU;KACR,OAAO;KACP,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,IAAI;gBACjB,KAAK,YAAY;OACb;KAEV;IACD,OAAO;KACL,OAAO;KACP,QAAQ,SACN,qBAAC;MAAM,KAAI;iBACT,oBAAC;OAAK,MAAK;iBAAM,KAAK,SAAS;QAAW,EACzC,KAAK,SACJ,oBAAC;OACC,MAAK;OACL,SAAQ;OACR,OAAO,KAAK,gBAAgB,UAAU;OACtC,aACE,KAAK,gBACH,oBAAC,aAAU,MAAM,KAAM,GAEvB,oBAAC,SAAM,MAAM,KAAM;iBAItB,KAAK,gBAAgB,aAAa;QAC7B;OAEJ;KAEX;IACD,OAAO;KACL,OAAO;KACP,QAAQ,SACN,oBAAC;MAAM,KAAK;gBACT,KAAK,MAAM,KAAK,SACf,oBAAC;OAAiB,MAAK;OAAK,SAAQ;iBACjC;SADS,KAEJ,CACR;OACI;KAEX;IACD,SAAS;KACP,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MACC,MAAK;MACL,SAAQ;MACR,OAAO,KAAK,UAAU,UAAU;gBAE/B,KAAK,UAAU,WAAW;OACrB;KAEX;IACD,WAAW;KACT,OAAO;KACP,KAAK;KACL,QAAQ,SACN,oBAAC;MAAK,MAAK;MAAK,GAAE;gBACf,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;OAClC;KAEV;IACF;IACD;GACG;;AAIX,yBAAe"}
@@ -0,0 +1,3 @@
1
+ import { t as AdminUsers_default } from "./AdminUsers-CYkcUWCg.js";
2
+
3
+ export { AdminUsers_default as default };
@@ -1,9 +1,9 @@
1
1
  import { AdminShellProps } from "@alepha/ui";
2
2
  import { AuthRouter } from "@alepha/ui/auth";
3
3
  import * as alepha0 from "alepha";
4
- import { ReactAuth } from "@alepha/react/auth";
5
- import * as _alepha_react_router2 from "@alepha/react/router";
6
- import { ReactRouter, Redirection } from "@alepha/react/router";
4
+ import { ReactAuth } from "alepha/react/auth";
5
+ import * as alepha_react_router0 from "alepha/react/router";
6
+ import { ReactRouter, Redirection } from "alepha/react/router";
7
7
  import * as alepha_server_links0 from "alepha/server/links";
8
8
  import * as react_jsx_runtime0 from "react/jsx-runtime";
9
9
  import { FileController } from "alepha/api/files";
@@ -25,19 +25,19 @@ declare class AdminRouter {
25
25
  protected readonly auditCtrl: alepha_server_links0.HttpVirtualClient<AdminAuditController>;
26
26
  protected adminShellProps(): AdminShellProps;
27
27
  protected onNotAuthorized(url: URL): Redirection;
28
- readonly adminLayout: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, {}, _alepha_react_router2.TPropsParentDefault>;
29
- readonly adminUsers: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, any, {}>;
30
- readonly adminUserCreate: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, any, {}>;
31
- readonly adminUserLayout: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, any, {}>;
32
- readonly adminUserDetails: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, any, any>;
33
- readonly adminUserSessions: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, any, any>;
34
- readonly adminUserSettings: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, any, any>;
35
- readonly adminUserAudits: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, any, any>;
36
- readonly adminAudits: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, any, {}>;
37
- readonly adminSessions: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, any, {}>;
38
- readonly adminNotifications: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, any, {}>;
39
- readonly adminFiles: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, any, {}>;
40
- readonly adminParameters: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, any, {}>;
28
+ readonly adminLayout: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, {}, alepha_react_router0.TPropsParentDefault>;
29
+ readonly adminUsers: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, {}>;
30
+ readonly adminUserCreate: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, {}>;
31
+ readonly adminUserLayout: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, {}>;
32
+ readonly adminUserDetails: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, any>;
33
+ readonly adminUserSessions: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, any>;
34
+ readonly adminUserSettings: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, any>;
35
+ readonly adminUserAudits: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, any>;
36
+ readonly adminAudits: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, {}>;
37
+ readonly adminSessions: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, {}>;
38
+ readonly adminNotifications: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, {}>;
39
+ readonly adminFiles: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, {}>;
40
+ readonly adminParameters: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, {}>;
41
41
  }
42
42
  //#endregion
43
43
  //#region ../../src/admin/components/AdminLayout.d.ts
@@ -127,12 +127,27 @@ declare const AdminVerifications: () => react_jsx_runtime0.JSX.Element;
127
127
  declare class MainRouter {
128
128
  auth: AuthRouter;
129
129
  admin: AdminRouter;
130
- layout: _alepha_react_router2.PagePrimitive<_alepha_react_router2.PageConfigSchema, any, _alepha_react_router2.TPropsParentDefault>;
130
+ layout: alepha_react_router0.PagePrimitive<alepha_react_router0.PageConfigSchema, any, alepha_react_router0.TPropsParentDefault>;
131
131
  }
132
132
  //#endregion
133
133
  //#region ../../src/admin/index.d.ts
134
134
  /**
135
- * Admin panel UI Module
135
+ * | type | quality | stability |
136
+ * |------|---------|-----------|
137
+ * | frontend | rare | experimental |
138
+ *
139
+ * Admin panel UI components.
140
+ *
141
+ * **Features:**
142
+ * - AdminLayout for admin pages
143
+ * - AdminUsers with user list, create, details, settings, sessions, audits
144
+ * - AdminFiles for file management
145
+ * - AdminJobs for job monitoring
146
+ * - AdminNotifications for notification management
147
+ * - AdminParameters for configuration management
148
+ * - AdminSessions for session management
149
+ * - AdminAudits for audit log viewing
150
+ * - AdminVerifications for verification management
136
151
  *
137
152
  * @module alepha.ui.admin
138
153
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/admin/AdminRouter.ts","../../src/admin/components/AdminLayout.tsx","../../src/admin/components/audits/AdminAudits.tsx","../../src/admin/components/files/AdminFiles.tsx","../../src/admin/components/jobs/AdminJobs.tsx","../../src/admin/components/notifications/AdminNotifications.tsx","../../src/admin/components/parameters/AdminParameters.tsx","../../src/admin/components/sessions/AdminSessions.tsx","../../src/admin/components/users/AdminUserAudits.tsx","../../src/admin/components/users/AdminUserCreate.tsx","../../src/admin/components/users/AdminUserDetails.tsx","../../src/admin/components/users/AdminUserLayout.tsx","../../src/admin/components/users/AdminUserSessions.tsx","../../src/admin/components/users/AdminUserSettings.tsx","../../src/admin/components/users/AdminUsers.tsx","../../src/admin/components/verifications/AdminVerifications.tsx","../../src/admin/MainRouter.ts","../../src/admin/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/admin/AdminRouter.ts","../../src/admin/components/AdminLayout.tsx","../../src/admin/components/audits/AdminAudits.tsx","../../src/admin/components/files/AdminFiles.tsx","../../src/admin/components/jobs/AdminJobs.tsx","../../src/admin/components/notifications/AdminNotifications.tsx","../../src/admin/components/parameters/AdminParameters.tsx","../../src/admin/components/sessions/AdminSessions.tsx","../../src/admin/components/users/AdminUserAudits.tsx","../../src/admin/components/users/AdminUserCreate.tsx","../../src/admin/components/users/AdminUserDetails.tsx","../../src/admin/components/users/AdminUserLayout.tsx","../../src/admin/components/users/AdminUserSessions.tsx","../../src/admin/components/users/AdminUserSettings.tsx","../../src/admin/components/users/AdminUsers.tsx","../../src/admin/components/verifications/AdminVerifications.tsx","../../src/admin/MainRouter.ts","../../src/admin/index.ts"],"mappings":"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"}
@@ -1,27 +1,27 @@
1
- import { t as AdminLayout_default } from "./AdminLayout-XiSivwWH.js";
2
- import { t as AdminAudits_default } from "./AdminAudits-DIrCCPk3.js";
3
- import { t as AdminFiles_default } from "./AdminFiles-RsL178Ta.js";
4
- import { t as AdminNotifications_default } from "./AdminNotifications-cIbywWKi.js";
5
- import { t as AdminParameters_default } from "./AdminParameters-D-q3Qmhv.js";
6
- import { t as AdminSessions_default } from "./AdminSessions-vOgkrQ2U.js";
7
- import { t as AdminUserAudits_default } from "./AdminUserAudits-CSsN1fIC.js";
8
- import { t as AdminUserCreate_default } from "./AdminUserCreate-B72nu-3W.js";
9
- import { t as AdminUserDetails_default } from "./AdminUserDetails-CKM2IEMr.js";
10
- import { t as AdminUserLayout_default } from "./AdminUserLayout-D7En9UBq.js";
11
- import { t as AdminUserSessions_default } from "./AdminUserSessions-DEaGu6n6.js";
12
- import { t as AdminUserSettings_default } from "./AdminUserSettings-Di73D7g2.js";
13
- import { t as AdminUsers_default } from "./AdminUsers-BnGIRvmV.js";
1
+ import { t as AdminLayout_default } from "./AdminLayout-QJLIesuG.js";
2
+ import { t as AdminAudits_default } from "./AdminAudits-C0DPYw0W.js";
3
+ import { t as AdminFiles_default } from "./AdminFiles-Cu8GHgQ3.js";
4
+ import { t as AdminNotifications_default } from "./AdminNotifications-CgYkBuG_.js";
5
+ import { t as AdminParameters_default } from "./AdminParameters-hjNG_KXb.js";
6
+ import { t as AdminSessions_default } from "./AdminSessions-Bey9cuy1.js";
7
+ import { t as AdminUserAudits_default } from "./AdminUserAudits-C7AN9jx7.js";
8
+ import { t as AdminUserCreate_default } from "./AdminUserCreate-DiXi1EWB.js";
9
+ import { t as AdminUserDetails_default } from "./AdminUserDetails-yM4x8JE6.js";
10
+ import { t as AdminUserLayout_default } from "./AdminUserLayout-D9bqGt6T.js";
11
+ import { t as AdminUserSessions_default } from "./AdminUserSessions-kmkXG-xf.js";
12
+ import { t as AdminUserSettings_default } from "./AdminUserSettings-BnzRAcqV.js";
13
+ import { t as AdminUsers_default } from "./AdminUsers-CYkcUWCg.js";
14
14
  import { AlephaMantineProvider, AlephaUI, DataTable, Flex, Text } from "@alepha/ui";
15
15
  import { AlephaUIAuth, AuthRouter } from "@alepha/ui/auth";
16
16
  import { $inject, $module, t } from "alepha";
17
- import { ReactAuth } from "@alepha/react/auth";
18
- import { $page, ReactRouter, Redirection } from "@alepha/react/router";
19
17
  import { IconBell, IconCheck, IconClock, IconDevices, IconFile, IconHistory, IconPlayerPlay, IconPlus, IconSettings, IconShieldCheck, IconUser, IconUsers, IconX } from "@tabler/icons-react";
18
+ import { ReactAuth } from "alepha/react/auth";
19
+ import { $page, ReactRouter, Redirection } from "alepha/react/router";
20
20
  import { $client } from "alepha/server/links";
21
21
  import { jsx, jsxs } from "react/jsx-runtime";
22
- import { useClient } from "@alepha/react";
23
- import { useI18n } from "@alepha/react/i18n";
24
22
  import { Badge, Stack } from "@mantine/core";
23
+ import { useClient } from "alepha/react";
24
+ import { useI18n } from "alepha/react/i18n";
25
25
  import { jobExecutions } from "alepha/api/jobs";
26
26
 
27
27
  //#region ../../src/admin/AdminRouter.ts
@@ -45,7 +45,7 @@ var AdminRouter = class {
45
45
  path: "/admin",
46
46
  label: "Admin",
47
47
  can: () => this.userCtrl.findUsers.can(),
48
- lazy: () => import("./AdminLayout-BnSmtA4x.js"),
48
+ lazy: () => import("./AdminLayout-BfeFXiul.js"),
49
49
  props: () => ({ adminShellProps: this.adminShellProps() }),
50
50
  loader: ({ user, url }) => {
51
51
  if (!user) throw this.onNotAuthorized(url);
@@ -58,7 +58,7 @@ var AdminRouter = class {
58
58
  path: "/users",
59
59
  label: "Users",
60
60
  description: "Manage application users and their roles.",
61
- lazy: () => import("./AdminUsers-CG9-2Z8W.js"),
61
+ lazy: () => import("./AdminUsers-DdFXzrEn.js"),
62
62
  can: () => this.userCtrl.findUsers.can()
63
63
  });
64
64
  adminUserCreate = $page({
@@ -67,7 +67,7 @@ var AdminRouter = class {
67
67
  path: "/users/create",
68
68
  label: "Create User",
69
69
  description: "Create a new user account.",
70
- lazy: () => import("./AdminUserCreate-DpA13zwj.js"),
70
+ lazy: () => import("./AdminUserCreate-Chr-7hLk.js"),
71
71
  can: () => this.userCtrl.createUser.can()
72
72
  });
73
73
  adminUserLayout = $page({
@@ -75,32 +75,32 @@ var AdminRouter = class {
75
75
  parent: this.adminLayout,
76
76
  path: "/users/:userId",
77
77
  label: "User",
78
- lazy: () => import("./AdminUserLayout-BNBOEiAO.js"),
78
+ lazy: () => import("./AdminUserLayout-CfeQHH6e.js"),
79
79
  can: () => this.userCtrl.getUser.can()
80
80
  });
81
81
  adminUserDetails = $page({
82
82
  parent: this.adminUserLayout,
83
83
  path: "/details",
84
84
  label: "Details",
85
- lazy: () => import("./AdminUserDetails-Zib_B6Al.js")
85
+ lazy: () => import("./AdminUserDetails-Dcn3OwMC.js")
86
86
  });
87
87
  adminUserSessions = $page({
88
88
  parent: this.adminUserLayout,
89
89
  path: "/sessions",
90
90
  label: "Sessions",
91
- lazy: () => import("./AdminUserSessions-D9X2_HMA.js")
91
+ lazy: () => import("./AdminUserSessions-rvA0ztxn.js")
92
92
  });
93
93
  adminUserSettings = $page({
94
94
  parent: this.adminUserLayout,
95
95
  path: "/settings",
96
96
  label: "Settings",
97
- lazy: () => import("./AdminUserSettings-yI-JECf5.js")
97
+ lazy: () => import("./AdminUserSettings-CXs-jtRv.js")
98
98
  });
99
99
  adminUserAudits = $page({
100
100
  parent: this.adminUserLayout,
101
101
  path: "/audits",
102
102
  label: "Audit Log",
103
- lazy: () => import("./AdminUserAudits-DmAnivo3.js"),
103
+ lazy: () => import("./AdminUserAudits-Cp_ERd2g.js"),
104
104
  can: () => this.auditCtrl.findByUser.can()
105
105
  });
106
106
  adminAudits = $page({
@@ -109,7 +109,7 @@ var AdminRouter = class {
109
109
  path: "/audits",
110
110
  label: "Audit Log",
111
111
  description: "View system-wide audit trail and activity logs.",
112
- lazy: () => import("./AdminAudits-B3EhKhN7.js"),
112
+ lazy: () => import("./AdminAudits-BlGGKLof.js"),
113
113
  can: () => this.auditCtrl.findAudits.can()
114
114
  });
115
115
  adminSessions = $page({
@@ -118,7 +118,7 @@ var AdminRouter = class {
118
118
  path: "/sessions",
119
119
  label: "Sessions",
120
120
  description: "View and manage all active sessions.",
121
- lazy: () => import("./AdminSessions-DHG9zPfr.js"),
121
+ lazy: () => import("./AdminSessions-Cn4_jB04.js"),
122
122
  can: () => this.sessionCtrl.findSessions.can()
123
123
  });
124
124
  adminNotifications = $page({
@@ -127,7 +127,7 @@ var AdminRouter = class {
127
127
  path: "/notifications",
128
128
  label: "Notifications",
129
129
  description: "View notification history and status.",
130
- lazy: () => import("./AdminNotifications-BSL4B2fQ.js"),
130
+ lazy: () => import("./AdminNotifications-DmfGPqHe.js"),
131
131
  can: () => this.notificationCtrl.findNotifications.can()
132
132
  });
133
133
  adminFiles = $page({
@@ -136,7 +136,7 @@ var AdminRouter = class {
136
136
  path: "/files",
137
137
  label: "Files",
138
138
  description: "Manage uploaded files and storage.",
139
- lazy: () => import("./AdminFiles-C8OG4dtD.js"),
139
+ lazy: () => import("./AdminFiles-Bg9feLFH.js"),
140
140
  can: () => this.fileCtrl.findFiles.can()
141
141
  });
142
142
  adminParameters = $page({
@@ -145,7 +145,7 @@ var AdminRouter = class {
145
145
  path: "/parameters",
146
146
  label: "Parameters",
147
147
  description: "View and manage application configuration parameters.",
148
- lazy: () => import("./AdminParameters-BKObzzpN.js"),
148
+ lazy: () => import("./AdminParameters-Cl-R0nXt.js"),
149
149
  can: () => this.configCtrl.getConfigTree.can()
150
150
  });
151
151
  };
@@ -223,8 +223,8 @@ const AdminJobs = () => {
223
223
  if (key === "job" || key === "status") return form.submit();
224
224
  },
225
225
  filters,
226
- items: async (filters$1) => {
227
- return await client.getJobExecutions({ query: filters$1 });
226
+ items: async (filters) => {
227
+ return await client.getJobExecutions({ query: filters });
228
228
  },
229
229
  columns: {
230
230
  job: {
@@ -320,7 +320,22 @@ var AdminVerifications_default = AdminVerifications;
320
320
  //#endregion
321
321
  //#region ../../src/admin/index.ts
322
322
  /**
323
- * Admin panel UI Module
323
+ * | type | quality | stability |
324
+ * |------|---------|-----------|
325
+ * | frontend | rare | experimental |
326
+ *
327
+ * Admin panel UI components.
328
+ *
329
+ * **Features:**
330
+ * - AdminLayout for admin pages
331
+ * - AdminUsers with user list, create, details, settings, sessions, audits
332
+ * - AdminFiles for file management
333
+ * - AdminJobs for job monitoring
334
+ * - AdminNotifications for notification management
335
+ * - AdminParameters for configuration management
336
+ * - AdminSessions for session management
337
+ * - AdminAudits for audit log viewing
338
+ * - AdminVerifications for verification management
324
339
  *
325
340
  * @module alepha.ui.admin
326
341
  */