@arch-cadre/panel 0.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/actions/activity-log/index.cjs +19 -0
  2. package/dist/actions/activity-log/index.d.ts +1 -0
  3. package/dist/actions/activity-log/index.mjs +10 -0
  4. package/dist/actions/rbac/index.cjs +130 -0
  5. package/dist/actions/rbac/index.d.ts +35 -0
  6. package/dist/actions/rbac/index.mjs +92 -0
  7. package/dist/actions/session-manager/index.cjs +99 -0
  8. package/dist/actions/session-manager/index.d.ts +21 -0
  9. package/dist/actions/session-manager/index.mjs +73 -0
  10. package/dist/index.cjs +68 -1
  11. package/dist/index.d.ts +6 -0
  12. package/dist/index.mjs +90 -0
  13. package/dist/navigation.cjs +15 -1
  14. package/dist/navigation.mjs +17 -1
  15. package/dist/routes.cjs +31 -6
  16. package/dist/routes.mjs +34 -6
  17. package/dist/schema/activity-log.cjs +23 -0
  18. package/dist/schema/activity-log.d.ts +103 -0
  19. package/dist/schema/activity-log.mjs +15 -0
  20. package/dist/schema.cjs +16 -0
  21. package/dist/schema.d.ts +1 -0
  22. package/dist/schema.mjs +1 -0
  23. package/dist/ui/activity-log/components/ActivityStatsWidget.cjs +35 -0
  24. package/dist/ui/activity-log/components/ActivityStatsWidget.d.ts +2 -0
  25. package/dist/ui/activity-log/components/ActivityStatsWidget.mjs +15 -0
  26. package/dist/ui/activity-log/components/RecentLogsWidget.cjs +50 -0
  27. package/dist/ui/activity-log/components/RecentLogsWidget.d.ts +2 -0
  28. package/dist/ui/activity-log/components/RecentLogsWidget.mjs +29 -0
  29. package/dist/ui/activity-log/pages/log-list.cjs +61 -0
  30. package/dist/ui/activity-log/pages/log-list.d.ts +2 -0
  31. package/dist/ui/activity-log/pages/log-list.mjs +36 -0
  32. package/dist/ui/components/app-user.cjs +4 -5
  33. package/dist/ui/components/app-user.mjs +5 -7
  34. package/dist/ui/components/profile/components.cjs +4 -1
  35. package/dist/ui/components/profile/components.d.ts +4 -3
  36. package/dist/ui/components/profile/components.mjs +1 -0
  37. package/dist/ui/components/profile/link.cjs +10 -1
  38. package/dist/ui/components/profile/link.d.ts +2 -1
  39. package/dist/ui/components/profile/link.mjs +2 -1
  40. package/dist/ui/components/profile/page.cjs +4 -1
  41. package/dist/ui/components/profile/page.d.ts +2 -1
  42. package/dist/ui/components/profile/page.mjs +9 -2
  43. package/dist/ui/dashboard/page.cjs +6 -16
  44. package/dist/ui/dashboard/page.d.ts +1 -1
  45. package/dist/ui/dashboard/page.mjs +14 -6
  46. package/dist/ui/dashboard/widgets/WelcomeBackUserWidget.cjs +43 -0
  47. package/dist/ui/dashboard/widgets/WelcomeBackUserWidget.d.ts +2 -0
  48. package/dist/ui/dashboard/widgets/WelcomeBackUserWidget.mjs +18 -0
  49. package/dist/ui/rbac/pages/rbac-admin.cjs +328 -0
  50. package/dist/ui/rbac/pages/rbac-admin.d.ts +2 -0
  51. package/dist/ui/rbac/pages/rbac-admin.mjs +375 -0
  52. package/dist/ui/session-manager/components/sessions-list.cjs +160 -0
  53. package/dist/ui/session-manager/components/sessions-list.d.ts +13 -0
  54. package/dist/ui/session-manager/components/sessions-list.mjs +193 -0
  55. package/dist/ui/session-manager/pages/sessions-page.cjs +29 -0
  56. package/dist/ui/session-manager/pages/sessions-page.d.ts +2 -0
  57. package/dist/ui/session-manager/pages/sessions-page.mjs +9 -0
  58. package/locales/en/global.json +109 -1
  59. package/locales/pl/global.json +188 -0
  60. package/package.json +7 -6
  61. package/dist/ui/[...catchAll]/page.cjs +0 -127
  62. package/dist/ui/[...catchAll]/page.d.ts +0 -13
  63. package/dist/ui/[...catchAll]/page.mjs +0 -88
