@alepha/ui 0.14.2 → 0.14.4

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 (54) hide show
  1. package/dist/admin/AdminAudits-DIrCCPk3.js.map +1 -1
  2. package/dist/admin/AdminNotifications-cIbywWKi.js.map +1 -1
  3. package/dist/admin/AdminParameters-D-q3Qmhv.js.map +1 -1
  4. package/dist/admin/AdminSessions-vOgkrQ2U.js.map +1 -1
  5. package/dist/admin/AdminUserAudits-CSsN1fIC.js.map +1 -1
  6. package/dist/admin/AdminUserCreate-B72nu-3W.js.map +1 -1
  7. package/dist/admin/AdminUserDetails-CKM2IEMr.js +475 -0
  8. package/dist/admin/AdminUserDetails-CKM2IEMr.js.map +1 -0
  9. package/dist/admin/{AdminUserDetails-z1y8kJeB.js → AdminUserDetails-Zib_B6Al.js} +1 -1
  10. package/dist/admin/{AdminUserLayout-DyQYacQQ.js → AdminUserLayout-BNBOEiAO.js} +1 -1
  11. package/dist/admin/AdminUserLayout-D7En9UBq.js +334 -0
  12. package/dist/admin/AdminUserLayout-D7En9UBq.js.map +1 -0
  13. package/dist/admin/AdminUserSessions-DEaGu6n6.js.map +1 -1
  14. package/dist/admin/{AdminUserSettings-CR7MxX_R.js → AdminUserSettings-Di73D7g2.js} +6 -5
  15. package/dist/admin/AdminUserSettings-Di73D7g2.js.map +1 -0
  16. package/dist/admin/AdminUserSettings-yI-JECf5.js +3 -0
  17. package/dist/admin/AdminUsers-BnGIRvmV.js.map +1 -1
  18. package/dist/admin/index.d.ts +10 -10
  19. package/dist/admin/index.d.ts.map +1 -1
  20. package/dist/admin/index.js +18 -18
  21. package/dist/admin/index.js.map +1 -1
  22. package/dist/auth/index.js +4 -4
  23. package/dist/auth/index.js.map +1 -1
  24. package/dist/core/index.d.ts.map +1 -1
  25. package/dist/core/index.js +6 -5
  26. package/dist/core/index.js.map +1 -1
  27. package/package.json +11 -11
  28. package/src/admin/AdminRouter.ts +23 -20
  29. package/src/admin/MainRouter.ts +1 -1
  30. package/src/admin/components/audits/AdminAudits.tsx +2 -2
  31. package/src/admin/components/jobs/AdminJobs.tsx +2 -2
  32. package/src/admin/components/notifications/AdminNotifications.tsx +2 -2
  33. package/src/admin/components/parameters/AdminParameters.tsx +2 -2
  34. package/src/admin/components/sessions/AdminSessions.tsx +2 -2
  35. package/src/admin/components/shared/AdminResourceHeader.tsx +281 -0
  36. package/src/admin/components/shared/AdminResourceTabs.tsx +94 -0
  37. package/src/admin/components/shared/index.ts +10 -0
  38. package/src/admin/components/users/AdminUserAudits.tsx +2 -2
  39. package/src/admin/components/users/AdminUserCreate.tsx +2 -2
  40. package/src/admin/components/users/AdminUserDetails.tsx +337 -85
  41. package/src/admin/components/users/AdminUserLayout.tsx +164 -108
  42. package/src/admin/components/users/AdminUserSessions.tsx +2 -2
  43. package/src/admin/components/users/AdminUserSettings.tsx +10 -5
  44. package/src/admin/components/users/AdminUsers.tsx +6 -2
  45. package/src/auth/AuthRouter.ts +4 -4
  46. package/src/core/components/form/TypeForm.tsx +3 -2
  47. package/src/core/components/layout/AlephaMantineProvider.tsx +5 -1
  48. package/src/core/components/layout/Sidebar.tsx +9 -6
  49. package/dist/admin/AdminUserDetails-BCt8Su-4.js +0 -222
  50. package/dist/admin/AdminUserDetails-BCt8Su-4.js.map +0 -1
  51. package/dist/admin/AdminUserLayout-Ck0GLRE5.js +0 -151
  52. package/dist/admin/AdminUserLayout-Ck0GLRE5.js.map +0 -1
  53. package/dist/admin/AdminUserSettings-CE66UTIP.js +0 -3
  54. package/dist/admin/AdminUserSettings-CR7MxX_R.js.map +0 -1
@@ -6,10 +6,10 @@ import { t as AdminParameters_default } from "./AdminParameters-D-q3Qmhv.js";
6
6
  import { t as AdminSessions_default } from "./AdminSessions-vOgkrQ2U.js";
7
7
  import { t as AdminUserAudits_default } from "./AdminUserAudits-CSsN1fIC.js";
8
8
  import { t as AdminUserCreate_default } from "./AdminUserCreate-B72nu-3W.js";
9
- import { t as AdminUserDetails_default } from "./AdminUserDetails-BCt8Su-4.js";
10
- import { t as AdminUserLayout_default } from "./AdminUserLayout-Ck0GLRE5.js";
9
+ import { t as AdminUserDetails_default } from "./AdminUserDetails-CKM2IEMr.js";
10
+ import { t as AdminUserLayout_default } from "./AdminUserLayout-D7En9UBq.js";
11
11
  import { t as AdminUserSessions_default } from "./AdminUserSessions-DEaGu6n6.js";
12
- import { t as AdminUserSettings_default } from "./AdminUserSettings-CR7MxX_R.js";
12
+ import { t as AdminUserSettings_default } from "./AdminUserSettings-Di73D7g2.js";
13
13
  import { t as AdminUsers_default } from "./AdminUsers-BnGIRvmV.js";
14
14
  import { AlephaMantineProvider, AlephaUI, DataTable, Flex, Text } from "@alepha/ui";
15
15
  import { AlephaUIAuth, AuthRouter } from "@alepha/ui/auth";
