@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.
- package/dist/admin/AdminAudits-BlGGKLof.js +3 -0
- package/dist/admin/{AdminAudits-DIrCCPk3.js → AdminAudits-C0DPYw0W.js} +4 -4
- package/dist/admin/AdminAudits-C0DPYw0W.js.map +1 -0
- package/dist/admin/AdminFiles-Bg9feLFH.js +3 -0
- package/dist/admin/{AdminFiles-RsL178Ta.js → AdminFiles-Cu8GHgQ3.js} +5 -5
- package/dist/admin/AdminFiles-Cu8GHgQ3.js.map +1 -0
- package/dist/admin/AdminLayout-BfeFXiul.js +3 -0
- package/dist/admin/{AdminLayout-XiSivwWH.js → AdminLayout-QJLIesuG.js} +1 -1
- package/dist/admin/{AdminLayout-XiSivwWH.js.map → AdminLayout-QJLIesuG.js.map} +1 -1
- package/dist/admin/{AdminNotifications-cIbywWKi.js → AdminNotifications-CgYkBuG_.js} +5 -5
- package/dist/admin/AdminNotifications-CgYkBuG_.js.map +1 -0
- package/dist/admin/AdminNotifications-DmfGPqHe.js +3 -0
- package/dist/admin/{AdminParameters-BKObzzpN.js → AdminParameters-Cl-R0nXt.js} +1 -1
- package/dist/admin/{AdminParameters-D-q3Qmhv.js → AdminParameters-hjNG_KXb.js} +4 -4
- package/dist/admin/AdminParameters-hjNG_KXb.js.map +1 -0
- package/dist/admin/{AdminSessions-vOgkrQ2U.js → AdminSessions-Bey9cuy1.js} +6 -6
- package/dist/admin/AdminSessions-Bey9cuy1.js.map +1 -0
- package/dist/admin/AdminSessions-Cn4_jB04.js +3 -0
- package/dist/admin/{AdminUserAudits-CSsN1fIC.js → AdminUserAudits-C7AN9jx7.js} +4 -4
- package/dist/admin/AdminUserAudits-C7AN9jx7.js.map +1 -0
- package/dist/admin/{AdminUserAudits-DmAnivo3.js → AdminUserAudits-Cp_ERd2g.js} +1 -1
- package/dist/admin/{AdminUserCreate-DpA13zwj.js → AdminUserCreate-Chr-7hLk.js} +1 -1
- package/dist/admin/{AdminUserCreate-B72nu-3W.js → AdminUserCreate-DiXi1EWB.js} +4 -4
- package/dist/admin/AdminUserCreate-DiXi1EWB.js.map +1 -0
- package/dist/admin/{AdminUserDetails-Zib_B6Al.js → AdminUserDetails-Dcn3OwMC.js} +1 -1
- package/dist/admin/{AdminUserDetails-CKM2IEMr.js → AdminUserDetails-yM4x8JE6.js} +5 -5
- package/dist/admin/AdminUserDetails-yM4x8JE6.js.map +1 -0
- package/dist/admin/{AdminUserLayout-BNBOEiAO.js → AdminUserLayout-CfeQHH6e.js} +1 -1
- package/dist/admin/{AdminUserLayout-D7En9UBq.js → AdminUserLayout-D9bqGt6T.js} +3 -3
- package/dist/admin/AdminUserLayout-D9bqGt6T.js.map +1 -0
- package/dist/admin/{AdminUserSessions-DEaGu6n6.js → AdminUserSessions-kmkXG-xf.js} +4 -4
- package/dist/admin/AdminUserSessions-kmkXG-xf.js.map +1 -0
- package/dist/admin/AdminUserSessions-rvA0ztxn.js +3 -0
- package/dist/admin/{AdminUserSettings-Di73D7g2.js → AdminUserSettings-BnzRAcqV.js} +4 -4
- package/dist/admin/AdminUserSettings-BnzRAcqV.js.map +1 -0
- package/dist/admin/AdminUserSettings-CXs-jtRv.js +3 -0
- package/dist/admin/{AdminUsers-BnGIRvmV.js → AdminUsers-CYkcUWCg.js} +6 -6
- package/dist/admin/AdminUsers-CYkcUWCg.js.map +1 -0
- package/dist/admin/AdminUsers-DdFXzrEn.js +3 -0
- package/dist/admin/index.d.ts +33 -18
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +48 -33
- package/dist/admin/index.js.map +1 -1
- package/dist/auth/{AuthLayout-B1sUB8fB.js → AuthLayout-Dj5K4SIN.js} +2 -2
- package/dist/auth/AuthLayout-Dj5K4SIN.js.map +1 -0
- package/dist/{demo/IconGoogle-DvmFiEDB.js → auth/IconGoogle-DpSlPZ1u.js} +1 -1
- package/dist/auth/{IconGoogle-Cm5d8J3f.js.map → IconGoogle-DpSlPZ1u.js.map} +1 -1
- package/dist/auth/{Login-Cjxv3EDi.js → Login-BAFVcX_J.js} +6 -6
- package/dist/auth/Login-BAFVcX_J.js.map +1 -0
- package/dist/auth/Login-C5PUsp8I.js +4 -0
- package/dist/auth/{Register-CGlbQ50l.js → Register-CZRXEcWy.js} +7 -7
- package/dist/auth/Register-CZRXEcWy.js.map +1 -0
- package/dist/auth/Register-DMTs5ep_.js +4 -0
- package/dist/auth/ResetPassword-D-mhMtmx.js +3 -0
- package/dist/auth/{ResetPassword-DvqD_1SJ.js → ResetPassword-DTYNsBIj.js} +5 -5
- package/dist/auth/ResetPassword-DTYNsBIj.js.map +1 -0
- package/dist/auth/VerifyEmail-BsrCmncc.js +3 -0
- package/dist/auth/{VerifyEmail-VaBruOnO.js → VerifyEmail-DolENWGn.js} +4 -4
- package/dist/auth/VerifyEmail-DolENWGn.js.map +1 -0
- package/dist/auth/index.d.ts +34 -23
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +25 -14
- package/dist/auth/index.js.map +1 -1
- package/dist/core/index.d.ts +272 -209
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +314 -99
- package/dist/core/index.js.map +1 -1
- package/dist/demo/{DemoDataTable-2mzzf__a.js → DemoDataTable-CguplbR7.js} +2 -2
- package/dist/demo/{DemoDataTable-2mzzf__a.js.map → DemoDataTable-CguplbR7.js.map} +1 -1
- package/dist/demo/{DemoHome-CnuL5WV9.js → DemoHome-Cce2bWmg.js} +1 -1
- package/dist/demo/{DemoHome-CnuL5WV9.js.map → DemoHome-Cce2bWmg.js.map} +1 -1
- package/dist/demo/DemoHome-DC9qkMNe.js +3 -0
- package/dist/demo/DemoJsonViewer-DIssGVlJ.js +4 -0
- package/dist/demo/{DemoJsonViewer-NUGst5wW.js → DemoJsonViewer-Dgdk3Txb.js} +3 -3
- package/dist/demo/{DemoJsonViewer-NUGst5wW.js.map → DemoJsonViewer-Dgdk3Txb.js.map} +1 -1
- package/dist/demo/{DemoLayout-dvbeuBBf.js → DemoLayout-B20TEuhV.js} +2 -2
- package/dist/demo/DemoLayout-B20TEuhV.js.map +1 -0
- package/dist/demo/DemoLayout-DSRyf4qJ.js +3 -0
- package/dist/demo/{DemoLogin-DvltFTER.js → DemoLogin-mtkN6340.js} +7 -7
- package/dist/demo/DemoLogin-mtkN6340.js.map +1 -0
- package/dist/demo/{DemoRegister-Vu6ZPWib.js → DemoRegister-C0MW7anp.js} +8 -8
- package/dist/demo/DemoRegister-C0MW7anp.js.map +1 -0
- package/dist/demo/{DemoResetPassword-BFwmqwec.js → DemoResetPassword-CPTy88iK.js} +6 -6
- package/dist/demo/DemoResetPassword-CPTy88iK.js.map +1 -0
- package/dist/demo/{DemoSidebar-DWnjYHoP.js → DemoSidebar-MVmQKfMt.js} +2 -2
- package/dist/demo/{DemoSidebar-DWnjYHoP.js.map → DemoSidebar-MVmQKfMt.js.map} +1 -1
- package/dist/demo/{DemoTypeForm-P5_VInW2.js → DemoTypeForm-w-qtfRlC.js} +3 -3
- package/dist/demo/DemoTypeForm-w-qtfRlC.js.map +1 -0
- package/dist/demo/{DemoVerifyEmail-C_ooC5u8.js → DemoVerifyEmail-C8FFJT5A.js} +5 -5
- package/dist/demo/DemoVerifyEmail-C8FFJT5A.js.map +1 -0
- package/dist/{auth/IconGoogle-Cm5d8J3f.js → demo/IconGoogle-CbBF8Hqq.js} +1 -1
- package/dist/demo/{IconGoogle-DvmFiEDB.js.map → IconGoogle-CbBF8Hqq.js.map} +1 -1
- package/dist/demo/{Showcase-vemLuO2t.js → Showcase-CQrMWars.js} +4 -4
- package/dist/demo/Showcase-CQrMWars.js.map +1 -0
- package/dist/demo/index.d.ts +37 -27
- package/dist/demo/index.d.ts.map +1 -1
- package/dist/demo/index.js +26 -16
- package/dist/demo/index.js.map +1 -1
- package/dist/json/index.d.ts +17 -17
- package/dist/json/index.d.ts.map +1 -1
- package/package.json +13 -14
- package/src/admin/AdminRouter.ts +2 -2
- package/src/admin/MainRouter.ts +1 -1
- package/src/admin/components/audits/AdminAudits.tsx +3 -3
- package/src/admin/components/files/AdminFiles.tsx +2 -2
- package/src/admin/components/jobs/AdminJobs.tsx +2 -2
- package/src/admin/components/notifications/AdminNotifications.tsx +2 -2
- package/src/admin/components/parameters/AdminParameters.tsx +1 -1
- package/src/admin/components/parameters/ParameterDetails.tsx +2 -2
- package/src/admin/components/parameters/ParameterHistory.tsx +1 -1
- package/src/admin/components/parameters/types.ts +9 -3
- package/src/admin/components/sessions/AdminSessions.tsx +3 -3
- package/src/admin/components/shared/AdminResourceHeader.tsx +1 -1
- package/src/admin/components/shared/AdminResourceTabs.tsx +1 -1
- package/src/admin/components/users/AdminUserAudits.tsx +3 -3
- package/src/admin/components/users/AdminUserCreate.tsx +3 -3
- package/src/admin/components/users/AdminUserDetails.tsx +4 -4
- package/src/admin/components/users/AdminUserLayout.tsx +2 -2
- package/src/admin/components/users/AdminUserSessions.tsx +3 -3
- package/src/admin/components/users/AdminUserSettings.tsx +3 -3
- package/src/admin/components/users/AdminUsers.tsx +3 -3
- package/src/admin/index.ts +16 -1
- package/src/auth/AuthI18n.ts +1 -1
- package/src/auth/AuthRouter.ts +2 -2
- package/src/auth/components/AuthLayout.tsx +1 -1
- package/src/auth/components/Login.tsx +4 -4
- package/src/auth/components/Register.tsx +5 -5
- package/src/auth/components/ResetPassword.tsx +4 -4
- package/src/auth/components/VerifyEmail.tsx +3 -3
- package/src/auth/components/buttons/UserButton.tsx +2 -2
- package/src/auth/index.ts +14 -3
- package/src/core/RootRouter.ts +1 -1
- package/src/core/atoms/alephaSidebarAtom.ts +57 -0
- package/src/core/components/buttons/ActionButton.tsx +9 -9
- package/src/core/components/buttons/BurgerButton.tsx +5 -4
- package/src/core/components/buttons/LanguageButton.tsx +1 -1
- package/src/core/components/buttons/OmnibarButton.tsx +20 -1
- package/src/core/components/buttons/ThemeButton.tsx +1 -1
- package/src/core/components/buttons/ToggleSidebarButton.tsx +33 -23
- package/src/core/components/form/Control.tsx +1 -1
- package/src/core/components/form/ControlArray.tsx +2 -2
- package/src/core/components/form/ControlDate.tsx +1 -1
- package/src/core/components/form/ControlNumber.tsx +2 -2
- package/src/core/components/form/ControlObject.tsx +1 -1
- package/src/core/components/form/ControlQueryBuilder.tsx +1 -1
- package/src/core/components/form/ControlSelect.tsx +1 -1
- package/src/core/components/form/TypeForm.tsx +2 -2
- package/src/core/components/layout/AdminShell.tsx +205 -27
- package/src/core/components/layout/AlephaMantineProvider.tsx +3 -3
- package/src/core/components/layout/Omnibar.tsx +2 -2
- package/src/core/components/layout/Sidebar.tsx +42 -77
- package/src/core/components/table/DataTable.tsx +2 -2
- package/src/core/components/table/DataTableFilters.tsx +1 -1
- package/src/core/components/table/types.ts +1 -1
- package/src/core/hooks/useDialog.ts +1 -1
- package/src/core/hooks/useTheme.ts +1 -1
- package/src/core/hooks/useToast.ts +1 -1
- package/src/core/index.ts +57 -6
- package/src/core/providers/ThemeProvider.ts +1 -1
- package/src/core/styles.css +58 -0
- package/src/core/utils/parseInput.ts +1 -1
- package/src/demo/DemoRouter.ts +1 -1
- package/src/demo/components/DemoLayout.tsx +1 -1
- package/src/demo/components/core/DemoTypeForm.tsx +1 -1
- package/src/demo/components/json/DemoJsonViewer.tsx +1 -1
- package/src/demo/components/shared/Showcase.tsx +1 -1
- package/src/demo/index.ts +11 -1
- package/src/json/index.ts +13 -0
- package/dist/admin/AdminAudits-B3EhKhN7.js +0 -3
- package/dist/admin/AdminAudits-DIrCCPk3.js.map +0 -1
- package/dist/admin/AdminFiles-C8OG4dtD.js +0 -3
- package/dist/admin/AdminFiles-RsL178Ta.js.map +0 -1
- package/dist/admin/AdminLayout-BnSmtA4x.js +0 -3
- package/dist/admin/AdminNotifications-BSL4B2fQ.js +0 -3
- package/dist/admin/AdminNotifications-cIbywWKi.js.map +0 -1
- package/dist/admin/AdminParameters-D-q3Qmhv.js.map +0 -1
- package/dist/admin/AdminSessions-DHG9zPfr.js +0 -3
- package/dist/admin/AdminSessions-vOgkrQ2U.js.map +0 -1
- package/dist/admin/AdminUserAudits-CSsN1fIC.js.map +0 -1
- package/dist/admin/AdminUserCreate-B72nu-3W.js.map +0 -1
- package/dist/admin/AdminUserDetails-CKM2IEMr.js.map +0 -1
- package/dist/admin/AdminUserLayout-D7En9UBq.js.map +0 -1
- package/dist/admin/AdminUserSessions-D9X2_HMA.js +0 -3
- package/dist/admin/AdminUserSessions-DEaGu6n6.js.map +0 -1
- package/dist/admin/AdminUserSettings-Di73D7g2.js.map +0 -1
- package/dist/admin/AdminUserSettings-yI-JECf5.js +0 -3
- package/dist/admin/AdminUsers-BnGIRvmV.js.map +0 -1
- package/dist/admin/AdminUsers-CG9-2Z8W.js +0 -3
- package/dist/auth/AuthLayout-B1sUB8fB.js.map +0 -1
- package/dist/auth/Login-BWi-pPbO.js +0 -4
- package/dist/auth/Login-Cjxv3EDi.js.map +0 -1
- package/dist/auth/Register-CGlbQ50l.js.map +0 -1
- package/dist/auth/Register-CWdkXWkc.js +0 -4
- package/dist/auth/ResetPassword-BUdM7T_R.js +0 -3
- package/dist/auth/ResetPassword-DvqD_1SJ.js.map +0 -1
- package/dist/auth/VerifyEmail-BYmtnkEl.js +0 -3
- package/dist/auth/VerifyEmail-VaBruOnO.js.map +0 -1
- package/dist/demo/DemoHome-D6Z7EE4V.js +0 -3
- package/dist/demo/DemoJsonViewer-CYUggLop.js +0 -4
- package/dist/demo/DemoLayout-ZFDzyvY3.js +0 -3
- package/dist/demo/DemoLayout-dvbeuBBf.js.map +0 -1
- package/dist/demo/DemoLogin-DvltFTER.js.map +0 -1
- package/dist/demo/DemoRegister-Vu6ZPWib.js.map +0 -1
- package/dist/demo/DemoResetPassword-BFwmqwec.js.map +0 -1
- package/dist/demo/DemoTypeForm-P5_VInW2.js.map +0 -1
- package/dist/demo/DemoVerifyEmail-C_ooC5u8.js.map +0 -1
- 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-
|
|
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"}
|
|
@@ -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-
|
|
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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"}
|
|
@@ -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
|
|
50
|
+
items: async (filters) => {
|
|
51
51
|
return await client.findUsers({ query: {
|
|
52
|
-
...filters
|
|
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-
|
|
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"}
|
package/dist/admin/index.d.ts
CHANGED
|
@@ -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 "
|
|
5
|
-
import * as
|
|
6
|
-
import { ReactRouter, Redirection } from "
|
|
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:
|
|
29
|
-
readonly adminUsers:
|
|
30
|
-
readonly adminUserCreate:
|
|
31
|
-
readonly adminUserLayout:
|
|
32
|
-
readonly adminUserDetails:
|
|
33
|
-
readonly adminUserSessions:
|
|
34
|
-
readonly adminUserSettings:
|
|
35
|
-
readonly adminUserAudits:
|
|
36
|
-
readonly adminAudits:
|
|
37
|
-
readonly adminSessions:
|
|
38
|
-
readonly adminNotifications:
|
|
39
|
-
readonly adminFiles:
|
|
40
|
-
readonly adminParameters:
|
|
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:
|
|
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
|
-
*
|
|
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":";;;;;;;;;;;;;;;cAyBa,WAAA;EAAA,
|
|
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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"}
|
package/dist/admin/index.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { t as AdminLayout_default } from "./AdminLayout-
|
|
2
|
-
import { t as AdminAudits_default } from "./AdminAudits-
|
|
3
|
-
import { t as AdminFiles_default } from "./AdminFiles-
|
|
4
|
-
import { t as AdminNotifications_default } from "./AdminNotifications-
|
|
5
|
-
import { t as AdminParameters_default } from "./AdminParameters-
|
|
6
|
-
import { t as AdminSessions_default } from "./AdminSessions-
|
|
7
|
-
import { t as AdminUserAudits_default } from "./AdminUserAudits-
|
|
8
|
-
import { t as AdminUserCreate_default } from "./AdminUserCreate-
|
|
9
|
-
import { t as AdminUserDetails_default } from "./AdminUserDetails-
|
|
10
|
-
import { t as AdminUserLayout_default } from "./AdminUserLayout-
|
|
11
|
-
import { t as AdminUserSessions_default } from "./AdminUserSessions-
|
|
12
|
-
import { t as AdminUserSettings_default } from "./AdminUserSettings-
|
|
13
|
-
import { t as AdminUsers_default } from "./AdminUsers-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
227
|
-
return await client.getJobExecutions({ query: filters
|
|
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
|
-
*
|
|
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
|
*/
|