@@ -0,0 +1,193 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ import { useTranslation } from "@arch-cadre/intl";
4
+ import { cn, Icon, toast } from "@arch-cadre/ui";
5
+ import {
6
+ AlertDialog,
7
+ AlertDialogAction,
8
+ AlertDialogCancel,
9
+ AlertDialogContent,
10
+ AlertDialogDescription,
11
+ AlertDialogFooter,
12
+ AlertDialogHeader,
13
+ AlertDialogTitle,
14
+ AlertDialogTrigger
15
+ } from "@arch-cadre/ui/components/alert-dialog";
16
+ import { Badge } from "@arch-cadre/ui/components/badge";
17
+ import { Button } from "@arch-cadre/ui/components/button";
18
+ import { useRouter } from "next/navigation";
19
+ import { useState, useTransition } from "react";
20
+ import {
21
+ revokeAllOtherSessionsAction,
22
+ revokeSessionAction
23
+ } from "../../../actions/session-manager/index.mjs";
24
+ const CORE_SESSION_KEYS = [
25
+ "id",
26
+ "createdAt",
27
+ "expiresAt",
28
+ "isCurrent",
29
+ "userId"
30
+ ];
31
+ export function SessionsList({ sessions }) {
32
+ const router = useRouter();
33
+ const [isPending, startTransition] = useTransition();
34
+ const [revokingSessionId, setRevokingSessionId] = useState(
35
+ null
36
+ );
37
+ const { t } = useTranslation();
38
+ const renderAugmentations = (session) => {
39
+ return Object.entries(session).filter(([key]) => !CORE_SESSION_KEYS.includes(key)).map(([key, value]) => {
40
+ if (key === "twoFactorVerified" || key === "two_factor_verified") {
41
+ return /* @__PURE__ */ React.createElement(
42
+ Badge,
43
+ {
44
+ key,
45
+ variant: "outline",
46
+ className: cn(
47
+ value ? "text-[10px] px-1.5 text-green-600 border-green-200" : "text-[10px] px-1.5 text-red-600 border-red-200"
48
+ )
49
+ },
50
+ /* @__PURE__ */ React.createElement(
51
+ Icon,
52
+ {
53
+ icon: "solar:shield-check-broken",
54
+ className: "h-2.5 w-2.5 mr-0.5"
55
+ }
56
+ ),
57
+ t("2FA")
58
+ );
59
+ }
60
+ if (typeof value === "boolean" && value === false) return null;
61
+ return /* @__PURE__ */ React.createElement(
62
+ Badge,
63
+ {
64
+ key,
65
+ variant: "outline",
66
+ className: "text-[10px] px-1.5 text-muted-foreground uppercase font-black tracking-widest"
67
+ },
68
+ t(key),
69
+ typeof value !== "boolean" && `: ${value}`
70
+ );
71
+ });
72
+ };
73
+ const handleRevokeSession = (sessionId) => {
74
+ setRevokingSessionId(sessionId);
75
+ startTransition(async () => {
76
+ const result = await revokeSessionAction(sessionId);
77
+ if (result.error) {
78
+ toast.error(result.error);
79
+ } else {
80
+ toast.success(t("Session revoked successfully"));
81
+ router.refresh();
82
+ }
83
+ setRevokingSessionId(null);
84
+ });
85
+ };
86
+ const handleRevokeAllOther = () => {
87
+ startTransition(async () => {
88
+ const result = await revokeAllOtherSessionsAction();
89
+ if (result.error) {
90
+ toast.error(result.error);
91
+ } else {
92
+ toast.success(t("All other sessions revoked successfully"));
93
+ router.refresh();
94
+ }
95
+ });
96
+ };
97
+ const isExpiringSoon = (expiresAt) => {
98
+ const now = /* @__PURE__ */ new Date();
99
+ const diffDays = (expiresAt.getTime() - now.getTime()) / (1e3 * 60 * 60 * 24);
100
+ return diffDays < 7;
101
+ };
102
+ const otherSessions = sessions.filter((s) => !s.isCurrent);
103
+ return /* @__PURE__ */ React.createElement("div", { className: "space-y-4" }, otherSessions.length > 0 && /* @__PURE__ */ React.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ React.createElement(AlertDialog, null, /* @__PURE__ */ React.createElement(AlertDialogTrigger, { asChild: true }, /* @__PURE__ */ React.createElement(Button, { variant: "outline", size: "sm", disabled: isPending }, /* @__PURE__ */ React.createElement(Icon, { icon: "solar:logout-2-broken", className: "h-4 w-4 mr-2" }), t("Revoke All Other Sessions"))), /* @__PURE__ */ React.createElement(AlertDialogContent, null, /* @__PURE__ */ React.createElement(AlertDialogHeader, null, /* @__PURE__ */ React.createElement(AlertDialogTitle, null, t("Revoke All Other Sessions?")), /* @__PURE__ */ React.createElement(AlertDialogDescription, null, t(
104
+ "This will sign out all other devices. You will remain signed in on this device. This action cannot be undone."
105
+ ))), /* @__PURE__ */ React.createElement(AlertDialogFooter, null, /* @__PURE__ */ React.createElement(AlertDialogCancel, null, t("Cancel")), /* @__PURE__ */ React.createElement(
106
+ AlertDialogAction,
107
+ {
108
+ onClick: handleRevokeAllOther,
109
+ disabled: isPending,
110
+ className: "bg-destructive text-destructive-foreground hover:bg-destructive/90"
111
+ },
112
+ isPending ? t("Revoking...") : t("Revoke All")
113
+ ))))), /* @__PURE__ */ React.createElement("div", { className: "space-y-3" }, sessions.map((session) => /* @__PURE__ */ React.createElement(
114
+ "div",
115
+ {
116
+ key: session.id,
117
+ className: cn(
118
+ "flex items-center justify-between p-4 rounded-lg border bg-card",
119
+ session.isCurrent && "ring-2 ring-primary"
120
+ )
121
+ },
122
+ /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React.createElement(
123
+ "div",
124
+ {
125
+ className: cn(
126
+ "flex h-10 w-10 items-center justify-center rounded-full",
127
+ session.isCurrent ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"
128
+ )
129
+ },
130
+ /* @__PURE__ */ React.createElement(Icon, { icon: "solar:monitor-broken", className: "h-5 w-5" })
131
+ ), /* @__PURE__ */ React.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React.createElement("span", { className: "font-medium text-sm" }, session.isCurrent ? t("Current Session") : t("Session")), session.isCurrent && /* @__PURE__ */ React.createElement(Badge, { variant: "secondary", className: "text-[10px] px-1.5" }, t("This device")), renderAugmentations(session)), /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-3 text-xs text-muted-foreground" }, /* @__PURE__ */ React.createElement("span", { className: "flex items-center gap-1" }, /* @__PURE__ */ React.createElement(
132
+ Icon,
133
+ {
134
+ icon: "solar:clock-circle-broken",
135
+ className: "h-3 w-3"
136
+ }
137
+ ), t("Started {{ time }}", {
138
+ time: session.createdAt
139
+ })), /* @__PURE__ */ React.createElement("span", { className: "flex items-center gap-1" }, /* @__PURE__ */ React.createElement(
140
+ Icon,
141
+ {
142
+ icon: "solar:hourglass-line-broken",
143
+ className: cn(
144
+ "h-3 w-3",
145
+ isExpiringSoon(session.expiresAt) && "text-orange-500"
146
+ )
147
+ }
148
+ ), t("Expires {{ time }}", {
149
+ time: session.expiresAt
150
+ }))))),
151
+ !session.isCurrent && /* @__PURE__ */ React.createElement(AlertDialog, null, /* @__PURE__ */ React.createElement(AlertDialogTrigger, { asChild: true }, /* @__PURE__ */ React.createElement(
152
+ Button,
153
+ {
154
+ variant: "ghost",
155
+ size: "sm",
156
+ className: "text-muted-foreground hover:text-destructive",
157
+ disabled: isPending && revokingSessionId === session.id
158
+ },
159
+ isPending && revokingSessionId === session.id ? /* @__PURE__ */ React.createElement(
160
+ Icon,
161
+ {
162
+ icon: "solar:refresh-broken",
163
+ className: "h-4 w-4 animate-spin"
164
+ }
165
+ ) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
166
+ Icon,
167
+ {
168
+ icon: "solar:logout-2-broken",
169
+ className: "h-4 w-4 mr-1"
170
+ }
171
+ ), t("Revoke"))
172
+ )), /* @__PURE__ */ React.createElement(AlertDialogContent, null, /* @__PURE__ */ React.createElement(AlertDialogHeader, null, /* @__PURE__ */ React.createElement(AlertDialogTitle, null, t("Revoke Session?")), /* @__PURE__ */ React.createElement(AlertDialogDescription, null, t(
173
+ "This will sign out this device immediately. The session was started {{ time }}.",
174
+ {
175
+ time: session.createdAt
176
+ }
177
+ ))), /* @__PURE__ */ React.createElement(AlertDialogFooter, null, /* @__PURE__ */ React.createElement(AlertDialogCancel, null, t("Cancel")), /* @__PURE__ */ React.createElement(
178
+ AlertDialogAction,
179
+ {
180
+ onClick: () => handleRevokeSession(session.id),
181
+ disabled: isPending,
182
+ className: "bg-destructive text-destructive-foreground hover:bg-destructive/90"
183
+ },
184
+ isPending ? t("Revoking...") : t("Revoke")
185
+ ))))
186
+ ))), sessions.length === 0 && /* @__PURE__ */ React.createElement("div", { className: "text-center py-8 text-muted-foreground" }, /* @__PURE__ */ React.createElement(
187
+ Icon,
188
+ {
189
+ icon: "solar:devices-broken",
190
+ className: "h-12 w-12 mx-auto mb-3 opacity-50"
191
+ }
192
+ ), /* @__PURE__ */ React.createElement("p", null, t("No active sessions found"))), sessions.length === 1 && sessions[0].isCurrent && /* @__PURE__ */ React.createElement("p", { className: "text-sm text-muted-foreground text-center py-4" }, t("You only have one active session (this device).")));
193
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ module.exports = SessionsSettingsPage;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _server = require("@arch-cadre/intl/server");
9
+ var _sessionManager = require("../../../actions/session-manager/index.cjs");
10
+ var _sessionsList = require("../components/sessions-list.cjs");
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
+ async function SessionsSettingsPage() {
14
+ const {
15
+ t
16
+ } = await (0, _server.getTranslation)();
17
+ const {
18
+ sessions
19
+ } = await (0, _sessionManager.getSessionsAction)();
20
+ return /* @__PURE__ */React.createElement("div", {
21
+ className: "space-y-6"
22
+ }, /* @__PURE__ */React.createElement("div", null, /* @__PURE__ */React.createElement("h2", {
23
+ className: "text-2xl font-bold"
24
+ }, t("Active Sessions")), /* @__PURE__ */React.createElement("p", {
25
+ className: "text-muted-foreground"
26
+ }, t("Manage your active sessions and sign out from other devices."))), /* @__PURE__ */React.createElement(_sessionsList.SessionsList, {
27
+ sessions
28
+ }));
29
+ }
@@ -0,0 +1,2 @@
1
+ import * as React from "react";
2
+ export default function SessionsSettingsPage(): Promise<React.JSX.Element>;
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ import { getTranslation } from "@arch-cadre/intl/server";
3
+ import { getSessionsAction } from "../../../actions/session-manager/index.mjs";
4
+ import { SessionsList } from "../components/sessions-list.mjs";
5
+ export default async function SessionsSettingsPage() {
6
+ const { t } = await getTranslation();
7
+ const { sessions } = await getSessionsAction();
8
+ return /* @__PURE__ */ React.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("h2", { className: "text-2xl font-bold" }, t("Active Sessions")), /* @__PURE__ */ React.createElement("p", { className: "text-muted-foreground" }, t("Manage your active sessions and sign out from other devices."))), /* @__PURE__ */ React.createElement(SessionsList, { sessions }));
9
+ }
@@ -76,5 +76,113 @@
76
76
  "System": "System",