@@ -41,20 +41,20 @@ var AdminRouter = class {
41
41
  onNotAuthorized(url) {
42
42
  return new Redirection(this.router.path(this.authRouter.login.name, { query: { r: url.pathname } }));
43
43
  }
44
- layout = $page({
45
- name: "AdminLayout",
44
+ adminLayout = $page({
46
45
  path: "/admin",
47
46
  label: "Admin",
47
+ can: () => this.userCtrl.findUsers.can(),
48
48
  lazy: () => import("./AdminLayout-BnSmtA4x.js"),
49
49
  props: () => ({ adminShellProps: this.adminShellProps() }),
50
- resolve: ({ user, url }) => {
50
+ loader: ({ user, url }) => {
51
51
  if (!user) throw this.onNotAuthorized(url);
52
52
  return {};
53
53
  }
54
54
  });
55
55
  adminUsers = $page({
56
56
  icon: IconUsers,
57
- parent: this.layout,
57
+ parent: this.adminLayout,
58
58
  path: "/users",
59
59
  label: "Users",
60
60
  description: "Manage application users and their roles.",
@@ -63,7 +63,7 @@ var AdminRouter = class {
63
63
  });
64
64
  adminUserCreate = $page({
65
65
  icon: IconPlus,
66
- parent: this.layout,
66
+ parent: this.adminLayout,
67
67
  path: "/users/create",
68
68
  label: "Create User",
69
69
  description: "Create a new user account.",
@@ -72,17 +72,17 @@ var AdminRouter = class {
72
72
  });
73
73
  adminUserLayout = $page({
74
74
  icon: IconUser,
75
- parent: this.layout,
75
+ parent: this.adminLayout,
76
76
  path: "/users/:userId",
77
77
  label: "User",
78
- lazy: () => import("./AdminUserLayout-DyQYacQQ.js"),
78
+ lazy: () => import("./AdminUserLayout-BNBOEiAO.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-z1y8kJeB.js")
85
+ lazy: () => import("./AdminUserDetails-Zib_B6Al.js")
86
86
  });
87
87
  adminUserSessions = $page({
88
88
  parent: this.adminUserLayout,
@@ -94,7 +94,7 @@ var AdminRouter = class {
94
94
  parent: this.adminUserLayout,
95
95
  path: "/settings",
96
96
  label: "Settings",
97
- lazy: () => import("./AdminUserSettings-CE66UTIP.js")
97
+ lazy: () => import("./AdminUserSettings-yI-JECf5.js")
98
98
  });
99
99
  adminUserAudits = $page({
100
100
  parent: this.adminUserLayout,
@@ -105,7 +105,7 @@ var AdminRouter = class {
105
105
  });
106
106
  adminAudits = $page({
107
107
  icon: IconHistory,
108
- parent: this.layout,
108
+ parent: this.adminLayout,
109
109
  path: "/audits",
110
110
  label: "Audit Log",
111
111
  description: "View system-wide audit trail and activity logs.",
@@ -114,7 +114,7 @@ var AdminRouter = class {
114
114
  });
115
115
  adminSessions = $page({
116
116
  icon: IconDevices,
117
- parent: this.layout,
117
+ parent: this.adminLayout,
118
118
  path: "/sessions",
119
119
  label: "Sessions",
120
120
  description: "View and manage all active sessions.",
@@ -123,7 +123,7 @@ var AdminRouter = class {
123
123
  });
124
124
  adminNotifications = $page({
125
125
  icon: IconBell,
126
- parent: this.layout,
126
+ parent: this.adminLayout,
127
127
  path: "/notifications",
128
128
  label: "Notifications",
129
129
  description: "View notification history and status.",
@@ -132,7 +132,7 @@ var AdminRouter = class {
132
132
  });
133
133
  adminFiles = $page({
134
134
  icon: IconFile,
135
- parent: this.layout,
135
+ parent: this.adminLayout,
136
136
  path: "/files",
137
137
  label: "Files",
138
138
  description: "Manage uploaded files and storage.",
@@ -141,7 +141,7 @@ var AdminRouter = class {
141
141
  });
142
142
  adminParameters = $page({
143
143
  icon: IconSettings,
144
- parent: this.layout,
144
+ parent: this.adminLayout,
145
145
  path: "/parameters",
146
146
  label: "Parameters",
147
147
  description: "View and manage application configuration parameters.",
@@ -165,7 +165,7 @@ var MainRouter = class {
165
165
  admin = $inject(AdminRouter);
166
166
  layout = $page({
167
167
  component: AlephaMantineProvider,
168
- children: () => [this.auth.layout, this.admin.layout]
168
+ children: () => [this.auth.layout, this.admin.adminLayout]
169
169
  });
170
170
  };
171
171
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["filters"],"sources":["../../src/admin/AdminRouter.ts","../../src/admin/MainRouter.ts","../../src/admin/components/jobs/AdminJobs.tsx","../../src/admin/components/verifications/AdminVerifications.tsx","../../src/admin/index.ts"],"sourcesContent":["import { ReactAuth } from \"@alepha/react/auth\";\nimport { $page, ReactRouter, Redirection } from \"@alepha/react/router\";\nimport type { AdminShellProps } from \"@alepha/ui\";\nimport { AuthRouter } from \"@alepha/ui/auth\";\nimport {\n IconBell,\n IconDevices,\n IconFile,\n IconHistory,\n IconPlus,\n IconSettings,\n IconUser,\n IconUsers,\n} from \"@tabler/icons-react\";\nimport { $inject } from \"alepha\";\nimport type { AuditController } from \"alepha/api/audits\";\nimport type { FileController } from \"alepha/api/files\";\nimport type { NotificationController } from \"alepha/api/notifications\";\nimport type { ConfigController } from \"alepha/api/parameters\";\nimport type { SessionController, UserController } from \"alepha/api/users\";\nimport { $client } from \"alepha/server/links\";\n\nexport class AdminRouter {\n protected readonly router = $inject(ReactRouter);\n protected readonly authRouter = $inject(AuthRouter);\n protected readonly auth = $inject(ReactAuth);\n protected readonly userCtrl = $client<UserController>();\n protected readonly sessionCtrl = $client<SessionController>();\n protected readonly notificationCtrl = $client<NotificationController>();\n protected readonly fileCtrl = $client<FileController>();\n protected readonly configCtrl = $client<ConfigController>();\n protected readonly auditCtrl = $client<AuditController>();\n\n protected adminShellProps(): AdminShellProps {\n return {};\n }\n\n protected onNotAuthorized(url: URL) {\n return new Redirection(\n this.router.path(this.authRouter.login.name, {\n query: {\n r: url.pathname,\n },\n }),\n );\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Layout\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly layout = $page({\n name: \"AdminLayout\",\n path: \"/admin\",\n label: \"Admin\",\n lazy: () => import(\"./components/AdminLayout.tsx\"),\n props: () => ({\n adminShellProps: this.adminShellProps(),\n }),\n resolve: ({ user, url }) => {\n if (!user) {\n throw this.onNotAuthorized(url);\n }\n return {};\n },\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Users\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminUsers = $page({\n icon: IconUsers,\n parent: this.layout,\n path: \"/users\",\n label: \"Users\",\n description: \"Manage application users and their roles.\",\n lazy: () => import(\"./components/users/AdminUsers.tsx\"),\n can: () => this.userCtrl.findUsers.can(),\n });\n\n public readonly adminUserCreate = $page({\n icon: IconPlus,\n parent: this.layout,\n path: \"/users/create\",\n label: \"Create User\",\n description: \"Create a new user account.\",\n lazy: () => import(\"./components/users/AdminUserCreate.tsx\"),\n can: () => this.userCtrl.createUser.can(),\n });\n\n public readonly adminUserLayout = $page({\n icon: IconUser,\n parent: this.layout,\n path: \"/users/:userId\",\n label: \"User\",\n lazy: () => import(\"./components/users/AdminUserLayout.tsx\"),\n can: () => this.userCtrl.getUser.can(),\n });\n\n public readonly adminUserDetails = $page({\n parent: this.adminUserLayout,\n path: \"/details\",\n label: \"Details\",\n lazy: () => import(\"./components/users/AdminUserDetails.tsx\"),\n });\n\n public readonly adminUserSessions = $page({\n parent: this.adminUserLayout,\n path: \"/sessions\",\n label: \"Sessions\",\n lazy: () => import(\"./components/users/AdminUserSessions.tsx\"),\n });\n\n public readonly adminUserSettings = $page({\n parent: this.adminUserLayout,\n path: \"/settings\",\n label: \"Settings\",\n lazy: () => import(\"./components/users/AdminUserSettings.tsx\"),\n });\n\n public readonly adminUserAudits = $page({\n parent: this.adminUserLayout,\n path: \"/audits\",\n label: \"Audit Log\",\n lazy: () => import(\"./components/users/AdminUserAudits.tsx\"),\n can: () => this.auditCtrl.findByUser.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Audits (Global)\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminAudits = $page({\n icon: IconHistory,\n parent: this.layout,\n path: \"/audits\",\n label: \"Audit Log\",\n description: \"View system-wide audit trail and activity logs.\",\n lazy: () => import(\"./components/audits/AdminAudits.tsx\"),\n can: () => this.auditCtrl.findAudits.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Sessions\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminSessions = $page({\n icon: IconDevices,\n parent: this.layout,\n path: \"/sessions\",\n label: \"Sessions\",\n description: \"View and manage all active sessions.\",\n lazy: () => import(\"./components/sessions/AdminSessions.tsx\"),\n can: () => this.sessionCtrl.findSessions.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Notifications\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminNotifications = $page({\n icon: IconBell,\n parent: this.layout,\n path: \"/notifications\",\n label: \"Notifications\",\n description: \"View notification history and status.\",\n lazy: () => import(\"./components/notifications/AdminNotifications.tsx\"),\n can: () => this.notificationCtrl.findNotifications.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Files\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminFiles = $page({\n icon: IconFile,\n parent: this.layout,\n path: \"/files\",\n label: \"Files\",\n description: \"Manage uploaded files and storage.\",\n lazy: () => import(\"./components/files/AdminFiles.tsx\"),\n can: () => this.fileCtrl.findFiles.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Parameters\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminParameters = $page({\n icon: IconSettings,\n parent: this.layout,\n path: \"/parameters\",\n label: \"Parameters\",\n description: \"View and manage application configuration parameters.\",\n lazy: () => import(\"./components/parameters/AdminParameters.tsx\"),\n can: () => this.configCtrl.getConfigTree.can(),\n });\n}\n","import { $page } from \"@alepha/react/router\";\nimport { AlephaMantineProvider } from \"@alepha/ui\";\nimport { AuthRouter } from \"@alepha/ui/auth\";\nimport { $inject } from \"alepha\";\nimport { AdminRouter } from \"./AdminRouter.ts\";\n\n/**\n * Main application router that combines Auth and Admin routers.\n *\n * We assume that the main application router will always have Admin and Auth routers.\n *\n * This is basically a convenience class to avoid having to inject these routers everywhere.\n * Code is lightweight enough that we can just copy it if needed.\n */\nexport class MainRouter {\n auth = $inject(AuthRouter);\n admin = $inject(AdminRouter);\n\n layout = $page({\n component: AlephaMantineProvider,\n children: () => [this.auth.layout, this.admin.layout],\n });\n}\n","import { useClient } from \"@alepha/react\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { DataTable, Flex, Text } from \"@alepha/ui\";\nimport { Badge } from \"@mantine/core\";\nimport {\n IconCheck,\n IconClock,\n IconPlayerPlay,\n IconX,\n} from \"@tabler/icons-react\";\nimport { type Page, t } from \"alepha\";\nimport {\n type JobController,\n type JobExecutionEntity,\n jobExecutions,\n} from \"alepha/api/jobs\";\n\nconst AdminJobs = () => {\n const client = useClient<JobController>();\n const { l } = useI18n();\n\n const filters = t.object({\n job: t.optional(\n t.string({\n $control: {\n query: t.pick(jobExecutions.schema, [\"job\"]),\n },\n }),\n ),\n status: t.optional(t.enum([\"STARTED\", \"FAILED\", \"COMPLETED\"])),\n });\n\n const getStatusColor = (status: string) => {\n switch (status) {\n case \"COMPLETED\":\n return \"green\";\n case \"FAILED\":\n return \"red\";\n case \"STARTED\":\n return \"blue\";\n default:\n return \"gray\";\n }\n };\n\n const getStatusIcon = (status: string) => {\n switch (status) {\n case \"COMPLETED\":\n return <IconCheck size={12} />;\n case \"FAILED\":\n return <IconX size={12} />;\n case \"STARTED\":\n return <IconPlayerPlay size={12} />;\n default:\n return <IconClock size={12} />;\n }\n };\n\n const formatDuration = (\n start: Date | string,\n end?: Date | string | null,\n ): string => {\n const startTime = new Date(start).getTime();\n const endTime = end ? new Date(end).getTime() : Date.now();\n const duration = endTime - startTime;\n\n if (duration < 1000) return `${duration}ms`;\n if (duration < 60000) return `${(duration / 1000).toFixed(1)}s`;\n return `${Math.floor(duration / 60000)}m ${Math.floor((duration % 60000) / 1000)}s`;\n };\n\n return (\n <Flex flex={1} direction={\"column\"}>\n <DataTable<JobExecutionEntity, typeof filters>\n submitOnInit\n defaultSize={10}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 3,\n }}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n }}\n onFilterChange={(key, _value, form) => {\n if (key === \"job\" || key === \"status\") {\n return form.submit();\n }\n }}\n filters={filters}\n items={async (filters) => {\n const response = await client.getJobExecutions({\n query: filters,\n });\n\n return response as Page<JobExecutionEntity>;\n }}\n columns={{\n job: {\n label: \"Job\",\n value: (item) => (\n <Text size=\"sm\" fw={500}>\n {item.job}\n </Text>\n ),\n },\n status: {\n label: \"Status\",\n fit: true,\n value: (item) => (\n <Badge\n size=\"sm\"\n variant=\"light\"\n color={getStatusColor(item.status)}\n leftSection={getStatusIcon(item.status)}\n >\n {item.status}\n </Badge>\n ),\n },\n duration: {\n label: \"Duration\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\" ff=\"monospace\">\n {formatDuration(item.createdAt, item.finishedAt)}\n </Text>\n ),\n },\n error: {\n label: \"Error\",\n value: (item) =>\n item.error ? (\n <Text size=\"xs\" c=\"red\" lineClamp={1}>\n {item.error}\n </Text>\n ) : (\n <Text size=\"xs\" c=\"dimmed\">\n -\n </Text>\n ),\n },\n createdAt: {\n label: \"Started\",\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 AdminJobs;\n","import { Flex, Text } from \"@alepha/ui\";\nimport { Stack } from \"@mantine/core\";\nimport { IconShieldCheck } from \"@tabler/icons-react\";\n\nconst AdminVerifications = () => {\n return (\n <Flex flex={1} justify=\"center\" align=\"center\">\n <Stack align=\"center\" gap=\"xs\">\n <IconShieldCheck\n size={48}\n stroke={1.5}\n color=\"var(--mantine-color-dimmed)\"\n />\n <Text c=\"dimmed\">Verification Management</Text>\n <Text size=\"xs\" c=\"dimmed\" ta=\"center\" maw={400}>\n Verifications are automatically managed by the system. Email and SMS\n verification codes are generated and validated through the\n verification API endpoints.\n </Text>\n </Stack>\n </Flex>\n );\n};\n\nexport default AdminVerifications;\n","import { AlephaUI } from \"@alepha/ui\";\nimport { AlephaUIAuth } from \"@alepha/ui/auth\";\nimport { $module } from \"alepha\";\nimport { AdminRouter } from \"./AdminRouter.ts\";\nimport { MainRouter } from \"./MainRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport { AdminRouter } from \"./AdminRouter.ts\";\n// Layout\nexport { default as AdminLayout } from \"./components/AdminLayout.tsx\";\n// Audits\nexport { default as AdminAudits } from \"./components/audits/AdminAudits.tsx\";\n// Files\nexport { default as AdminFiles } from \"./components/files/AdminFiles.tsx\";\n// Jobs\nexport { default as AdminJobs } from \"./components/jobs/AdminJobs.tsx\";\n// Notifications\nexport { default as AdminNotifications } from \"./components/notifications/AdminNotifications.tsx\";\n// Parameters\nexport { default as AdminParameters } from \"./components/parameters/AdminParameters.tsx\";\n// Sessions\nexport { default as AdminSessions } from \"./components/sessions/AdminSessions.tsx\";\n// Users\nexport { default as AdminUserAudits } from \"./components/users/AdminUserAudits.tsx\";\nexport { default as AdminUserCreate } from \"./components/users/AdminUserCreate.tsx\";\nexport { default as AdminUserDetails } from \"./components/users/AdminUserDetails.tsx\";\nexport { default as AdminUserLayout } from \"./components/users/AdminUserLayout.tsx\";\nexport { default as AdminUserSessions } from \"./components/users/AdminUserSessions.tsx\";\nexport { default as AdminUserSettings } from \"./components/users/AdminUserSettings.tsx\";\nexport { default as AdminUsers } from \"./components/users/AdminUsers.tsx\";\n// Verifications\nexport { default as AdminVerifications } from \"./components/verifications/AdminVerifications.tsx\";\nexport { MainRouter } from \"./MainRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Admin panel UI Module\n *\n * @module alepha.ui.admin\n */\nexport const AlephaUIAdmin = $module({\n name: \"alepha.ui.admin\",\n services: [AlephaUI, AlephaUIAuth, AdminRouter, MainRouter],\n register: (alepha) => {\n alepha.with(AdminRouter);\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["filters"],"sources":["../../src/admin/AdminRouter.ts","../../src/admin/MainRouter.ts","../../src/admin/components/jobs/AdminJobs.tsx","../../src/admin/components/verifications/AdminVerifications.tsx","../../src/admin/index.ts"],"sourcesContent":["import { ReactAuth } from \"@alepha/react/auth\";\nimport { $page, ReactRouter, Redirection } from \"@alepha/react/router\";\nimport type { AdminShellProps } from \"@alepha/ui\";\nimport { AuthRouter } from \"@alepha/ui/auth\";\nimport {\n IconBell,\n IconDevices,\n IconFile,\n IconHistory,\n IconPlus,\n IconSettings,\n IconUser,\n IconUsers,\n} from \"@tabler/icons-react\";\nimport { $inject } from \"alepha\";\nimport type { AdminAuditController } from \"alepha/api/audits\";\nimport type { FileController } from \"alepha/api/files\";\nimport type { AdminNotificationController } from \"alepha/api/notifications\";\nimport type { AdminConfigController } from \"alepha/api/parameters\";\nimport type {\n AdminSessionController,\n AdminUserController,\n} from \"alepha/api/users\";\nimport { $client } from \"alepha/server/links\";\n\nexport class AdminRouter {\n protected readonly router = $inject(ReactRouter);\n protected readonly authRouter = $inject(AuthRouter);\n protected readonly auth = $inject(ReactAuth);\n protected readonly userCtrl = $client<AdminUserController>();\n protected readonly sessionCtrl = $client<AdminSessionController>();\n protected readonly notificationCtrl = $client<AdminNotificationController>();\n protected readonly fileCtrl = $client<FileController>();\n protected readonly configCtrl = $client<AdminConfigController>();\n protected readonly auditCtrl = $client<AdminAuditController>();\n\n protected adminShellProps(): AdminShellProps {\n return {};\n }\n\n protected onNotAuthorized(url: URL) {\n return new Redirection(\n this.router.path(this.authRouter.login.name, {\n query: {\n r: url.pathname,\n },\n }),\n );\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Layout\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminLayout = $page({\n path: \"/admin\",\n label: \"Admin\",\n can: () => this.userCtrl.findUsers.can(),\n lazy: () => import(\"./components/AdminLayout.tsx\"),\n props: () => ({\n adminShellProps: this.adminShellProps(),\n }),\n loader: ({ user, url }) => {\n if (!user) {\n throw this.onNotAuthorized(url);\n }\n return {};\n },\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Users\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminUsers = $page({\n icon: IconUsers,\n parent: this.adminLayout,\n path: \"/users\",\n label: \"Users\",\n description: \"Manage application users and their roles.\",\n lazy: () => import(\"./components/users/AdminUsers.tsx\"),\n can: () => this.userCtrl.findUsers.can(),\n });\n\n public readonly adminUserCreate = $page({\n icon: IconPlus,\n parent: this.adminLayout,\n path: \"/users/create\",\n label: \"Create User\",\n description: \"Create a new user account.\",\n lazy: () => import(\"./components/users/AdminUserCreate.tsx\"),\n can: () => this.userCtrl.createUser.can(),\n });\n\n public readonly adminUserLayout = $page({\n icon: IconUser,\n parent: this.adminLayout,\n path: \"/users/:userId\",\n label: \"User\",\n lazy: () => import(\"./components/users/AdminUserLayout.tsx\"),\n can: () => this.userCtrl.getUser.can(),\n });\n\n public readonly adminUserDetails = $page({\n parent: this.adminUserLayout,\n path: \"/details\",\n label: \"Details\",\n lazy: () => import(\"./components/users/AdminUserDetails.tsx\"),\n });\n\n public readonly adminUserSessions = $page({\n parent: this.adminUserLayout,\n path: \"/sessions\",\n label: \"Sessions\",\n lazy: () => import(\"./components/users/AdminUserSessions.tsx\"),\n });\n\n public readonly adminUserSettings = $page({\n parent: this.adminUserLayout,\n path: \"/settings\",\n label: \"Settings\",\n lazy: () => import(\"./components/users/AdminUserSettings.tsx\"),\n });\n\n public readonly adminUserAudits = $page({\n parent: this.adminUserLayout,\n path: \"/audits\",\n label: \"Audit Log\",\n lazy: () => import(\"./components/users/AdminUserAudits.tsx\"),\n can: () => this.auditCtrl.findByUser.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Audits (Global)\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminAudits = $page({\n icon: IconHistory,\n parent: this.adminLayout,\n path: \"/audits\",\n label: \"Audit Log\",\n description: \"View system-wide audit trail and activity logs.\",\n lazy: () => import(\"./components/audits/AdminAudits.tsx\"),\n can: () => this.auditCtrl.findAudits.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Sessions\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminSessions = $page({\n icon: IconDevices,\n parent: this.adminLayout,\n path: \"/sessions\",\n label: \"Sessions\",\n description: \"View and manage all active sessions.\",\n lazy: () => import(\"./components/sessions/AdminSessions.tsx\"),\n can: () => this.sessionCtrl.findSessions.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Notifications\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminNotifications = $page({\n icon: IconBell,\n parent: this.adminLayout,\n path: \"/notifications\",\n label: \"Notifications\",\n description: \"View notification history and status.\",\n lazy: () => import(\"./components/notifications/AdminNotifications.tsx\"),\n can: () => this.notificationCtrl.findNotifications.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Files\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminFiles = $page({\n icon: IconFile,\n parent: this.adminLayout,\n path: \"/files\",\n label: \"Files\",\n description: \"Manage uploaded files and storage.\",\n lazy: () => import(\"./components/files/AdminFiles.tsx\"),\n can: () => this.fileCtrl.findFiles.can(),\n });\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Parameters\n // ─────────────────────────────────────────────────────────────────────────────\n\n public readonly adminParameters = $page({\n icon: IconSettings,\n parent: this.adminLayout,\n path: \"/parameters\",\n label: \"Parameters\",\n description: \"View and manage application configuration parameters.\",\n lazy: () => import(\"./components/parameters/AdminParameters.tsx\"),\n can: () => this.configCtrl.getConfigTree.can(),\n });\n}\n","import { $page } from \"@alepha/react/router\";\nimport { AlephaMantineProvider } from \"@alepha/ui\";\nimport { AuthRouter } from \"@alepha/ui/auth\";\nimport { $inject } from \"alepha\";\nimport { AdminRouter } from \"./AdminRouter.ts\";\n\n/**\n * Main application router that combines Auth and Admin routers.\n *\n * We assume that the main application router will always have Admin and Auth routers.\n *\n * This is basically a convenience class to avoid having to inject these routers everywhere.\n * Code is lightweight enough that we can just copy it if needed.\n */\nexport class MainRouter {\n auth = $inject(AuthRouter);\n admin = $inject(AdminRouter);\n\n layout = $page({\n component: AlephaMantineProvider,\n children: () => [this.auth.layout, this.admin.adminLayout],\n });\n}\n","import { useClient } from \"@alepha/react\";\nimport { useI18n } from \"@alepha/react/i18n\";\nimport { DataTable, Flex, Text } from \"@alepha/ui\";\nimport { Badge } from \"@mantine/core\";\nimport {\n IconCheck,\n IconClock,\n IconPlayerPlay,\n IconX,\n} from \"@tabler/icons-react\";\nimport { type Page, t } from \"alepha\";\nimport {\n type AdminJobController,\n type JobExecutionEntity,\n jobExecutions,\n} from \"alepha/api/jobs\";\n\nconst AdminJobs = () => {\n const client = useClient<AdminJobController>();\n const { l } = useI18n();\n\n const filters = t.object({\n job: t.optional(\n t.string({\n $control: {\n query: t.pick(jobExecutions.schema, [\"job\"]),\n },\n }),\n ),\n status: t.optional(t.enum([\"STARTED\", \"FAILED\", \"COMPLETED\"])),\n });\n\n const getStatusColor = (status: string) => {\n switch (status) {\n case \"COMPLETED\":\n return \"green\";\n case \"FAILED\":\n return \"red\";\n case \"STARTED\":\n return \"blue\";\n default:\n return \"gray\";\n }\n };\n\n const getStatusIcon = (status: string) => {\n switch (status) {\n case \"COMPLETED\":\n return <IconCheck size={12} />;\n case \"FAILED\":\n return <IconX size={12} />;\n case \"STARTED\":\n return <IconPlayerPlay size={12} />;\n default:\n return <IconClock size={12} />;\n }\n };\n\n const formatDuration = (\n start: Date | string,\n end?: Date | string | null,\n ): string => {\n const startTime = new Date(start).getTime();\n const endTime = end ? new Date(end).getTime() : Date.now();\n const duration = endTime - startTime;\n\n if (duration < 1000) return `${duration}ms`;\n if (duration < 60000) return `${(duration / 1000).toFixed(1)}s`;\n return `${Math.floor(duration / 60000)}m ${Math.floor((duration % 60000) / 1000)}s`;\n };\n\n return (\n <Flex flex={1} direction={\"column\"}>\n <DataTable<JobExecutionEntity, typeof filters>\n submitOnInit\n defaultSize={10}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 3,\n }}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n }}\n onFilterChange={(key, _value, form) => {\n if (key === \"job\" || key === \"status\") {\n return form.submit();\n }\n }}\n filters={filters}\n items={async (filters) => {\n const response = await client.getJobExecutions({\n query: filters,\n });\n\n return response as Page<JobExecutionEntity>;\n }}\n columns={{\n job: {\n label: \"Job\",\n value: (item) => (\n <Text size=\"sm\" fw={500}>\n {item.job}\n </Text>\n ),\n },\n status: {\n label: \"Status\",\n fit: true,\n value: (item) => (\n <Badge\n size=\"sm\"\n variant=\"light\"\n color={getStatusColor(item.status)}\n leftSection={getStatusIcon(item.status)}\n >\n {item.status}\n </Badge>\n ),\n },\n duration: {\n label: \"Duration\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\" ff=\"monospace\">\n {formatDuration(item.createdAt, item.finishedAt)}\n </Text>\n ),\n },\n error: {\n label: \"Error\",\n value: (item) =>\n item.error ? (\n <Text size=\"xs\" c=\"red\" lineClamp={1}>\n {item.error}\n </Text>\n ) : (\n <Text size=\"xs\" c=\"dimmed\">\n -\n </Text>\n ),\n },\n createdAt: {\n label: \"Started\",\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 AdminJobs;\n","import { Flex, Text } from \"@alepha/ui\";\nimport { Stack } from \"@mantine/core\";\nimport { IconShieldCheck } from \"@tabler/icons-react\";\n\nconst AdminVerifications = () => {\n return (\n <Flex flex={1} justify=\"center\" align=\"center\">\n <Stack align=\"center\" gap=\"xs\">\n <IconShieldCheck\n size={48}\n stroke={1.5}\n color=\"var(--mantine-color-dimmed)\"\n />\n <Text c=\"dimmed\">Verification Management</Text>\n <Text size=\"xs\" c=\"dimmed\" ta=\"center\" maw={400}>\n Verifications are automatically managed by the system. Email and SMS\n verification codes are generated and validated through the\n verification API endpoints.\n </Text>\n </Stack>\n </Flex>\n );\n};\n\nexport default AdminVerifications;\n","import { AlephaUI } from \"@alepha/ui\";\nimport { AlephaUIAuth } from \"@alepha/ui/auth\";\nimport { $module } from \"alepha\";\nimport { AdminRouter } from \"./AdminRouter.ts\";\nimport { MainRouter } from \"./MainRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport { AdminRouter } from \"./AdminRouter.ts\";\n// Layout\nexport { default as AdminLayout } from \"./components/AdminLayout.tsx\";\n// Audits\nexport { default as AdminAudits } from \"./components/audits/AdminAudits.tsx\";\n// Files\nexport { default as AdminFiles } from \"./components/files/AdminFiles.tsx\";\n// Jobs\nexport { default as AdminJobs } from \"./components/jobs/AdminJobs.tsx\";\n// Notifications\nexport { default as AdminNotifications } from \"./components/notifications/AdminNotifications.tsx\";\n// Parameters\nexport { default as AdminParameters } from \"./components/parameters/AdminParameters.tsx\";\n// Sessions\nexport { default as AdminSessions } from \"./components/sessions/AdminSessions.tsx\";\n// Users\nexport { default as AdminUserAudits } from \"./components/users/AdminUserAudits.tsx\";\nexport { default as AdminUserCreate } from \"./components/users/AdminUserCreate.tsx\";\nexport { default as AdminUserDetails } from \"./components/users/AdminUserDetails.tsx\";\nexport { default as AdminUserLayout } from \"./components/users/AdminUserLayout.tsx\";\nexport { default as AdminUserSessions } from \"./components/users/AdminUserSessions.tsx\";\nexport { default as AdminUserSettings } from \"./components/users/AdminUserSettings.tsx\";\nexport { default as AdminUsers } from \"./components/users/AdminUsers.tsx\";\n// Verifications\nexport { default as AdminVerifications } from \"./components/verifications/AdminVerifications.tsx\";\nexport { MainRouter } from \"./MainRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Admin panel UI Module\n *\n * @module alepha.ui.admin\n */\nexport const AlephaUIAdmin = $module({\n name: \"alepha.ui.admin\",\n services: [AlephaUI, AlephaUIAuth, AdminRouter, MainRouter],\n register: (alepha) => {\n alepha.with(AdminRouter);\n },\n});\n"],"mappings":"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"}
@@ -161,7 +161,7 @@ var AuthRouter = class {
161
161
  schema: { query: realmQuerySchema },
162
162
  can: () => !this.auth.user,
163
163
  lazy: () => import("./Login-BWi-pPbO.js"),
164
- resolve: async ({ query }) => {
164
+ loader: async ({ query }) => {
165
165
  return { realmConfig: await this.loadRealmConfig(query.realm) };
166
166
  }
167
167
  });
@@ -173,7 +173,7 @@ var AuthRouter = class {
173
173
  schema: { query: realmQuerySchema },
174
174
  can: () => !this.auth.user,
175
175
  lazy: () => import("./Register-CtdvihIM.js"),
176
- resolve: async ({ query }) => {
176
+ loader: async ({ query }) => {
177
177
  return { realmConfig: await this.loadRealmConfig(query.realm) };
178
178
  }
179
179
  });
@@ -185,7 +185,7 @@ var AuthRouter = class {
185
185
  schema: { query: realmQuerySchema },
186
186
  can: () => !this.auth.user,
187
187
  lazy: () => import("./ResetPassword-BUdM7T_R.js"),
188
- resolve: async ({ query }) => {
188
+ loader: async ({ query }) => {
189
189
  return { realmConfig: await this.loadRealmConfig(query.realm) };
190
190
  }
191
191
  });
@@ -207,7 +207,7 @@ var AuthRouter = class {
207
207
  can: () => !!this.auth.user,
208
208
  path: "/logout",
209
209
  component: () => null,
210
- resolve: () => {
210
+ loader: () => {
211
211
  this.auth.logout();
212
212
  return {};
213
213
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/auth/AuthI18n.ts","../../src/auth/AuthRouter.ts","../../src/auth/components/buttons/UserButton.tsx","../../src/auth/index.ts"],"sourcesContent":["import { $dictionary } from \"@alepha/react/i18n\";\n\nexport class AuthI18n {\n en = $dictionary({\n name: \"alepha.ui.auth.en\",\n lazy: () => ({\n default: {\n loginSignIn: \"Sign in\",\n loginContinueWith: \"Continue with $1\",\n loginOr: \"OR\",\n loginCancel: \"Cancel\",\n loginForgotPassword: \"Forgot password?\",\n loginNoAccount: \"Don't have an account?\",\n loginSignUp: \"Sign up\",\n loginUsername: \"Username\",\n loginEmail: \"Email\",\n loginPhone: \"Phone number\",\n loginPassword: \"Password\",\n registerCreateAccount: \"Create account\",\n registerContinueWith: \"Continue with $1\",\n registerOr: \"OR\",\n registerCancel: \"Cancel\",\n registerHaveAccount: \"Already have an account?\",\n registerSignIn: \"Sign in\",\n registerUsername: \"Username\",\n registerEmail: \"Email\",\n registerPhone: \"Phone number\",\n registerPassword: \"Password\",\n registerConfirmPassword: \"Confirm password\",\n registerDisabled:\n \"Registration is not available. Please contact your administrator.\",\n registerBackToSignIn: \"Back to sign in\",\n registerVerifyTitle: \"Verify your account\",\n registerVerifyDescription:\n \"Please enter the verification code(s) sent to you.\",\n registerEmailCode: \"Email verification code\",\n registerPhoneCode: \"Phone verification code\",\n registerVerifySubmit: \"Complete Registration\",\n registerVerifyBack: \"Back to registration\",\n resetPasswordTitle: \"Reset password\",\n resetPasswordEmail: \"Email\",\n resetPasswordEnterEmail:\n \"Enter your email address to reset your password\",\n resetPasswordSendCode: \"Send verification code\",\n resetPasswordCodeSent: \"We've sent a verification code to your email.\",\n resetPasswordEnterCode: \"Enter the 6-digit code\",\n resetPasswordResendCode: \"Resend code\",\n resetPasswordEnterNewPassword: \"Create your new password\",\n resetPasswordNewPassword: \"New password\",\n resetPasswordConfirmPassword: \"Confirm password\",\n resetPasswordSetNewPassword: \"Set new password\",\n resetPasswordSuccess: \"Your password has been reset successfully.\",\n resetPasswordBackToSignIn: \"Back to sign in\",\n resetPasswordCancel: \"Cancel\",\n resetPasswordDisabled:\n \"Password reset is not available. Please contact your administrator.\",\n verifyEmailTitle: \"Email Verification\",\n verifyEmailVerifying: \"Verifying your email...\",\n verifyEmailPleaseWait:\n \"Please wait while we verify your email address.\",\n verifyEmailSuccess: \"Your email has been verified successfully.\",\n verifyEmailFailed:\n \"Failed to verify your email. The link may have expired or is invalid.\",\n verifyEmailMissingParams:\n \"Invalid verification link. Email and token are required.\",\n verifyEmailSignIn: \"Sign in to your account\",\n verifyEmailBackToSignIn: \"Back to sign in\",\n },\n }),\n });\n\n fr = $dictionary({\n lazy: () => ({\n default: {\n loginSignIn: \"Se connecter\",\n loginContinueWith: \"Continuer avec $1\",\n loginOr: \"OU\",\n loginCancel: \"Annuler\",\n loginForgotPassword: \"Mot de passe oublié ?\",\n loginNoAccount: \"Vous n'avez pas de compte ?\",\n loginSignUp: \"S'inscrire\",\n loginUsername: \"Nom d'utilisateur\",\n loginEmail: \"E-mail\",\n loginPhone: \"Numéro de téléphone\",\n loginPassword: \"Mot de passe\",\n registerCreateAccount: \"Créer un compte\",\n registerContinueWith: \"Continuer avec $1\",\n registerOr: \"OU\",\n registerCancel: \"Annuler\",\n registerHaveAccount: \"Vous avez déjà un compte ?\",\n registerSignIn: \"Se connecter\",\n registerUsername: \"Nom d'utilisateur\",\n registerEmail: \"E-mail\",\n registerPhone: \"Numéro de téléphone\",\n registerPassword: \"Mot de passe\",\n registerConfirmPassword: \"Confirmer le mot de passe\",\n registerDisabled:\n \"L'inscription n'est pas disponible. Veuillez contacter votre administrateur.\",\n registerBackToSignIn: \"Retour à la connexion\",\n registerVerifyTitle: \"Vérifiez votre compte\",\n registerVerifyDescription:\n \"Veuillez entrer le(s) code(s) de vérification qui vous ont été envoyés.\",\n registerEmailCode: \"Code de vérification par e-mail\",\n registerPhoneCode: \"Code de vérification par téléphone\",\n registerVerifySubmit: \"Terminer l'inscription\",\n registerVerifyBack: \"Retour à l'inscription\",\n resetPasswordTitle: \"Réinitialiser le mot de passe\",\n resetPasswordEmail: \"E-mail\",\n resetPasswordEnterEmail:\n \"Entrez votre adresse e-mail pour réinitialiser votre mot de passe\",\n resetPasswordSendCode: \"Envoyer le code de vérification\",\n resetPasswordCodeSent:\n \"Nous avons envoyé un code de vérification à votre e-mail.\",\n resetPasswordEnterCode: \"Entrez le code à 6 chiffres\",\n resetPasswordResendCode: \"Renvoyer le code\",\n resetPasswordEnterNewPassword: \"Créez votre nouveau mot de passe\",\n resetPasswordNewPassword: \"Nouveau mot de passe\",\n resetPasswordConfirmPassword: \"Confirmer le mot de passe\",\n resetPasswordSetNewPassword: \"Définir le nouveau mot de passe\",\n resetPasswordSuccess:\n \"Votre mot de passe a été réinitialisé avec succès.\",\n resetPasswordBackToSignIn: \"Retour à la connexion\",\n resetPasswordCancel: \"Annuler\",\n resetPasswordDisabled:\n \"La réinitialisation du mot de passe n'est pas disponible. Veuillez contacter votre administrateur.\",\n verifyEmailTitle: \"Vérification de l'e-mail\",\n verifyEmailVerifying: \"Vérification de votre e-mail...\",\n verifyEmailPleaseWait:\n \"Veuillez patienter pendant que nous vérifions votre adresse e-mail.\",\n verifyEmailSuccess: \"Votre e-mail a été vérifié avec succès.\",\n verifyEmailFailed:\n \"Échec de la vérification de votre e-mail. Le lien a peut-être expiré ou est invalide.\",\n verifyEmailMissingParams:\n \"Lien de vérification invalide. L'e-mail et le jeton sont requis.\",\n verifyEmailSignIn: \"Se connecter à votre compte\",\n verifyEmailBackToSignIn: \"Retour à la connexion\",\n },\n }),\n });\n}\n","import { ReactAuth } from \"@alepha/react/auth\";\nimport { $page } from \"@alepha/react/router\";\nimport {\n IconLogin2,\n IconLogout2,\n IconMailCheck,\n IconPasswordUser,\n IconUserPlus,\n} from \"@tabler/icons-react\";\nimport { $inject, AlephaError, t } from \"alepha\";\nimport type { UserRealmController } from \"alepha/api/users\";\nimport { $client } from \"alepha/server/links\";\n\n/**\n * Schema for realm query parameter used across auth pages.\n */\nconst realmQuerySchema = t.object({\n r: t.optional(t.string({ description: \"Redirect URL after authentication\" })),\n realm: t.optional(\n t.string({ description: \"User realm name for multi-tenant auth\" }),\n ),\n});\n\nexport class AuthRouter {\n protected readonly userRealmClient = $client<UserRealmController>();\n protected readonly auth = $inject(ReactAuth);\n\n layout = $page({\n name: \"AuthLayout\",\n path: \"/auth\",\n lazy: () => import(\"./components/AuthLayout.tsx\"),\n children: () => [\n this.login,\n this.register,\n this.resetPassword,\n this.verifyEmail,\n ],\n });\n\n login = $page({\n icon: IconLogin2,\n label: \"Sign In\",\n description: \"Sign in to your account\",\n path: \"/login\",\n schema: {\n query: realmQuerySchema,\n },\n can: () => !this.auth.user,\n lazy: () => import(\"./components/Login.tsx\"),\n resolve: async ({ query }) => {\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n register = $page({\n icon: IconUserPlus,\n label: \"Register\",\n description: \"Create a new account\",\n path: \"/register\",\n schema: {\n query: realmQuerySchema,\n },\n can: () => !this.auth.user,\n lazy: () => import(\"./components/Register.tsx\"),\n resolve: async ({ query }) => {\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n resetPassword = $page({\n icon: IconPasswordUser,\n label: \"Reset Password\",\n description: \"Reset your account password\",\n path: \"/reset-password\",\n schema: {\n query: realmQuerySchema,\n },\n can: () => !this.auth.user,\n lazy: () => import(\"./components/ResetPassword.tsx\"),\n resolve: async ({ query }) => {\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n verifyEmail = $page({\n icon: IconMailCheck,\n label: \"Verify Email\",\n description: \"Verify your email address\",\n path: \"/verify-email\",\n schema: {\n query: t.object({\n email: t.optional(t.string()),\n token: t.optional(t.string()),\n }),\n },\n lazy: () => import(\"./components/VerifyEmail.tsx\"),\n });\n\n logout = $page({\n icon: IconLogout2,\n label: \"Sign Out\",\n description: \"Sign out of your account\",\n can: () => !!this.auth.user,\n path: \"/logout\",\n component: () => null,\n resolve: () => {\n this.auth.logout();\n return {};\n },\n });\n\n protected async loadRealmConfig(userRealmName?: string) {\n try {\n return await this.userRealmClient.getRealmConfig({\n query: { userRealmName },\n });\n } catch (e) {\n if (e instanceof AlephaError) {\n throw new AlephaError(\n \"Missing User-Realm Configuration - Did you forget to add '$userRealm()' to your application?\",\n e,\n );\n }\n throw e;\n }\n }\n}\n","import { useAuth } from \"@alepha/react/auth\";\nimport { useRouter } from \"@alepha/react/router\";\nimport {\n ActionButton,\n type ActionMenuConfig,\n type ActionMenuItem,\n type ActionProps,\n ui,\n} from \"@alepha/ui\";\nimport { Avatar } from \"@mantine/core\";\nimport { IconLogin2, IconLogout, IconUser } from \"@tabler/icons-react\";\nimport type { ReactNode } from \"react\";\nimport type { AuthRouter } from \"../../AuthRouter.ts\";\n\nexport interface UserButtonProps\n extends Omit<ActionProps, \"menu\" | \"icon\" | \"onClick\"> {\n /**\n * Additional menu items to display before the logout option\n */\n menuItems?: ActionMenuItem[];\n\n /**\n * Custom logout label (default: \"Sign out\")\n */\n logoutLabel?: string;\n\n /**\n * Menu configuration overrides\n */\n menuConfig?: Partial<Omit<ActionMenuConfig, \"items\">>;\n\n /**\n * Whether to show a divider before logout (default: true when menuItems provided)\n */\n showLogoutDivider?: boolean;\n\n /**\n * Custom icon to use instead of user avatar (default: IconUser)\n */\n icon?: ReactNode;\n}\n\nconst UserButton = (props: UserButtonProps) => {\n const {\n menuItems = [],\n logoutLabel = \"Sign out\",\n menuConfig,\n showLogoutDivider = menuItems.length > 0,\n icon,\n children,\n ...buttonProps\n } = props;\n\n buttonProps.variant ??= \"subtle\";\n\n const auth = useAuth<{\n username?: string;\n email?: string;\n picture?: string;\n }>();\n\n const authRouter = useRouter<AuthRouter>();\n\n if (!auth.user) {\n return (\n <ActionButton\n {...buttonProps}\n icon={IconLogin2}\n href={authRouter.path(\"login\")}\n />\n );\n }\n\n const userLabel = auth.user.username || auth.user.email;\n\n const items: ActionMenuItem[] = [];\n\n // Add user info label if available\n if (auth.user.email && auth.user.username) {\n items.push({\n type: \"label\",\n label: auth.user.email,\n });\n }\n\n // Add custom menu items\n items.push(...menuItems);\n\n // Add divider before logout if needed\n if (showLogoutDivider && items.length > 0) {\n items.push({ type: \"divider\" });\n }\n\n // Add logout item\n items.push({\n label: logoutLabel,\n icon: <IconLogout size={ui.sizes.icon.md} />,\n color: \"red\",\n onClick: () => auth.logout(),\n });\n\n // Use leftSection for Avatar (JSX element), icon prop for component types\n const hasAvatar = !icon && auth.user.picture;\n\n return (\n <ActionButton\n {...buttonProps}\n icon={hasAvatar ? undefined : (icon ?? IconUser)}\n leftSection={\n hasAvatar ? (\n <Avatar\n src={`/api/files/${auth.user.picture}`}\n size={24}\n radius=\"xl\"\n />\n ) : undefined\n }\n menu={{\n position: \"bottom-end\",\n width: 200,\n ...menuConfig,\n items,\n }}\n >\n {children ?? userLabel}\n </ActionButton>\n );\n};\n\nexport default UserButton;\n","import { AlephaReactAuth } from \"@alepha/react/auth\";\nimport { AlephaReactI18n } from \"@alepha/react/i18n\";\nimport { AlephaUI } from \"@alepha/ui\";\nimport { $module } from \"alepha\";\nimport { AuthI18n } from \"./AuthI18n.ts\";\nimport { AuthRouter } from \"./AuthRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./AuthRouter.ts\";\nexport type { UserButtonProps } from \"./components/buttons/UserButton.tsx\";\nexport { default as UserButton } from \"./components/buttons/UserButton.tsx\";\nexport { default as Login } from \"./components/Login.tsx\";\nexport { default as Register } from \"./components/Register.tsx\";\nexport { default as ResetPassword } from \"./components/ResetPassword.tsx\";\nexport { default as VerifyEmail } from \"./components/VerifyEmail.tsx\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Login UI Module\n *\n * @module alepha.ui.auth\n */\nexport const AlephaUIAuth = $module({\n name: \"alepha.ui.auth\",\n services: [AlephaUI, AlephaReactAuth, AlephaReactI18n, AuthRouter, AuthI18n],\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/auth/AuthI18n.ts","../../src/auth/AuthRouter.ts","../../src/auth/components/buttons/UserButton.tsx","../../src/auth/index.ts"],"sourcesContent":["import { $dictionary } from \"@alepha/react/i18n\";\n\nexport class AuthI18n {\n en = $dictionary({\n name: \"alepha.ui.auth.en\",\n lazy: () => ({\n default: {\n loginSignIn: \"Sign in\",\n loginContinueWith: \"Continue with $1\",\n loginOr: \"OR\",\n loginCancel: \"Cancel\",\n loginForgotPassword: \"Forgot password?\",\n loginNoAccount: \"Don't have an account?\",\n loginSignUp: \"Sign up\",\n loginUsername: \"Username\",\n loginEmail: \"Email\",\n loginPhone: \"Phone number\",\n loginPassword: \"Password\",\n registerCreateAccount: \"Create account\",\n registerContinueWith: \"Continue with $1\",\n registerOr: \"OR\",\n registerCancel: \"Cancel\",\n registerHaveAccount: \"Already have an account?\",\n registerSignIn: \"Sign in\",\n registerUsername: \"Username\",\n registerEmail: \"Email\",\n registerPhone: \"Phone number\",\n registerPassword: \"Password\",\n registerConfirmPassword: \"Confirm password\",\n registerDisabled:\n \"Registration is not available. Please contact your administrator.\",\n registerBackToSignIn: \"Back to sign in\",\n registerVerifyTitle: \"Verify your account\",\n registerVerifyDescription:\n \"Please enter the verification code(s) sent to you.\",\n registerEmailCode: \"Email verification code\",\n registerPhoneCode: \"Phone verification code\",\n registerVerifySubmit: \"Complete Registration\",\n registerVerifyBack: \"Back to registration\",\n resetPasswordTitle: \"Reset password\",\n resetPasswordEmail: \"Email\",\n resetPasswordEnterEmail:\n \"Enter your email address to reset your password\",\n resetPasswordSendCode: \"Send verification code\",\n resetPasswordCodeSent: \"We've sent a verification code to your email.\",\n resetPasswordEnterCode: \"Enter the 6-digit code\",\n resetPasswordResendCode: \"Resend code\",\n resetPasswordEnterNewPassword: \"Create your new password\",\n resetPasswordNewPassword: \"New password\",\n resetPasswordConfirmPassword: \"Confirm password\",\n resetPasswordSetNewPassword: \"Set new password\",\n resetPasswordSuccess: \"Your password has been reset successfully.\",\n resetPasswordBackToSignIn: \"Back to sign in\",\n resetPasswordCancel: \"Cancel\",\n resetPasswordDisabled:\n \"Password reset is not available. Please contact your administrator.\",\n verifyEmailTitle: \"Email Verification\",\n verifyEmailVerifying: \"Verifying your email...\",\n verifyEmailPleaseWait:\n \"Please wait while we verify your email address.\",\n verifyEmailSuccess: \"Your email has been verified successfully.\",\n verifyEmailFailed:\n \"Failed to verify your email. The link may have expired or is invalid.\",\n verifyEmailMissingParams:\n \"Invalid verification link. Email and token are required.\",\n verifyEmailSignIn: \"Sign in to your account\",\n verifyEmailBackToSignIn: \"Back to sign in\",\n },\n }),\n });\n\n fr = $dictionary({\n lazy: () => ({\n default: {\n loginSignIn: \"Se connecter\",\n loginContinueWith: \"Continuer avec $1\",\n loginOr: \"OU\",\n loginCancel: \"Annuler\",\n loginForgotPassword: \"Mot de passe oublié ?\",\n loginNoAccount: \"Vous n'avez pas de compte ?\",\n loginSignUp: \"S'inscrire\",\n loginUsername: \"Nom d'utilisateur\",\n loginEmail: \"E-mail\",\n loginPhone: \"Numéro de téléphone\",\n loginPassword: \"Mot de passe\",\n registerCreateAccount: \"Créer un compte\",\n registerContinueWith: \"Continuer avec $1\",\n registerOr: \"OU\",\n registerCancel: \"Annuler\",\n registerHaveAccount: \"Vous avez déjà un compte ?\",\n registerSignIn: \"Se connecter\",\n registerUsername: \"Nom d'utilisateur\",\n registerEmail: \"E-mail\",\n registerPhone: \"Numéro de téléphone\",\n registerPassword: \"Mot de passe\",\n registerConfirmPassword: \"Confirmer le mot de passe\",\n registerDisabled:\n \"L'inscription n'est pas disponible. Veuillez contacter votre administrateur.\",\n registerBackToSignIn: \"Retour à la connexion\",\n registerVerifyTitle: \"Vérifiez votre compte\",\n registerVerifyDescription:\n \"Veuillez entrer le(s) code(s) de vérification qui vous ont été envoyés.\",\n registerEmailCode: \"Code de vérification par e-mail\",\n registerPhoneCode: \"Code de vérification par téléphone\",\n registerVerifySubmit: \"Terminer l'inscription\",\n registerVerifyBack: \"Retour à l'inscription\",\n resetPasswordTitle: \"Réinitialiser le mot de passe\",\n resetPasswordEmail: \"E-mail\",\n resetPasswordEnterEmail:\n \"Entrez votre adresse e-mail pour réinitialiser votre mot de passe\",\n resetPasswordSendCode: \"Envoyer le code de vérification\",\n resetPasswordCodeSent:\n \"Nous avons envoyé un code de vérification à votre e-mail.\",\n resetPasswordEnterCode: \"Entrez le code à 6 chiffres\",\n resetPasswordResendCode: \"Renvoyer le code\",\n resetPasswordEnterNewPassword: \"Créez votre nouveau mot de passe\",\n resetPasswordNewPassword: \"Nouveau mot de passe\",\n resetPasswordConfirmPassword: \"Confirmer le mot de passe\",\n resetPasswordSetNewPassword: \"Définir le nouveau mot de passe\",\n resetPasswordSuccess:\n \"Votre mot de passe a été réinitialisé avec succès.\",\n resetPasswordBackToSignIn: \"Retour à la connexion\",\n resetPasswordCancel: \"Annuler\",\n resetPasswordDisabled:\n \"La réinitialisation du mot de passe n'est pas disponible. Veuillez contacter votre administrateur.\",\n verifyEmailTitle: \"Vérification de l'e-mail\",\n verifyEmailVerifying: \"Vérification de votre e-mail...\",\n verifyEmailPleaseWait:\n \"Veuillez patienter pendant que nous vérifions votre adresse e-mail.\",\n verifyEmailSuccess: \"Votre e-mail a été vérifié avec succès.\",\n verifyEmailFailed:\n \"Échec de la vérification de votre e-mail. Le lien a peut-être expiré ou est invalide.\",\n verifyEmailMissingParams:\n \"Lien de vérification invalide. L'e-mail et le jeton sont requis.\",\n verifyEmailSignIn: \"Se connecter à votre compte\",\n verifyEmailBackToSignIn: \"Retour à la connexion\",\n },\n }),\n });\n}\n","import { ReactAuth } from \"@alepha/react/auth\";\nimport { $page } from \"@alepha/react/router\";\nimport {\n IconLogin2,\n IconLogout2,\n IconMailCheck,\n IconPasswordUser,\n IconUserPlus,\n} from \"@tabler/icons-react\";\nimport { $inject, AlephaError, t } from \"alepha\";\nimport type { UserRealmController } from \"alepha/api/users\";\nimport { $client } from \"alepha/server/links\";\n\n/**\n * Schema for realm query parameter used across auth pages.\n */\nconst realmQuerySchema = t.object({\n r: t.optional(t.string({ description: \"Redirect URL after authentication\" })),\n realm: t.optional(\n t.string({ description: \"User realm name for multi-tenant auth\" }),\n ),\n});\n\nexport class AuthRouter {\n protected readonly userRealmClient = $client<UserRealmController>();\n protected readonly auth = $inject(ReactAuth);\n\n layout = $page({\n name: \"AuthLayout\",\n path: \"/auth\",\n lazy: () => import(\"./components/AuthLayout.tsx\"),\n children: () => [\n this.login,\n this.register,\n this.resetPassword,\n this.verifyEmail,\n ],\n });\n\n login = $page({\n icon: IconLogin2,\n label: \"Sign In\",\n description: \"Sign in to your account\",\n path: \"/login\",\n schema: {\n query: realmQuerySchema,\n },\n can: () => !this.auth.user,\n lazy: () => import(\"./components/Login.tsx\"),\n loader: async ({ query }) => {\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n register = $page({\n icon: IconUserPlus,\n label: \"Register\",\n description: \"Create a new account\",\n path: \"/register\",\n schema: {\n query: realmQuerySchema,\n },\n can: () => !this.auth.user,\n lazy: () => import(\"./components/Register.tsx\"),\n loader: async ({ query }) => {\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n resetPassword = $page({\n icon: IconPasswordUser,\n label: \"Reset Password\",\n description: \"Reset your account password\",\n path: \"/reset-password\",\n schema: {\n query: realmQuerySchema,\n },\n can: () => !this.auth.user,\n lazy: () => import(\"./components/ResetPassword.tsx\"),\n loader: async ({ query }) => {\n return {\n realmConfig: await this.loadRealmConfig(query.realm),\n };\n },\n });\n\n verifyEmail = $page({\n icon: IconMailCheck,\n label: \"Verify Email\",\n description: \"Verify your email address\",\n path: \"/verify-email\",\n schema: {\n query: t.object({\n email: t.optional(t.string()),\n token: t.optional(t.string()),\n }),\n },\n lazy: () => import(\"./components/VerifyEmail.tsx\"),\n });\n\n logout = $page({\n icon: IconLogout2,\n label: \"Sign Out\",\n description: \"Sign out of your account\",\n can: () => !!this.auth.user,\n path: \"/logout\",\n component: () => null,\n loader: () => {\n this.auth.logout();\n return {};\n },\n });\n\n protected async loadRealmConfig(userRealmName?: string) {\n try {\n return await this.userRealmClient.getRealmConfig({\n query: { userRealmName },\n });\n } catch (e) {\n if (e instanceof AlephaError) {\n throw new AlephaError(\n \"Missing User-Realm Configuration - Did you forget to add '$userRealm()' to your application?\",\n e,\n );\n }\n throw e;\n }\n }\n}\n","import { useAuth } from \"@alepha/react/auth\";\nimport { useRouter } from \"@alepha/react/router\";\nimport {\n ActionButton,\n type ActionMenuConfig,\n type ActionMenuItem,\n type ActionProps,\n ui,\n} from \"@alepha/ui\";\nimport { Avatar } from \"@mantine/core\";\nimport { IconLogin2, IconLogout, IconUser } from \"@tabler/icons-react\";\nimport type { ReactNode } from \"react\";\nimport type { AuthRouter } from \"../../AuthRouter.ts\";\n\nexport interface UserButtonProps\n extends Omit<ActionProps, \"menu\" | \"icon\" | \"onClick\"> {\n /**\n * Additional menu items to display before the logout option\n */\n menuItems?: ActionMenuItem[];\n\n /**\n * Custom logout label (default: \"Sign out\")\n */\n logoutLabel?: string;\n\n /**\n * Menu configuration overrides\n */\n menuConfig?: Partial<Omit<ActionMenuConfig, \"items\">>;\n\n /**\n * Whether to show a divider before logout (default: true when menuItems provided)\n */\n showLogoutDivider?: boolean;\n\n /**\n * Custom icon to use instead of user avatar (default: IconUser)\n */\n icon?: ReactNode;\n}\n\nconst UserButton = (props: UserButtonProps) => {\n const {\n menuItems = [],\n logoutLabel = \"Sign out\",\n menuConfig,\n showLogoutDivider = menuItems.length > 0,\n icon,\n children,\n ...buttonProps\n } = props;\n\n buttonProps.variant ??= \"subtle\";\n\n const auth = useAuth<{\n username?: string;\n email?: string;\n picture?: string;\n }>();\n\n const authRouter = useRouter<AuthRouter>();\n\n if (!auth.user) {\n return (\n <ActionButton\n {...buttonProps}\n icon={IconLogin2}\n href={authRouter.path(\"login\")}\n />\n );\n }\n\n const userLabel = auth.user.username || auth.user.email;\n\n const items: ActionMenuItem[] = [];\n\n // Add user info label if available\n if (auth.user.email && auth.user.username) {\n items.push({\n type: \"label\",\n label: auth.user.email,\n });\n }\n\n // Add custom menu items\n items.push(...menuItems);\n\n // Add divider before logout if needed\n if (showLogoutDivider && items.length > 0) {\n items.push({ type: \"divider\" });\n }\n\n // Add logout item\n items.push({\n label: logoutLabel,\n icon: <IconLogout size={ui.sizes.icon.md} />,\n color: \"red\",\n onClick: () => auth.logout(),\n });\n\n // Use leftSection for Avatar (JSX element), icon prop for component types\n const hasAvatar = !icon && auth.user.picture;\n\n return (\n <ActionButton\n {...buttonProps}\n icon={hasAvatar ? undefined : (icon ?? IconUser)}\n leftSection={\n hasAvatar ? (\n <Avatar\n src={`/api/files/${auth.user.picture}`}\n size={24}\n radius=\"xl\"\n />\n ) : undefined\n }\n menu={{\n position: \"bottom-end\",\n width: 200,\n ...menuConfig,\n items,\n }}\n >\n {children ?? userLabel}\n </ActionButton>\n );\n};\n\nexport default UserButton;\n","import { AlephaReactAuth } from \"@alepha/react/auth\";\nimport { AlephaReactI18n } from \"@alepha/react/i18n\";\nimport { AlephaUI } from \"@alepha/ui\";\nimport { $module } from \"alepha\";\nimport { AuthI18n } from \"./AuthI18n.ts\";\nimport { AuthRouter } from \"./AuthRouter.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./AuthRouter.ts\";\nexport type { UserButtonProps } from \"./components/buttons/UserButton.tsx\";\nexport { default as UserButton } from \"./components/buttons/UserButton.tsx\";\nexport { default as Login } from \"./components/Login.tsx\";\nexport { default as Register } from \"./components/Register.tsx\";\nexport { default as ResetPassword } from \"./components/ResetPassword.tsx\";\nexport { default as VerifyEmail } from \"./components/VerifyEmail.tsx\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Login UI Module\n *\n * @module alepha.ui.auth\n */\nexport const AlephaUIAuth = $module({\n name: \"alepha.ui.auth\",\n services: [AlephaUI, AlephaReactAuth, AlephaReactI18n, AuthRouter, AuthI18n],\n});\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/core/atoms/alephaThemeAtom.ts","../../src/core/utils/parseInput.ts","../../src/core/components/form/ControlArray.tsx","../../src/core/components/form/ControlNumber.tsx","../../src/core/components/form/ControlObject.tsx","../../src/core/components/form/ControlSelect.tsx","../../src/core/components/form/Control.tsx","../../src/core/atoms/alephaThemeListAtom.ts","../../src/core/interfaces/AlephaTheme.ts","../../src/core/atoms/themes/default.ts","../../src/core/atoms/themes/midnight.ts","../../src/core/components/buttons/ActionButton.tsx","../../src/core/components/buttons/BurgerButton.tsx","../../src/core/components/buttons/ClipboardButton.tsx","../../src/core/components/buttons/DarkModeButton.tsx","../../src/core/components/buttons/LanguageButton.tsx","../../src/core/components/buttons/OmnibarButton.tsx","../../src/core/components/buttons/ThemeButton.tsx","../../src/core/services/DialogService.tsx","../../src/core/components/dialogs/AlertDialog.tsx","../../src/core/components/dialogs/ConfirmDialog.tsx","../../src/core/components/dialogs/PromptDialog.tsx","../../src/core/components/form/ControlDate.tsx","../../src/core/components/form/ControlQueryBuilder.tsx","../../src/core/components/form/TypeForm.tsx","../../src/core/components/layout/AppBar.tsx","../../src/core/components/layout/Sidebar.tsx","../../src/core/components/layout/AdminShell.tsx","../../src/core/components/layout/Omnibar.tsx","../../src/core/components/layout/AlephaMantineProvider.tsx","../../src/core/components/table/types.ts","../../src/core/components/table/DataTable.tsx","../../src/core/constants/ui.ts","../../src/core/hooks/useDialog.ts","../../src/core/services/ToastService.tsx","../../src/core/hooks/useToast.ts","../../src/core/providers/ThemeProvider.ts","../../src/core/RootRouter.ts","../../src/core/utils/extractSchemaFields.ts","../../src/core/utils/icons.tsx","../../src/core/utils/string.ts","../../src/core/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/core/atoms/alephaThemeAtom.ts","../../src/core/utils/parseInput.ts","../../src/core/components/form/ControlArray.tsx","../../src/core/components/form/ControlNumber.tsx","../../src/core/components/form/ControlObject.tsx","../../src/core/components/form/ControlSelect.tsx","../../src/core/components/form/Control.tsx","../../src/core/atoms/alephaThemeListAtom.ts","../../src/core/interfaces/AlephaTheme.ts","../../src/core/atoms/themes/default.ts","../../src/core/atoms/themes/midnight.ts","../../src/core/components/buttons/ActionButton.tsx","../../src/core/components/buttons/BurgerButton.tsx","../../src/core/components/buttons/ClipboardButton.tsx","../../src/core/components/buttons/DarkModeButton.tsx","../../src/core/components/buttons/LanguageButton.tsx","../../src/core/components/buttons/OmnibarButton.tsx","../../src/core/components/buttons/ThemeButton.tsx","../../src/core/services/DialogService.tsx","../../src/core/components/dialogs/AlertDialog.tsx","../../src/core/components/dialogs/ConfirmDialog.tsx","../../src/core/components/dialogs/PromptDialog.tsx","../../src/core/components/form/ControlDate.tsx","../../src/core/components/form/ControlQueryBuilder.tsx","../../src/core/components/form/TypeForm.tsx","../../src/core/components/layout/AppBar.tsx","../../src/core/components/layout/Sidebar.tsx","../../src/core/components/layout/AdminShell.tsx","../../src/core/components/layout/Omnibar.tsx","../../src/core/components/layout/AlephaMantineProvider.tsx","../../src/core/components/table/types.ts","../../src/core/components/table/DataTable.tsx","../../src/core/constants/ui.ts","../../src/core/hooks/useDialog.ts","../../src/core/services/ToastService.tsx","../../src/core/hooks/useToast.ts","../../src/core/providers/ThemeProvider.ts","../../src/core/RootRouter.ts","../../src/core/utils/extractSchemaFields.ts","../../src/core/utils/icons.tsx","../../src/core/utils/string.ts","../../src/core/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -370,7 +370,7 @@ const AlephaMantineProvider = (props) => {
370
370
  nprogress.complete();
371
371
  },
372
372
  "react:action:error": ({ error }) => {
373
- if (error instanceof FormValidationError) return;
373
+ if (error instanceof FormValidationError || error instanceof TypeBoxError) return;
374
374
  toast.danger({
375
375
  title: error.name || "Error",
376
376
  message: error.message ?? "An error occurred while processing your action."
@@ -2477,7 +2477,7 @@ var Control_default = Control;
2477
2477
  * ```
2478
2478
  */
2479
2479
  const TypeForm = (props) => {
2480
- const { form, columns = 3, children, controlProps, fieldControlProps, skipFormElement = false, skipSubmitButton = false, submitButtonProps } = props;
2480
+ const { form, columns = 3, children, controlProps, fieldControlProps, skipFormElement = false, skipSubmitButton = false, submitButtonProps, fill = true } = props;
2481
2481
  const schema = props.schema || form.options.schema;
2482
2482
  if (!schema?.properties) return null;
2483
2483
  const supportedFields = Object.keys(schema.properties);
@@ -2518,7 +2518,7 @@ const TypeForm = (props) => {
2518
2518
  const content = /* @__PURE__ */ jsxs(Flex$1, {
2519
2519
  direction: "column",
2520
2520
  gap: "sm",
2521
- flex: props.fill ? 1 : void 0,
2521
+ flex: fill ? 1 : void 0,
2522
2522
  ...props.flexProps,
2523
2523
  children: [/* @__PURE__ */ jsx(Flex$1, {
2524
2524
  direction: "column",
@@ -2554,7 +2554,7 @@ const TypeForm = (props) => {
2554
2554
  if (skipFormElement) return content;
2555
2555
  return /* @__PURE__ */ jsx(Flex$1, {
2556
2556
  component: "form",
2557
- flex: props.fill ? 1 : void 0,
2557
+ flex: fill ? 1 : void 0,
2558
2558
  ...form.props,
2559
2559
  ...props.flexProps,
2560
2560
  children: content
@@ -2684,7 +2684,7 @@ const Sidebar = (props) => {
2684
2684
  const getSidebarNodes = () => {
2685
2685
  if (props.items) return props.items;
2686
2686
  if (props.autoPopulateMenu) {
2687
- const items = router.concretePages.map((page) => ({
2687
+ const items = router.concretePages.filter((page) => !page.can || page.can()).map((page) => ({
2688
2688
  label: page.label ?? page.name,
2689
2689
  icon: renderIcon(page.icon),
2690
2690
  href: router.path(page.name)
@@ -2693,6 +2693,7 @@ const Sidebar = (props) => {
2693
2693
  const startsWith = props.autoPopulateMenu.startsWith;
2694
2694
  return items.filter((item) => item.href?.startsWith(startsWith));
2695
2695
  }
2696
+ return items;
2696
2697
  }
2697
2698
  return [];
2698
2699
  };