@w-iris/react 0.1.1 → 0.1.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.
@@ -1,4 +1,7 @@
1
1
  export * from "./AdminAuth";
2
2
  export * from "./AdminNavigation";
3
3
  export * from "./AdminUser";
4
+ export * from "./pages/ProfilePage";
5
+ export * from "./pages/SecurityPage";
6
+ export * from "./pages/SettingsPage";
4
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC"}
@@ -17,4 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./AdminAuth"), exports);
18
18
  __exportStar(require("./AdminNavigation"), exports);
19
19
  __exportStar(require("./AdminUser"), exports);
20
+ __exportStar(require("./pages/ProfilePage"), exports);
21
+ __exportStar(require("./pages/SecurityPage"), exports);
22
+ __exportStar(require("./pages/SettingsPage"), exports);
20
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,oDAAkC;AAClC,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,oDAAkC;AAClC,8CAA4B;AAC5B,sDAAoC;AACpC,uDAAqC;AACrC,uDAAqC"}
@@ -0,0 +1,40 @@
1
+ export type AdminProfileUser = {
2
+ fullName?: string | null;
3
+ email?: string | null;
4
+ phone?: string | null;
5
+ avatarUrl?: string | null;
6
+ bio?: string | null;
7
+ birthday?: string | null;
8
+ address?: string | null;
9
+ city?: string | null;
10
+ country?: string | null;
11
+ jobTitle?: string | null;
12
+ department?: string | null;
13
+ website?: string | null;
14
+ tenantName?: string | null;
15
+ tenantCode?: string | null;
16
+ role?: string | null;
17
+ };
18
+ export type AdminProfileForm = {
19
+ fullName: string;
20
+ email: string;
21
+ phone: string;
22
+ avatarUrl: string;
23
+ bio: string;
24
+ birthday: string;
25
+ address: string;
26
+ city: string;
27
+ country: string;
28
+ jobTitle: string;
29
+ department: string;
30
+ website: string;
31
+ location: string;
32
+ };
33
+ export type AdminProfilePageProps = {
34
+ user?: AdminProfileUser | null;
35
+ onSaveProfile: (payload: Omit<AdminProfileForm, "email" | "location">) => Promise<void> | void;
36
+ onUploadAvatar: (file: File) => Promise<string>;
37
+ onUserUpdated?: (next: Partial<AdminProfileUser>) => void;
38
+ };
39
+ export declare function AdminProfilePage({ user, onSaveProfile, onUploadAvatar, onUserUpdated, }: AdminProfilePageProps): import("react").JSX.Element;
40
+ //# sourceMappingURL=ProfilePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfilePage.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/ProfilePage.tsx"],"names":[],"mappings":"AAeA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,UAAU,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/F,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;CAC3D,CAAC;AAqBF,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,aAAa,EACb,cAAc,EACd,aAAa,GACd,EAAE,qBAAqB,+BA6UvB"}
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AdminProfilePage = AdminProfilePage;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = require("react");
7
+ const avatar_1 = require("primereact/avatar");
8
+ const button_1 = require("primereact/button");
9
+ const dialog_1 = require("primereact/dialog");
10
+ const inputtext_1 = require("primereact/inputtext");
11
+ const inputtextarea_1 = require("primereact/inputtextarea");
12
+ const tabview_1 = require("primereact/tabview");
13
+ const tag_1 = require("primereact/tag");
14
+ const divider_1 = require("primereact/divider");
15
+ const panel_1 = require("primereact/panel");
16
+ const progressbar_1 = require("primereact/progressbar");
17
+ const toast_1 = require("primereact/toast");
18
+ function profileFromUser(user) {
19
+ const location = [user?.city, user?.country].filter(Boolean).join(", ");
20
+ return {
21
+ fullName: user?.fullName ?? "",
22
+ email: user?.email ?? "",
23
+ phone: user?.phone ?? "",
24
+ avatarUrl: user?.avatarUrl ?? "",
25
+ bio: user?.bio ?? "",
26
+ birthday: user?.birthday ? user.birthday.slice(0, 10) : "",
27
+ address: user?.address ?? "",
28
+ city: user?.city ?? "",
29
+ country: user?.country ?? "",
30
+ jobTitle: user?.jobTitle ?? "",
31
+ department: user?.department ?? "",
32
+ website: user?.website ?? "",
33
+ location,
34
+ };
35
+ }
36
+ function AdminProfilePage({ user, onSaveProfile, onUploadAvatar, onUserUpdated, }) {
37
+ const [form, setForm] = (0, react_1.useState)(() => profileFromUser(user));
38
+ const [loading, setLoading] = (0, react_1.useState)(false);
39
+ const [avatarDialogOpen, setAvatarDialogOpen] = (0, react_1.useState)(false);
40
+ const [avatarFile, setAvatarFile] = (0, react_1.useState)(null);
41
+ const [avatarPreviewUrl, setAvatarPreviewUrl] = (0, react_1.useState)("");
42
+ const [avatarSaving, setAvatarSaving] = (0, react_1.useState)(false);
43
+ const [editMode, setEditMode] = (0, react_1.useState)(false);
44
+ const toast = (0, react_1.useRef)(null);
45
+ (0, react_1.useEffect)(() => {
46
+ if (!editMode)
47
+ setForm(profileFromUser(user));
48
+ }, [editMode, user]);
49
+ (0, react_1.useEffect)(() => {
50
+ return () => {
51
+ if (avatarPreviewUrl.startsWith("blob:"))
52
+ URL.revokeObjectURL(avatarPreviewUrl);
53
+ };
54
+ }, [avatarPreviewUrl]);
55
+ function showToast(severity, detail) {
56
+ toast.current?.show({ severity, summary: severity === "success" ? "Success" : "Error", detail, life: 3000 });
57
+ }
58
+ async function handleSave() {
59
+ setLoading(true);
60
+ try {
61
+ const { email: _email, location: _location, ...profilePayload } = form;
62
+ await onSaveProfile(profilePayload);
63
+ showToast("success", "Profile updated successfully.");
64
+ setEditMode(false);
65
+ }
66
+ catch (err) {
67
+ showToast("error", err instanceof Error ? err.message : "Failed to update profile.");
68
+ }
69
+ finally {
70
+ setLoading(false);
71
+ }
72
+ }
73
+ function handleInputChange(key, value) {
74
+ setForm((prev) => {
75
+ const next = { ...prev, [key]: value };
76
+ if (key === "city" || key === "country") {
77
+ next.location = [next.city, next.country].filter(Boolean).join(", ");
78
+ }
79
+ return next;
80
+ });
81
+ }
82
+ function openAvatarDialog() {
83
+ setAvatarFile(null);
84
+ setAvatarPreviewUrl(form.avatarUrl);
85
+ setAvatarDialogOpen(true);
86
+ }
87
+ function handleAvatarFileChange(file) {
88
+ if (!file)
89
+ return;
90
+ if (!file.type.startsWith("image/")) {
91
+ showToast("error", "Avatar file must be an image.");
92
+ return;
93
+ }
94
+ if (file.size > 5 * 1024 * 1024) {
95
+ showToast("error", "Avatar image must be 5 MB or smaller.");
96
+ return;
97
+ }
98
+ if (avatarPreviewUrl.startsWith("blob:"))
99
+ URL.revokeObjectURL(avatarPreviewUrl);
100
+ setAvatarFile(file);
101
+ setAvatarPreviewUrl(URL.createObjectURL(file));
102
+ }
103
+ async function handleAvatarSave() {
104
+ if (!avatarFile) {
105
+ showToast("error", "Choose an image before saving.");
106
+ return;
107
+ }
108
+ setAvatarSaving(true);
109
+ try {
110
+ const avatarUrl = await onUploadAvatar(avatarFile);
111
+ setForm((prev) => ({ ...prev, avatarUrl }));
112
+ onUserUpdated?.({ avatarUrl });
113
+ setAvatarDialogOpen(false);
114
+ setAvatarFile(null);
115
+ setAvatarPreviewUrl(avatarUrl);
116
+ showToast("success", "Avatar updated successfully.");
117
+ }
118
+ catch (err) {
119
+ showToast("error", err instanceof Error ? err.message : "Failed to update avatar.");
120
+ }
121
+ finally {
122
+ setAvatarSaving(false);
123
+ }
124
+ }
125
+ const initial = (form.fullName || form.email || "M").charAt(0).toUpperCase();
126
+ const profileCompletion = (0, react_1.useMemo)(() => {
127
+ const fields = [
128
+ form.fullName,
129
+ form.email,
130
+ form.phone,
131
+ form.avatarUrl,
132
+ form.bio,
133
+ form.birthday,
134
+ form.address,
135
+ form.city,
136
+ form.country,
137
+ form.jobTitle,
138
+ form.department,
139
+ form.website,
140
+ ];
141
+ return Math.round((fields.filter((field) => field && field.trim() !== "").length / fields.length) * 100);
142
+ }, [form]);
143
+ const stats = (0, react_1.useMemo)(() => [
144
+ { label: "Profile Completion", value: `${profileCompletion}%`, icon: "pi pi-chart-bar", color: "text-blue-500" },
145
+ { label: "Account Type", value: "Admin", icon: "pi pi-verified", color: "text-green-500" },
146
+ { label: "Member Since", value: "2024", icon: "pi pi-calendar", color: "text-purple-500" },
147
+ ], [profileCompletion]);
148
+ const getCompletionSeverity = (value) => {
149
+ if (value < 30)
150
+ return "danger";
151
+ if (value < 70)
152
+ return "warning";
153
+ return "success";
154
+ };
155
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "grid", children: [(0, jsx_runtime_1.jsx)(toast_1.Toast, { ref: toast }), (0, jsx_runtime_1.jsx)("div", { className: "col-12", children: (0, jsx_runtime_1.jsx)("div", { className: "card p-5 bg-gradient-to-r from-blue-50 to-purple-50 border-none", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-column md:flex-row gap-5 align-items-center", children: [(0, jsx_runtime_1.jsxs)("div", { className: "relative", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: "relative border-none border-circle p-0 bg-transparent cursor-pointer", onClick: openAvatarDialog, "aria-label": "Change avatar", children: [(0, jsx_runtime_1.jsx)(avatar_1.Avatar, { image: form.avatarUrl || undefined, label: form.avatarUrl ? undefined : initial, size: "xlarge", shape: "circle", className: "shadow-5 border-4 border-white avatar-glow", style: { width: "130px", height: "130px", fontSize: "3.5rem" } }), (0, jsx_runtime_1.jsx)("span", { className: "absolute bottom-0 right-0 flex align-items-center justify-content-center bg-primary text-white border-circle shadow-3", style: { width: "2.5rem", height: "2.5rem", border: "3px solid #fff" }, children: (0, jsx_runtime_1.jsx)("i", { className: "pi pi-camera" }) })] }), form.jobTitle ? (0, jsx_runtime_1.jsx)(tag_1.Tag, { value: form.jobTitle, severity: "info", className: "absolute bottom-0 left-50 transform -translate-x-1/2 translate-y-1/2" }) : null] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex-1 text-center md:text-left", children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-3xl font-bold m-0 text-900", children: form.fullName || "Your Name" }), (0, jsx_runtime_1.jsxs)("p", { className: "text-600 mt-2 mb-1 flex align-items-center gap-2 justify-content-center md:justify-content-start", children: [(0, jsx_runtime_1.jsx)("i", { className: "pi pi-envelope text-blue-500" }), form.email] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-wrap gap-2 mt-3 justify-content-center md:justify-content-start", children: [form.department ? (0, jsx_runtime_1.jsx)(tag_1.Tag, { value: form.department, severity: "warning", icon: "pi pi-briefcase", className: "text-sm" }) : null, user?.tenantName ? (0, jsx_runtime_1.jsx)(tag_1.Tag, { value: user.tenantName, severity: "success", icon: "pi pi-building", className: "text-sm" }) : null, form.location ? (0, jsx_runtime_1.jsx)(tag_1.Tag, { value: form.location, severity: "info", icon: "pi pi-map-marker", className: "text-sm" }) : null] }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-3 w-full md:w-20rem", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex align-items-center justify-content-between mb-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-600 font-medium", children: "Profile Completion" }), (0, jsx_runtime_1.jsxs)("span", { className: "text-900 font-bold", children: [profileCompletion, "%"] })] }), (0, jsx_runtime_1.jsx)(progressbar_1.ProgressBar, { value: profileCompletion, className: `h-8rem ${getCompletionSeverity(profileCompletion)}` })] }), (0, jsx_runtime_1.jsx)("div", { className: "grid mt-4 w-full", children: stats.map((stat) => ((0, jsx_runtime_1.jsx)("div", { className: "col-12 md:col-4", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex align-items-center gap-3 p-3 bg-white border-1 border-gray-100 border-round shadow-1", style: { transition: "all 0.3s ease" }, children: [(0, jsx_runtime_1.jsx)("i", { className: `${stat.icon} text-2xl ${stat.color}` }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("p", { className: "text-600 text-sm m-0", children: stat.label }), (0, jsx_runtime_1.jsx)("p", { className: "text-900 font-bold text-lg m-0", children: stat.value })] })] }) }, stat.label))) })] }), (0, jsx_runtime_1.jsx)("div", { className: "flex gap-2", children: !editMode ? ((0, jsx_runtime_1.jsx)(button_1.Button, { label: "Edit Profile", icon: "pi pi-pencil", onClick: () => setEditMode(true), className: "p-button-outlined shadow-3", size: "large" })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(button_1.Button, { label: "Cancel", icon: "pi pi-times", onClick: () => setEditMode(false), className: "p-button-secondary shadow-3", size: "large" }), (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Save changes", icon: loading ? undefined : "pi pi-save", loading: loading, onClick: handleSave, className: "p-button-primary shadow-3", size: "large" })] })) })] }) }) }), (0, jsx_runtime_1.jsx)("div", { className: "col-12", children: (0, jsx_runtime_1.jsx)("div", { className: "card surface-0 border-1 border-gray-100 shadow-2", children: (0, jsx_runtime_1.jsxs)(tabview_1.TabView, { className: "profile-tabs", children: [(0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Personal Information", leftIcon: "pi pi-user mr-2", children: (0, jsx_runtime_1.jsxs)("div", { className: "formgrid grid", children: [[
156
+ ["fullName", "Display Name", "pi pi-user text-blue-500", "Enter your full name"],
157
+ ["email", "Email Address", "pi pi-envelope text-blue-500", "Email used for login"],
158
+ ["phone", "Phone Number", "pi pi-phone text-green-500", "Enter your phone number"],
159
+ ["birthday", "Birthday", "pi pi-calendar text-orange-500", ""],
160
+ ["jobTitle", "Job Title", "pi pi-briefcase text-purple-500", "Enter your job title"],
161
+ ["department", "Department", "pi pi-building text-cyan-500", "Enter your department"],
162
+ ["website", "Website", "pi pi-globe text-indigo-500", "https://example.com"],
163
+ ].map(([key, label, icon, placeholder]) => ((0, jsx_runtime_1.jsxs)("div", { className: "field col-12 md:col-6", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: key, className: "block mb-2 font-medium text-900", children: label }), (0, jsx_runtime_1.jsxs)("span", { className: "p-input-icon-left w-full", children: [(0, jsx_runtime_1.jsx)("i", { className: icon }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { id: key, type: key === "birthday" ? "date" : key === "email" ? "email" : "text", value: form[key], onChange: (e) => handleInputChange(key, e.target.value), className: "w-full p-inputtext-lg pl-5", placeholder: placeholder, disabled: !editMode || key === "email", readOnly: key === "email" })] }), key === "email" ? (0, jsx_runtime_1.jsx)("small", { className: "text-600 block mt-2", children: "Email is used for login and cannot be changed here." }) : null] }, key))), (0, jsx_runtime_1.jsxs)("div", { className: "field col-12", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "bio", className: "block mb-2 font-medium text-900", children: "Bio" }), (0, jsx_runtime_1.jsx)(inputtextarea_1.InputTextarea, { id: "bio", value: form.bio, onChange: (e) => handleInputChange("bio", e.target.value), rows: 4, className: "w-full", placeholder: "Tell us about yourself...", disabled: !editMode })] })] }) }), (0, jsx_runtime_1.jsxs)(tabview_1.TabPanel, { header: "Location", leftIcon: "pi pi-map-marker mr-2", children: [(0, jsx_runtime_1.jsx)("div", { className: "grid", children: [
164
+ ["address", "Address", "pi pi-home text-blue-500", "Enter your address"],
165
+ ["city", "City", "pi pi-map-marker text-red-500", "Enter your city"],
166
+ ["country", "Country", "pi pi-flag text-green-500", "Enter your country"],
167
+ ].map(([key, label, icon, placeholder]) => ((0, jsx_runtime_1.jsx)("div", { className: "col-12 md:col-6", children: (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: key, className: "block mb-2 font-medium text-900", children: label }), (0, jsx_runtime_1.jsxs)("span", { className: "p-input-icon-left w-full", children: [(0, jsx_runtime_1.jsx)("i", { className: icon }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { id: key, type: "text", value: form[key], onChange: (e) => handleInputChange(key, e.target.value), className: "w-full p-inputtext-lg pl-5", placeholder: placeholder, disabled: !editMode })] })] }) }, key))) }), form.address ? ((0, jsx_runtime_1.jsxs)("div", { className: "mt-4", children: [(0, jsx_runtime_1.jsx)(divider_1.Divider, { align: "center", children: (0, jsx_runtime_1.jsx)(tag_1.Tag, { value: "Location Preview", severity: "info" }) }), (0, jsx_runtime_1.jsx)(panel_1.Panel, { className: "bg-blue-50 border-blue-200", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex align-items-center gap-3 text-600", children: [(0, jsx_runtime_1.jsx)("i", { className: "pi pi-map-marker text-blue-500 text-xl" }), (0, jsx_runtime_1.jsx)("span", { className: "text-lg", children: [form.address, form.city, form.country].filter(Boolean).join(", ") })] }) })] })) : null] }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Account Settings", leftIcon: "pi pi-cog mr-2", children: (0, jsx_runtime_1.jsxs)("div", { className: "grid", children: [(0, jsx_runtime_1.jsx)("div", { className: "col-12", children: (0, jsx_runtime_1.jsx)(panel_1.Panel, { header: "Account Information", toggleable: true, className: "border-blue-200", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex align-items-start gap-3", children: [(0, jsx_runtime_1.jsx)("i", { className: "pi pi-info-circle text-blue-600 text-2xl mt-1" }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("p", { className: "m-0 text-700 line-height-3", children: [(0, jsx_runtime_1.jsx)("strong", { children: "Email:" }), " ", form.email, (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("strong", { children: "Tenant:" }), " ", user?.tenantName || user?.tenantCode || "N/A", (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("strong", { children: "Role:" }), " ", (0, jsx_runtime_1.jsx)(tag_1.Tag, { value: "Admin", severity: "danger", className: "text-xs" })] }) })] }) }) }), (0, jsx_runtime_1.jsx)("div", { className: "col-12 md:col-6", children: (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "currentPassword", className: "block mb-2 font-medium text-900", children: "Current Password" }), (0, jsx_runtime_1.jsxs)("span", { className: "p-input-icon-left w-full", children: [(0, jsx_runtime_1.jsx)("i", { className: "pi pi-lock text-red-500" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { id: "currentPassword", type: "password", className: "w-full p-inputtext-lg pl-5", placeholder: "Enter current password", disabled: !editMode })] })] }) }), (0, jsx_runtime_1.jsx)("div", { className: "col-12 md:col-6", children: (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "newPassword", className: "block mb-2 font-medium text-900", children: "New Password" }), (0, jsx_runtime_1.jsxs)("span", { className: "p-input-icon-left w-full", children: [(0, jsx_runtime_1.jsx)("i", { className: "pi pi-lock text-green-500" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { id: "newPassword", type: "password", className: "w-full p-inputtext-lg pl-5", placeholder: "Enter new password", disabled: !editMode })] })] }) })] }) })] }) }) }), (0, jsx_runtime_1.jsx)(dialog_1.Dialog, { header: "Change Avatar", visible: avatarDialogOpen, onHide: () => setAvatarDialogOpen(false), style: { width: "min(92vw, 30rem)" }, modal: true, draggable: false, resizable: false, footer: (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-content-end gap-2", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { label: "Cancel", icon: "pi pi-times", className: "p-button-text", onClick: () => setAvatarDialogOpen(false), disabled: avatarSaving }), (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Save avatar", icon: avatarSaving ? undefined : "pi pi-save", loading: avatarSaving, onClick: handleAvatarSave, disabled: !avatarFile || avatarSaving })] }), children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-column align-items-center gap-4", children: [(0, jsx_runtime_1.jsx)(avatar_1.Avatar, { image: avatarPreviewUrl || undefined, label: avatarPreviewUrl ? undefined : initial, size: "xlarge", shape: "circle", className: "shadow-3 border-3 border-white", style: { width: "8rem", height: "8rem", fontSize: "3rem" } }), (0, jsx_runtime_1.jsxs)("div", { className: "w-full", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "profile-avatar-file", className: "block mb-2 font-medium text-900", children: "Avatar image" }), (0, jsx_runtime_1.jsx)("input", { id: "profile-avatar-file", type: "file", accept: "image/*", className: "w-full", onChange: (event) => handleAvatarFileChange(event.target.files?.[0]), disabled: avatarSaving }), (0, jsx_runtime_1.jsx)("small", { className: "text-600 block mt-2", children: "Choose a JPG, PNG, or WebP image up to 5 MB." })] })] }) })] }));
168
+ }
169
+ //# sourceMappingURL=ProfilePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfilePage.js","sourceRoot":"","sources":["../../../src/admin/pages/ProfilePage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type AdminMfaSetup = {
2
+ qrCode: string;
3
+ secret: string;
4
+ };
5
+ export type AdminSecurityPageProps = {
6
+ userEmail?: string;
7
+ mfaEnabled: boolean;
8
+ mustChangePassword?: boolean;
9
+ onSetupMfa: () => Promise<AdminMfaSetup>;
10
+ onVerifyMfa: (code: string) => Promise<void>;
11
+ onDisableMfa: (code: string) => Promise<void>;
12
+ onChangePassword: (currentPassword: string, newPassword: string) => Promise<void>;
13
+ onMfaEnabledChange?: (enabled: boolean) => void;
14
+ onPasswordReset?: () => void;
15
+ };
16
+ export declare function AdminSecurityPage({ userEmail, mfaEnabled, mustChangePassword, onSetupMfa, onVerifyMfa, onDisableMfa, onChangePassword, onMfaEnabledChange, }: AdminSecurityPageProps): import("react").JSX.Element;
17
+ //# sourceMappingURL=SecurityPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityPage.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/SecurityPage.tsx"],"names":[],"mappings":"AAUA,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACzC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,gBAAgB,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAMF,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,GACnB,EAAE,sBAAsB,+BA2JxB"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AdminSecurityPage = AdminSecurityPage;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = require("react");
7
+ const button_1 = require("primereact/button");
8
+ const divider_1 = require("primereact/divider");
9
+ const inputtext_1 = require("primereact/inputtext");
10
+ const message_1 = require("primereact/message");
11
+ const password_1 = require("primereact/password");
12
+ const tag_1 = require("primereact/tag");
13
+ function normalizeMfaCode(value) {
14
+ return value.replace(/\D/g, "").slice(0, 6);
15
+ }
16
+ function AdminSecurityPage({ userEmail, mfaEnabled, mustChangePassword, onSetupMfa, onVerifyMfa, onDisableMfa, onChangePassword, onMfaEnabledChange, }) {
17
+ const [setupData, setSetupData] = (0, react_1.useState)(null);
18
+ const [setupCode, setSetupCode] = (0, react_1.useState)("");
19
+ const [disableCode, setDisableCode] = (0, react_1.useState)("");
20
+ const [passwords, setPasswords] = (0, react_1.useState)({ currentPassword: "", newPassword: "", confirmPassword: "" });
21
+ const [loading, setLoading] = (0, react_1.useState)(false);
22
+ const [message, setMessage] = (0, react_1.useState)(null);
23
+ async function startMfaSetup() {
24
+ setLoading(true);
25
+ setMessage(null);
26
+ try {
27
+ setSetupData(await onSetupMfa());
28
+ setSetupCode("");
29
+ }
30
+ catch (err) {
31
+ setMessage({ severity: "error", text: err instanceof Error ? err.message : "Failed to start MFA setup." });
32
+ }
33
+ finally {
34
+ setLoading(false);
35
+ }
36
+ }
37
+ async function verifyMfa() {
38
+ const code = normalizeMfaCode(setupCode);
39
+ if (code.length !== 6)
40
+ return setMessage({ severity: "error", text: "Enter the 6-digit authenticator code." });
41
+ setLoading(true);
42
+ setMessage(null);
43
+ try {
44
+ await onVerifyMfa(code);
45
+ onMfaEnabledChange?.(true);
46
+ setSetupData(null);
47
+ setSetupCode("");
48
+ setMessage({ severity: "success", text: "MFA is now enabled." });
49
+ }
50
+ catch (err) {
51
+ setMessage({ severity: "error", text: err instanceof Error ? err.message : "Failed to verify MFA code." });
52
+ }
53
+ finally {
54
+ setLoading(false);
55
+ }
56
+ }
57
+ async function disableMfa() {
58
+ const code = normalizeMfaCode(disableCode);
59
+ if (code.length !== 6)
60
+ return setMessage({ severity: "error", text: "Enter the current 6-digit MFA code." });
61
+ setLoading(true);
62
+ setMessage(null);
63
+ try {
64
+ await onDisableMfa(code);
65
+ onMfaEnabledChange?.(false);
66
+ setDisableCode("");
67
+ setMessage({ severity: "success", text: "MFA has been disabled." });
68
+ }
69
+ catch (err) {
70
+ setMessage({ severity: "error", text: err instanceof Error ? err.message : "Failed to disable MFA." });
71
+ }
72
+ finally {
73
+ setLoading(false);
74
+ }
75
+ }
76
+ async function changePassword() {
77
+ if (passwords.newPassword.length < 8)
78
+ return setMessage({ severity: "error", text: "New password must be at least 8 characters." });
79
+ if (passwords.newPassword !== passwords.confirmPassword)
80
+ return setMessage({ severity: "error", text: "Password confirmation does not match." });
81
+ setLoading(true);
82
+ setMessage(null);
83
+ try {
84
+ await onChangePassword(passwords.currentPassword, passwords.newPassword);
85
+ setPasswords({ currentPassword: "", newPassword: "", confirmPassword: "" });
86
+ setMessage({ severity: "success", text: "Password updated successfully." });
87
+ }
88
+ catch (err) {
89
+ setMessage({ severity: "error", text: err instanceof Error ? err.message : "Failed to update password." });
90
+ }
91
+ finally {
92
+ setLoading(false);
93
+ }
94
+ }
95
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "grid", children: [(0, jsx_runtime_1.jsx)("div", { className: "col-12", children: (0, jsx_runtime_1.jsx)("div", { className: "card", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-column md:flex-row gap-3 justify-content-between md:align-items-center", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h3", { className: "m-0", children: "Account Security" }), (0, jsx_runtime_1.jsxs)("p", { className: "text-600 mt-2 mb-0", children: ["Signed in as ", userEmail || "Unknown account"] })] }), (0, jsx_runtime_1.jsx)(tag_1.Tag, { severity: mfaEnabled ? "success" : "warning", value: mfaEnabled ? "MFA enabled" : "MFA disabled", icon: mfaEnabled ? "pi pi-check-circle" : "pi pi-exclamation-triangle" })] }) }) }), message ? ((0, jsx_runtime_1.jsx)("div", { className: "col-12", children: (0, jsx_runtime_1.jsx)(message_1.Message, { severity: message.severity, text: message.text, className: "w-full" }) })) : null, (0, jsx_runtime_1.jsx)("div", { className: "col-12 lg:col-7", children: (0, jsx_runtime_1.jsxs)("div", { className: "card", children: [(0, jsx_runtime_1.jsx)("h5", { children: "Multi-factor Authentication" }), (0, jsx_runtime_1.jsx)("p", { className: "text-600 line-height-3", children: "Use an authenticator app to add a second verification step to this admin account." }), !mfaEnabled ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(button_1.Button, { label: "Start MFA setup", icon: loading ? undefined : "pi pi-mobile", loading: loading, disabled: loading, onClick: startMfaSetup }), setupData ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(divider_1.Divider, {}), (0, jsx_runtime_1.jsxs)("div", { className: "grid", children: [(0, jsx_runtime_1.jsx)("div", { className: "col-12 md:col-5", children: (0, jsx_runtime_1.jsx)("div", { className: "surface-border border-1 border-round p-3 flex justify-content-center", children: (0, jsx_runtime_1.jsx)("img", { src: setupData.qrCode, alt: "MFA QR code", className: "w-full", style: { maxWidth: 220 } }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "col-12 md:col-7", children: [(0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "Manual setup key" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: setupData.secret, readOnly: true, className: "w-full" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "Verification code" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: setupCode, onChange: (e) => setSetupCode(normalizeMfaCode(e.target.value)), maxLength: 6, inputMode: "numeric", className: "w-full" })] }), (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Verify and enable", icon: loading ? undefined : "pi pi-check", loading: loading, disabled: loading || setupCode.length !== 6, onClick: verifyMfa })] })] })] })) : null] })) : ((0, jsx_runtime_1.jsxs)("div", { className: "formgrid grid", children: [(0, jsx_runtime_1.jsxs)("div", { className: "field col-12 md:col-8", children: [(0, jsx_runtime_1.jsx)("label", { children: "Current MFA code" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: disableCode, onChange: (e) => setDisableCode(normalizeMfaCode(e.target.value)), maxLength: 6, inputMode: "numeric", className: "w-full" })] }), (0, jsx_runtime_1.jsx)("div", { className: "field col-12 md:col-4 flex align-items-end", children: (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Disable MFA", severity: "danger", outlined: true, icon: loading ? undefined : "pi pi-lock", loading: loading, disabled: loading || disableCode.length !== 6, onClick: disableMfa, className: "w-full" }) })] }))] }) }), (0, jsx_runtime_1.jsx)("div", { className: "col-12 lg:col-5", children: (0, jsx_runtime_1.jsxs)("div", { className: "card", children: [(0, jsx_runtime_1.jsx)("h5", { children: "Password" }), mustChangePassword ? (0, jsx_runtime_1.jsx)(message_1.Message, { severity: "warn", text: "This account must change its temporary password.", className: "w-full mb-3" }) : null, (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "Current password" }), (0, jsx_runtime_1.jsx)(password_1.Password, { value: passwords.currentPassword, onChange: (e) => setPasswords({ ...passwords, currentPassword: e.target.value }), feedback: false, toggleMask: true, className: "w-full", inputClassName: "w-full" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "New password" }), (0, jsx_runtime_1.jsx)(password_1.Password, { value: passwords.newPassword, onChange: (e) => setPasswords({ ...passwords, newPassword: e.target.value }), toggleMask: true, className: "w-full", inputClassName: "w-full" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "Confirm new password" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { type: "password", value: passwords.confirmPassword, onChange: (e) => setPasswords({ ...passwords, confirmPassword: e.target.value }), className: "w-full" })] }), (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Update password", icon: loading ? undefined : "pi pi-key", loading: loading, disabled: loading, onClick: changePassword })] }) })] }));
96
+ }
97
+ //# sourceMappingURL=SecurityPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityPage.js","sourceRoot":"","sources":["../../../src/admin/pages/SecurityPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ export type AdminSettings = {
2
+ locale: string;
3
+ timeZone: string;
4
+ theme: string;
5
+ colorScheme?: "light" | "dark";
6
+ notifications?: {
7
+ email?: boolean;
8
+ sms?: boolean;
9
+ inApp?: boolean;
10
+ [key: string]: boolean | undefined;
11
+ };
12
+ };
13
+ export type AdminThemeOption = {
14
+ name: string;
15
+ value: string;
16
+ colorScheme: "light" | "dark";
17
+ image: string;
18
+ };
19
+ export type AdminSettingsPageProps = {
20
+ settings: AdminSettings;
21
+ activeTheme?: string;
22
+ localeOptions?: Array<{
23
+ label: string;
24
+ value: string;
25
+ }>;
26
+ timeZoneOptions?: Array<{
27
+ label: string;
28
+ value: string;
29
+ }>;
30
+ themeGroups: Array<{
31
+ label: string;
32
+ themes: AdminThemeOption[];
33
+ }>;
34
+ onThemeChange: (theme: string, colorScheme: "light" | "dark") => void | Promise<void>;
35
+ onSaveSettings: (settings: AdminSettings) => Promise<void> | void;
36
+ onChangePassword: (currentPassword: string, newPassword: string) => Promise<void> | void;
37
+ };
38
+ export declare function AdminSettingsPage({ settings, activeTheme, localeOptions, timeZoneOptions, themeGroups, onThemeChange, onSaveSettings, onChangePassword, }: AdminSettingsPageProps): import("react").JSX.Element;
39
+ //# sourceMappingURL=SettingsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsPage.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/SettingsPage.tsx"],"names":[],"mappings":"AAUA,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE;QACd,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;KACpC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC,CAAC;IAClE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtF,cAAc,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAClE,gBAAgB,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC1F,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,WAAW,EACX,aAAkB,EAClB,eAAoB,EACpB,WAAW,EACX,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,EAAE,sBAAsB,+BAsIxB"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AdminSettingsPage = AdminSettingsPage;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = require("react");
7
+ const button_1 = require("primereact/button");
8
+ const dropdown_1 = require("primereact/dropdown");
9
+ const inputtext_1 = require("primereact/inputtext");
10
+ const message_1 = require("primereact/message");
11
+ const password_1 = require("primereact/password");
12
+ const togglebutton_1 = require("primereact/togglebutton");
13
+ function AdminSettingsPage({ settings, activeTheme, localeOptions = [], timeZoneOptions = [], themeGroups, onThemeChange, onSaveSettings, onChangePassword, }) {
14
+ const [localSettings, setLocalSettings] = (0, react_1.useState)(settings);
15
+ const [passwords, setPasswords] = (0, react_1.useState)({ currentPassword: "", newPassword: "", confirmPassword: "" });
16
+ const [saving, setSaving] = (0, react_1.useState)(false);
17
+ const [message, setMessage] = (0, react_1.useState)(null);
18
+ (0, react_1.useEffect)(() => {
19
+ setLocalSettings(settings);
20
+ }, [settings]);
21
+ const currentTheme = activeTheme ?? localSettings.theme;
22
+ const isActiveTheme = (0, react_1.useMemo)(() => (themeValue) => currentTheme === themeValue, [currentTheme]);
23
+ async function saveSettings() {
24
+ setSaving(true);
25
+ setMessage(null);
26
+ try {
27
+ await onSaveSettings(localSettings);
28
+ setMessage({ severity: "success", text: "Settings updated successfully." });
29
+ }
30
+ catch (err) {
31
+ setMessage({ severity: "error", text: err instanceof Error ? err.message : "Failed to update settings." });
32
+ }
33
+ finally {
34
+ setSaving(false);
35
+ }
36
+ }
37
+ async function changePassword() {
38
+ if (passwords.newPassword.length < 8)
39
+ return setMessage({ severity: "error", text: "New password must be at least 8 characters." });
40
+ if (passwords.newPassword !== passwords.confirmPassword)
41
+ return setMessage({ severity: "error", text: "Password confirmation does not match." });
42
+ setSaving(true);
43
+ setMessage(null);
44
+ try {
45
+ await onChangePassword(passwords.currentPassword, passwords.newPassword);
46
+ setPasswords({ currentPassword: "", newPassword: "", confirmPassword: "" });
47
+ setMessage({ severity: "success", text: "Password updated successfully." });
48
+ }
49
+ catch (err) {
50
+ setMessage({ severity: "error", text: err instanceof Error ? err.message : "Failed to update password." });
51
+ }
52
+ finally {
53
+ setSaving(false);
54
+ }
55
+ }
56
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "grid", children: [message ? ((0, jsx_runtime_1.jsx)("div", { className: "col-12", children: (0, jsx_runtime_1.jsx)(message_1.Message, { severity: message.severity, text: message.text, className: "w-full" }) })) : null, (0, jsx_runtime_1.jsxs)("div", { className: "col-12 lg:col-8", children: [(0, jsx_runtime_1.jsxs)("div", { className: "card", children: [(0, jsx_runtime_1.jsx)("h5", { children: "Workspace Preferences" }), (0, jsx_runtime_1.jsxs)("div", { className: "formgrid grid", children: [(0, jsx_runtime_1.jsxs)("div", { className: "field col-12 md:col-6", children: [(0, jsx_runtime_1.jsx)("label", { children: "Language" }), (0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, { value: localSettings.locale, options: localeOptions, onChange: (e) => setLocalSettings({ ...localSettings, locale: e.value }), className: "w-full" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "field col-12 md:col-6", children: [(0, jsx_runtime_1.jsx)("label", { children: "Time zone" }), (0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, { value: localSettings.timeZone, options: timeZoneOptions, onChange: (e) => setLocalSettings({ ...localSettings, timeZone: e.value }), className: "w-full" })] })] }), (0, jsx_runtime_1.jsx)("h5", { className: "mt-4", children: "Theme" }), (0, jsx_runtime_1.jsx)("p", { className: "text-600 mb-3", children: "Choose a theme for your workspace. This will be saved to your account." }), themeGroups.map((group) => ((0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("h6", { className: "text-sm font-semibold mb-2 text-600", children: group.label }), (0, jsx_runtime_1.jsx)("div", { className: "grid", style: { margin: "-0.35rem" }, children: group.themes.map((theme) => ((0, jsx_runtime_1.jsx)("div", { className: "col-6 sm:col-4 md:col-3 xl:col-2 p-1", children: (0, jsx_runtime_1.jsxs)("button", { className: `p-link w-full border-round-lg overflow-hidden transition-all transition-duration-200 ${isActiveTheme(theme.value) ? "ring-2 ring-primary-500 ring-offset-2" : "hover:shadow-2"}`, onClick: () => {
57
+ setLocalSettings((prev) => ({ ...prev, theme: theme.value, colorScheme: theme.colorScheme }));
58
+ void onThemeChange(theme.value, theme.colorScheme);
59
+ }, style: { padding: 0, border: "none", background: "transparent", cursor: "pointer" }, title: theme.name, type: "button", children: [(0, jsx_runtime_1.jsx)("div", { style: { width: "100%", aspectRatio: "16/9", overflow: "hidden", borderRadius: "8px", background: "#f8fafc" }, children: (0, jsx_runtime_1.jsx)("img", { src: theme.image, alt: theme.name, className: "w-full h-full", style: { objectFit: "cover", borderRadius: "8px" } }) }), (0, jsx_runtime_1.jsx)("small", { className: "block mt-1 text-center text-700 text-xs", children: theme.name })] }) }, theme.value))) })] }, group.label))), (0, jsx_runtime_1.jsx)("div", { className: "border-top-1 surface-border pt-3 mt-3", children: (0, jsx_runtime_1.jsxs)("small", { className: "text-500", children: ["Current theme: ", (0, jsx_runtime_1.jsx)("strong", { children: currentTheme })] }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "card mt-4", children: [(0, jsx_runtime_1.jsx)("h5", { children: "Notifications" }), (0, jsx_runtime_1.jsx)("div", { className: "flex flex-column sm:flex-row gap-3 mb-4", children: ["email", "sms", "inApp"].map((key) => ((0, jsx_runtime_1.jsx)(togglebutton_1.ToggleButton, { checked: Boolean(localSettings.notifications?.[key]), onChange: (e) => setLocalSettings({ ...localSettings, notifications: { ...localSettings.notifications, [key]: e.value } }), onLabel: key, offLabel: key }, key))) }), (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Save preferences", icon: saving ? undefined : "pi pi-save", loading: saving, disabled: saving, onClick: saveSettings })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "col-12 lg:col-4", children: (0, jsx_runtime_1.jsxs)("div", { className: "card", children: [(0, jsx_runtime_1.jsx)("h5", { children: "Change Password" }), (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "Current password" }), (0, jsx_runtime_1.jsx)(password_1.Password, { value: passwords.currentPassword, onChange: (e) => setPasswords({ ...passwords, currentPassword: e.target.value }), feedback: false, toggleMask: true, className: "w-full", inputClassName: "w-full" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "New password" }), (0, jsx_runtime_1.jsx)(password_1.Password, { value: passwords.newPassword, onChange: (e) => setPasswords({ ...passwords, newPassword: e.target.value }), toggleMask: true, className: "w-full", inputClassName: "w-full" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "Confirm new password" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { type: "password", value: passwords.confirmPassword, onChange: (e) => setPasswords({ ...passwords, confirmPassword: e.target.value }), className: "w-full" })] }), (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Update password", icon: saving ? undefined : "pi pi-key", loading: saving, disabled: saving, onClick: changePassword })] }) })] }));
60
+ }
61
+ //# sourceMappingURL=SettingsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsPage.js","sourceRoot":"","sources":["../../../src/admin/pages/SettingsPage.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AAyCb,8CA+IC;;AAtLD,iCAAqD;AACrD,8CAA2C;AAC3C,kDAA+C;AAC/C,oDAAiD;AACjD,gDAA6C;AAC7C,kDAA+C;AAC/C,0DAAuD;AAiCvD,SAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,WAAW,EACX,aAAa,GAAG,EAAE,EAClB,eAAe,GAAG,EAAE,EACpB,WAAW,EACX,aAAa,EACb,cAAc,EACd,gBAAgB,GACO;IACvB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAgB,QAAQ,CAAC,CAAC;IAC5E,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,eAAe,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1G,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAyD,IAAI,CAAC,CAAC;IAErG,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,YAAY,GAAG,WAAW,IAAI,aAAa,CAAC,KAAK,CAAC;IAExD,MAAM,aAAa,GAAG,IAAA,eAAO,EAC3B,GAAG,EAAE,CAAC,CAAC,UAAkB,EAAE,EAAE,CAAC,YAAY,KAAK,UAAU,EACzD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,KAAK,UAAU,YAAY;QACzB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;YACpC,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,EAAE,CAAC,CAAC;QAC7G,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,UAAU,cAAc;QAC3B,IAAI,SAAS,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,6CAA6C,EAAE,CAAC,CAAC;QACpI,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,eAAe;YAAE,OAAO,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,uCAAuC,EAAE,CAAC,CAAC;QACjJ,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;YACzE,YAAY,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5E,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,EAAE,CAAC,CAAC;QAC7G,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,CACL,iCAAK,SAAS,EAAC,MAAM,aAClB,OAAO,CAAC,CAAC,CAAC,CACT,gCAAK,SAAS,EAAC,QAAQ,YACrB,uBAAC,iBAAO,IAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAC,QAAQ,GAAG,GAC1E,CACP,CAAC,CAAC,CAAC,IAAI,EACR,iCAAK,SAAS,EAAC,iBAAiB,aAC9B,iCAAK,SAAS,EAAC,MAAM,aACnB,mEAA8B,EAC9B,iCAAK,SAAS,EAAC,eAAe,aAC5B,iCAAK,SAAS,EAAC,uBAAuB,aACpC,yDAAuB,EACvB,uBAAC,mBAAQ,IAAC,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,EAAC,QAAQ,GAAG,IAC1J,EACN,iCAAK,SAAS,EAAC,uBAAuB,aACpC,0DAAwB,EACxB,uBAAC,mBAAQ,IAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,EAAC,QAAQ,GAAG,IAChK,IACF,EAEN,+BAAI,SAAS,EAAC,MAAM,sBAAW,EAC/B,8BAAG,SAAS,EAAC,eAAe,uFAA2E,EAEtG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC1B,iCAAuB,SAAS,EAAC,MAAM,aACrC,+BAAI,SAAS,EAAC,qCAAqC,YAAE,KAAK,CAAC,KAAK,GAAM,EACtE,gCAAK,SAAS,EAAC,MAAM,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,YAChD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3B,gCAAuB,SAAS,EAAC,sCAAsC,YACrE,oCACE,SAAS,EAAE,wFAAwF,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,gBAAgB,EAAE,EAC5L,OAAO,EAAE,GAAG,EAAE;oDACZ,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oDAC9F,KAAK,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;gDACrD,CAAC,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,EACnF,KAAK,EAAE,KAAK,CAAC,IAAI,EACjB,IAAI,EAAC,QAAQ,aAEb,gCAAK,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,YAChH,gCAAK,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAC,eAAe,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,GAAI,GACpH,EACN,kCAAO,SAAS,EAAC,yCAAyC,YAAE,KAAK,CAAC,IAAI,GAAS,IACxE,IAfD,KAAK,CAAC,KAAK,CAgBf,CACP,CAAC,GACE,KAtBE,KAAK,CAAC,KAAK,CAuBf,CACP,CAAC,EAEF,gCAAK,SAAS,EAAC,uCAAuC,YACpD,mCAAO,SAAS,EAAC,UAAU,gCACV,6CAAS,YAAY,GAAU,IACxC,GACJ,IACF,EAEN,iCAAK,SAAS,EAAC,WAAW,aACxB,2DAAsB,EACtB,gCAAK,SAAS,EAAC,yCAAyC,YACpD,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjD,uBAAC,2BAAY,IAAW,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,aAAa,EAAE,aAAa,EAAE,EAAE,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAlN,GAAG,CAAmN,CAC1O,CAAC,GACE,EACN,uBAAC,eAAM,IAAC,KAAK,EAAC,kBAAkB,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAI,IAClI,IACF,EACN,gCAAK,SAAS,EAAC,iBAAiB,YAC9B,iCAAK,SAAS,EAAC,MAAM,aACnB,6DAAwB,EACxB,iCAAK,SAAS,EAAC,OAAO,aACpB,iEAA+B,EAC/B,uBAAC,mBAAQ,IAAC,KAAK,EAAE,SAAS,CAAC,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,QAAC,SAAS,EAAC,QAAQ,EAAC,cAAc,EAAC,QAAQ,GAAG,IACnM,EACN,iCAAK,SAAS,EAAC,OAAO,aACpB,6DAA2B,EAC3B,uBAAC,mBAAQ,IAAC,KAAK,EAAE,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,QAAC,SAAS,EAAC,QAAQ,EAAC,cAAc,EAAC,QAAQ,GAAG,IAC1K,EACN,iCAAK,SAAS,EAAC,OAAO,aACpB,qEAAmC,EACnC,uBAAC,qBAAS,IAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAE,SAAS,CAAC,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,EAAC,QAAQ,GAAG,IAChK,EACN,uBAAC,eAAM,IAAC,KAAK,EAAC,iBAAiB,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAI,IAClI,GACF,IACF,CACP,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@w-iris/react",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "exports": {