77
77
  "Module Manager": "Module Manager",
78
78
  "Panel Core": "Panel Core",
79
- "Panel Core Settings": "Panel Core Settings"
79
+ "Panel Core Settings": "Panel Core Settings",
80
+ "Not authenticated": "Not authenticated",
81
+ "Forbidden": "Forbidden",
82
+ "Invalid or missing fields": "Invalid or missing fields",
83
+ "Weak password": "Weak password",
84
+ "Internal error": "Internal error",
85
+ "Incorrect password": "Incorrect password",
86
+ "Updated password": "Updated password",
87
+ "Please enter your email": "Please enter your email",
88
+ "Please enter a valid email": "Please enter a valid email",
89
+ "This email is already used": "This email is already used",
90
+ "Name is required": "Name is required",
91
+ "Name is too long": "Name is too long",
92
+ "Profile updated successfully": "Profile updated successfully",
93
+ "Profile Settings": "Profile Settings",
94
+ "Management for {selectedUser}": "Management for {selectedUser}",
95
+ "Manage your account settings and profile information.": "Manage your account settings and profile information.",
96
+ "Remove image": "Remove image",
97
+ "Upload image": "Upload image",
98
+ "Upload Image": "Upload Image",
99
+ "Max file size: 1MB": "Max file size: 1MB",
100
+ "Display Name": "Display Name",
101
+ "Your name": "Your name",
102
+ "Saving...": "Saving...",
103
+ "Save Changes": "Save Changes",
104
+ "Current Password": "Current Password",
105
+ "Enter current password": "Enter current password",
106
+ "New Password": "New Password",
107
+ "Enter new password": "Enter new password",
108
+ "Confirm New Password": "Confirm New Password",
109
+ "Confirm new password": "Confirm new password",
110
+ "Updating...": "Updating...",
111
+ "Update Password": "Update Password",
112
+ "New Email Address": "New Email Address",
113
+ "Enter new email address": "Enter new email address",
114
+ "Update Email": "Update Email",
115
+ "Welcome back, {name}!": "Welcome back, {name}!",
116
+ "It's good to see you again.": "It's good to see you again.",
117
+ "You are logged in as {email}": "You are logged in as {email}",
118
+ "Activity": "Activity",
119
+ "Real-time audit log of all system events.": "Real-time audit log of all system events.",
120
+ "Event": "Event",
121
+ "User": "User",
122
+ "Details": "Details",
123
+ "Time": "Time",
124
+ "automated-task": "automated-task",
125
+ "No activity recorded yet.": "No activity recorded yet.",
126
+ "Recent Activity": "Recent Activity",
127
+ "The latest events from your system.": "The latest events from your system.",
128
+ "No recent activity found.": "No recent activity found.",
129
+ "Events Today": "Events Today",
130
+ "System activities recorded today": "System activities recorded today",
131
+ "Cannot revoke current session. Use sign out instead.": "Cannot revoke current session. Use sign out instead.",
132
+ "Session not found": "Session not found",
133
+ "Manage Device Sessions": "Manage Device Sessions",
134
+ "Active Sessions": "Active Sessions",
135
+ "Manage your active sessions and sign out from other devices.": "Manage your active sessions and sign out from other devices.",
136
+ "2FA": "2FA",
137
+ "Session revoked successfully": "Session revoked successfully",
138
+ "All other sessions revoked successfully": "All other sessions revoked successfully",
139
+ "Revoke All Other Sessions": "Revoke All Other Sessions",
140
+ "Revoke All Other Sessions?": "Revoke All Other Sessions?",
141
+ "This will sign out all other devices. You will remain signed in on this device. This action cannot be undone.": "This will sign out all other devices. You will remain signed in on this device. This action cannot be undone.",
142
+ "Cancel": "Cancel",
143
+ "Revoking...": "Revoking...",
144
+ "Revoke All": "Revoke All",
145
+ "Current Session": "Current Session",
146
+ "Session": "Session",
147
+ "This device": "This device",
148
+ "Started {{ time }}": "Started {{ time }}",
149
+ "Expires {{ time }}": "Expires {{ time }}",
150
+ "Revoke": "Revoke",
151
+ "Revoke Session?": "Revoke Session?",
152
+ "This will sign out this device immediately. The session was started {{ time }}.": "This will sign out this device immediately. The session was started {{ time }}.",
153
+ "No active sessions found": "No active sessions found",
154
+ "You only have one active session (this device).": "You only have one active session (this device).",
155
+ "Activity Logs": "Activity Logs",
156
+ "Roles & Permissions": "Roles & Permissions",
157
+ "Edit Role: {roleName}": "Edit Role: {roleName}",
158
+ "Manage permissions for role {roleName}": "Manage permissions for role {roleName}",
159
+ "Manage roles and permissions for {selectedUser}": "Manage roles and permissions for {selectedUser}",
160
+ "Failed to load RBAC data.": "Failed to load RBAC data.",
161
+ "Failed to load permissions for role.": "Failed to load permissions for role.",
162
+ "Failed to load user RBAC data.": "Failed to load user RBAC data.",
163
+ "Role created.": "Role created.",
164
+ "Failed to create role.": "Failed to create role.",
165
+ "Permission created.": "Permission created.",
166
+ "Failed to create permission.": "Failed to create permission.",
167
+ "Role deleted.": "Role deleted.",
168
+ "Failed to delete role.": "Failed to delete role.",
169
+ "Permission deleted.": "Permission deleted.",
170
+ "Failed to delete permission.": "Failed to delete permission.",
171
+ "Action failed.": "Action failed.",
172
+ "RBAC Manager": "RBAC Manager",
173
+ "Manage roles, permissions, and their relationships.": "Manage roles, permissions, and their relationships.",
174
+ "Roles": "Roles",
175
+ "System roles.": "System roles.",
176
+ "New role...": "New role...",
177
+ "Add": "Add",
178
+ "Permissions": "Permissions",
179
+ "System permissions.": "System permissions.",
180
+ "New permission...": "New permission...",
181
+ "Users": "Users",
182
+ "Manage user roles.": "Manage user roles.",
183
+ "User Roles": "User Roles",
184
+ "Direct Permissions (User-specific)": "Direct Permissions (User-specific)",
185
+ "Effective Permissions (inherited + direct)": "Effective Permissions (inherited + direct)",
186
+ "No permissions": "No permissions",
187
+ "Role-Based Access Control Manager": "Role-Based Access Control Manager"
80
188
  }
@@ -0,0 +1,188 @@
1
+ {
2
+ "Panel settings saved. Your admin path has changed!": "Ustawienia panelu zostały zapisane. Twoja ścieżka administratora uległa zmianie!",
3
+ "Failed to save settings": "Nie udało się zapisać ustawień",
4
+ "Kryo Panel Settings": "Ustawienia panelu Kryo",
5
+ "Manage kryo-panel settings": "Zarządzaj ustawieniami panelu kryo",
6
+ "Path Prefix": "Prefiks ścieżki",
7
+ "Warning": "Ostrzeżenie",
8
+ "Warning changing the path prefix may affect existing links and bookmarks. Make sure to update any references to the admin panel URL accordingly.": "Ostrzeżenie zmiana prefiksu ścieżki może mieć wpływ na istniejące łącza i zakładki. Pamiętaj o odpowiedniej aktualizacji wszelkich odniesień do adresu URL panelu administracyjnego.",
9
+ "Save Configuration": "Zapisz konfigurację",
10
+ "Error": "Błąd",
11
+ "An error occurred while loading the page.": "Wystąpił błąd podczas ładowania strony.",
12
+ "errors": {
13
+ "db_error": "błędy.db_error"
14
+ },
15
+ "Settings": "Ustawienia",
16
+ "Check database connection": "Sprawdź połączenie z bazą danych",
17
+ "Check core settings": "Sprawdź ustawienia podstawowe",
18
+ "Check module dependencies": "Sprawdź zależności modułów",
19
+ "Unauthorized": "Nieautoryzowane",
20
+ "Unauthorized access to the requested resource": "Nieautoryzowany dostęp do żądanego zasobu",
21
+ "Check permissions for the current user": "Sprawdź uprawnienia bieżącego użytkownika",
22
+ "Unknown error": "Nieznany błąd",
23
+ "Try Again": "Spróbuj ponownie",
24
+ "Pos": "Poz",
25
+ "Settings Overview": "Przegląd ustawień",
26
+ "Manage your global settings": "Zarządzaj ustawieniami globalnymi",
27
+ "No settings available": "Brak dostępnych ustawień",
28
+ "Modules Marketplace": "Rynek modułów",
29
+ "Manage your installed modules": "Zarządzaj zainstalowanymi modułami",
30
+ "Welcome {name}": "Witamy {name}",
31
+ "Back to Dashboard": "Powrót do Panelu",
32
+ "Dashboard": "Panel",
33
+ "Logout successful!": "Wylogowanie powiodło się!",
34
+ "error_occurred": "wystąpił_błąd",
35
+ "user": {
36
+ "upgrade": "aktualizacja.użytkownika",
37
+ "billing": "użytkownik.rozliczenia",
38
+ "notifications": "powiadomienia.użytkownika"
39
+ },
40
+ "edit": "redagować",
41
+ "sidebar": {
42
+ "settings": "pasek boczny.ustawienia",
43
+ "dashboard": "panel boczny.panel"
44
+ },
45
+ "Logout": "Wyloguj się",
46
+ "Not Found": "Nie znaleziono",
47
+ "Not found documentation for path": "Nie znaleziono dokumentacji dla ścieżki",
48
+ "back": "z powrotem",
49
+ "docs": {
50
+ "title": "tytuł.dokumentów",
51
+ "browsing": "przeglądanie dokumentów",
52
+ "back": "dokumenty.powrót",
53
+ "file": "plik.dokumentów"
54
+ },
55
+ "Invalid file": "Nieprawidłowy plik",
56
+ "Uploading...": "Przesyłanie...",
57
+ "Upload successful": "Przesyłanie powiodło się",
58
+ "Upload error": "Błąd przesyłania",
59
+ "No write access": "Brak dostępu do zapisu",
60
+ "Upload disabled": "Przesyłanie wyłączone",
61
+ "Upload module": "Prześlij moduł",
62
+ "Public Modules": "Moduły publiczne",
63
+ "Core Modules": "Podstawowe moduły",
64
+ "Waiting...": "Czekanie...",
65
+ "Starting...": "Startowy...",
66
+ "View documentation": "Zobacz dokumentację",
67
+ "Working...": "Pracujący...",
68
+ "Enabled": "Włączony",
69
+ "Disabled": "Wyłączony",
70
+ "Installed": "Zainstalowany",
71
+ "Processing": "Przetwarzanie",
72
+ "No dependencies": "Żadnych zależności",
73
+ "Extends": "Rozciąga się",
74
+ "Requires": "Wymaga",
75
+ "General": "Ogólny",
76
+ "System": "System",
77
+ "Module Manager": "Menedżer modułów",
78
+ "Panel Core": "Rdzeń panelu",
79
+ "Panel Core Settings": "Ustawienia rdzenia panelu",
80
+ "Not authenticated": "Nieuwierzytelnione",
81
+ "Forbidden": "Zabroniony",
82
+ "Invalid or missing fields": "Nieprawidłowe lub brakujące pola",
83
+ "Weak password": "Słabe hasło",
84
+ "Internal error": "Błąd wewnętrzny",
85
+ "Incorrect password": "Nieprawidłowe hasło",
86
+ "Updated password": "Zaktualizowane hasło",
87
+ "Please enter your email": "Proszę podać swój adres e-mail",
88
+ "Please enter a valid email": "Proszę podać prawidłowy adres e-mail",
89
+ "This email is already used": "Ten adres e-mail jest już używany",
90
+ "Name is required": "Imię i nazwisko jest wymagane",
91
+ "Name is too long": "Nazwa jest za długa",
92
+ "Profile updated successfully": "Profil został pomyślnie zaktualizowany",
93
+ "Profile Settings": "Ustawienia profilu",
94
+ "Management for {selectedUser}": "Zarządzanie dla {selectedUser}",
95
+ "Manage your account settings and profile information.": "Zarządzaj ustawieniami konta i informacjami o profilu.",
96
+ "Remove image": "Usuń obraz",
97
+ "Upload image": "Prześlij obraz",
98
+ "Upload Image": "Prześlij obraz",
99
+ "Max file size: 1MB": "Maksymalny rozmiar pliku: 1 MB",
100
+ "Display Name": "Nazwa wyświetlana",
101
+ "Your name": "Twoje imię",
102
+ "Saving...": "Oszczędność...",
103
+ "Save Changes": "Zapisz zmiany",
104
+ "Current Password": "Aktualne hasło",
105
+ "Enter current password": "Wprowadź aktualne hasło",
106
+ "New Password": "Nowe hasło",
107
+ "Enter new password": "Wprowadź nowe hasło",
108
+ "Confirm New Password": "Potwierdź nowe hasło",
109
+ "Confirm new password": "Potwierdź nowe hasło",
110
+ "Updating...": "Aktualizowanie...",
111
+ "Update Password": "Zaktualizuj hasło",
112
+ "New Email Address": "Nowy adres e-mail",
113
+ "Enter new email address": "Wpisz nowy adres e-mail",
114
+ "Update Email": "Zaktualizuj e-mail",
115
+ "Welcome back, {name}!": "Witaj ponownie, {name}!",
116
+ "It's good to see you again.": "Dobrze Cię znowu widzieć.",
117
+ "You are logged in as {email}": "Jesteś zalogowany jako {email}",
118
+ "Activity": "Działalność",
119
+ "Real-time audit log of all system events.": "Dziennik audytu wszystkich zdarzeń systemowych w czasie rzeczywistym.",
120
+ "Event": "Wydarzenie",
121
+ "User": "Użytkownik",
122
+ "Details": "Bliższe dane",
123
+ "Time": "Czas",
124
+ "automated-task": "zadanie automatyczne",
125
+ "No activity recorded yet.": "Nie zarejestrowano jeszcze żadnej aktywności.",
126
+ "Recent Activity": "Ostatnia aktywność",
127
+ "The latest events from your system.": "Najnowsze zdarzenia z Twojego systemu.",
128
+ "No recent activity found.": "Nie znaleziono ostatniej aktywności.",
129
+ "Events Today": "Dzisiejsze zdarzenia",
130
+ "System activities recorded today": "Działania systemowe zarejestrowane dzisiaj",
131
+ "Cannot revoke current session. Use sign out instead.": "Nie można odwołać bieżącej sesji. Zamiast tego użyj wylogowania.",
132
+ "Session not found": "Nie znaleziono sesji",
133
+ "Manage Device Sessions": "Zarządzaj sesjami urządzeń",
134
+ "Active Sessions": "Aktywne sesje",
135
+ "Manage your active sessions and sign out from other devices.": "Zarządzaj aktywnymi sesjami i wyloguj się z innych urządzeń.",
136
+ "2FA": "2FA",
137
+ "Session revoked successfully": "Sesja została pomyślnie odwołana",
138
+ "All other sessions revoked successfully": "Wszystkie pozostałe sesje zostały pomyślnie odwołane",
139
+ "Revoke All Other Sessions": "Odwołaj wszystkie inne sesje",
140
+ "Revoke All Other Sessions?": "Odwołać wszystkie inne sesje?",
141
+ "This will sign out all other devices. You will remain signed in on this device. This action cannot be undone.": "Spowoduje to wylogowanie wszystkich pozostałych urządzeń. Pozostaniesz zalogowany na tym urządzeniu. Tej akcji nie można cofnąć.",
142
+ "Cancel": "Anulować",
143
+ "Revoking...": "Odwoływanie...",
144
+ "Revoke All": "Odwołaj wszystko",
145
+ "Current Session": "Bieżąca sesja",
146
+ "Session": "Sesja",
147
+ "This device": "To urządzenie",
148
+ "Started {{ time }}": "Rozpoczęto {{ time }}",
149
+ "Expires {{ time }}": "Wygasa {{ time }}",
150
+ "Revoke": "Unieważnić",
151
+ "Revoke Session?": "Odwołać sesję?",
152
+ "This will sign out this device immediately. The session was started {{ time }}.": "Spowoduje to natychmiastowe wylogowanie tego urządzenia. Sesja została rozpoczęta {{ time }}.",
153
+ "No active sessions found": "Nie znaleziono aktywnych sesji",
154
+ "You only have one active session (this device).": "Masz tylko jedną aktywną sesję (to urządzenie).",
155
+ "Activity Logs": "Dzienniki aktywności",
156
+ "Roles & Permissions": "Role i uprawnienia",
157
+ "Edit Role: {roleName}": "Edytuj rolę: {roleName}",
158
+ "Manage permissions for role {roleName}": "Zarządzaj uprawnieniami dla roli {roleName}",
159
+ "Manage roles and permissions for {selectedUser}": "Zarządzaj rolami i uprawnieniami dla {selectedUser}",
160
+ "Failed to load RBAC data.": "Nie udało się załadować danych RBAC.",
161
+ "Failed to load permissions for role.": "Nie udało się załadować uprawnień dla roli.",
162
+ "Failed to load user RBAC data.": "Nie udało się załadować danych RBAC użytkownika.",
163
+ "Role created.": "Rola utworzona.",
164
+ "Failed to create role.": "Nie udało się utworzyć roli.",
165
+ "Permission created.": "Utworzono zezwolenie.",
166
+ "Failed to create permission.": "Nie udało się utworzyć pozwolenia.",
167
+ "Role deleted.": "Rola usunięta.",
168
+ "Failed to delete role.": "Nie udało się usunąć roli.",
169
+ "Permission deleted.": "Uprawnienie usunięte.",
170
+ "Failed to delete permission.": "Nie udało się usunąć pozwolenia.",
171
+ "Action failed.": "Akcja nie powiodła się.",
172
+ "RBAC Manager": "Menedżer RBAC",
173
+ "Manage roles, permissions, and their relationships.": "Zarządzaj rolami, uprawnieniami i ich relacjami.",
174
+ "Roles": "Role",
175
+ "System roles.": "Role systemowe.",
176
+ "New role...": "Nowa rola...",
177
+ "Add": "Dodać",
178
+ "Permissions": "Uprawnienia",
179
+ "System permissions.": "Uprawnienia systemowe.",
180
+ "New permission...": "Nowe pozwolenie...",
181
+ "Users": "Użytkownicy",
182
+ "Manage user roles.": "Zarządzaj rolami użytkowników.",
183
+ "User Roles": "Role użytkowników",
184
+ "Direct Permissions (User-specific)": "Uprawnienia bezpośrednie (specyficzne dla użytkownika)",
185
+ "Effective Permissions (inherited + direct)": "Obowiązujące uprawnienia (dziedziczone + bezpośrednie)",
186
+ "No permissions": "Brak uprawnień",
187
+ "Role-Based Access Control Manager": "Menedżer kontroli dostępu."
188
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arch-cadre/panel",
3
- "version": "0.0.1",
3
+ "version": "1.0.2",
4
4
  "type": "module",
5
5
  "description": "Panel module for Kryo framework",
6
6
  "exports": {
@@ -36,18 +36,19 @@
36
36
  "lint": "biome check --write"
37
37
  },
38
38
  "dependencies": {
39
- "@arch-cadre/modules": "^0.0.15",
39
+ "@arch-cadre/modules": "^0.0.17",
40
40
  "@hookform/resolvers": "^3.10.0",
41
41
  "react-hook-form": "^7.54.2",
42
42
  "@iconify-json/solar": "^1.2.2",
43
43
  "@iconify/react": "^6.0.0",
44
44
  "adm-zip": "^0.5.16",
45
+ "drizzle-orm": "1.0.0-beta.6-4414a19",
45
46
  "lucide-react": "^0.475.0",
46
47
  "sonner": "^2.0.7",
47
48
  "zod": "^3.24.1"
48
49
  },
49
50
  "devDependencies": {
50
- "@arch-cadre/core": "^0.0.15",
51
+ "@arch-cadre/core": "^0.0.17",
51
52
  "@types/adm-zip": "^0.5.7",
52
53
  "@types/node": "^20.19.9",
53
54
  "@types/react": "^19",
@@ -56,9 +57,9 @@
56
57
  "unbuild": "^3.6.1"
57
58
  },
58
59
  "peerDependencies": {
59
- "@arch-cadre/core": "^0.0.15",
60
- "@arch-cadre/intl": "^0.0.15",
61
- "@arch-cadre/ui": "^0.0.15",
60
+ "@arch-cadre/core": "^0.0.17",
61
+ "@arch-cadre/intl": "^0.0.17",
62
+ "@arch-cadre/ui": "^0.0.17",
62
63
  "next": ">=13.0.0",
63
64
  "react": "^19.0.0",
64
65
  "react-dom": "^19.0.0"