@burdenoff/microfe-crewfoundry 2026.624.1 → 2026.625.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/crewfoundry/pages/AdminAdminPagePage.js +86 -70
- package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +104 -88
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +91 -75
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +119 -103
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +107 -91
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +10 -10
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +60 -48
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +10 -10
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +20 -20
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +22 -22
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +7 -7
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +67 -55
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +54 -42
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +68 -52
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +30 -30
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +9 -9
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +90 -74
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +166 -132
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +43 -43
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +107 -91
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +35 -35
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +78 -62
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +17 -17
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +39 -39
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +53 -41
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +41 -37
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +25 -20
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +54 -42
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +76 -60
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +83 -67
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +86 -70
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +79 -63
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +51 -39
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +14 -14
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +29 -25
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +17 -17
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +11 -11
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +76 -60
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js +67 -51
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +17 -17
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +7 -7
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +69 -53
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +54 -42
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +66 -54
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +37 -37
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +33 -32
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +54 -42
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +11 -11
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +18 -18
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +7 -7
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +29 -25
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +22 -18
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +55 -43
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +7 -7
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +62 -46
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +14 -14
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +71 -59
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +20 -20
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +33 -29
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +16 -16
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +53 -41
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +25 -21
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +9 -9
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +48 -48
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +13 -13
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/package.json +2 -2
|
@@ -2,65 +2,65 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
|
2
2
|
import { useMemo as t } from "react";
|
|
3
3
|
import { AlertTriangle as n, CheckCircle as r, Shield as i, ShieldCheck as a } from "lucide-react";
|
|
4
4
|
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
5
|
-
import { Badge as c, Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { Badge as c, Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p, GlassCard as m, GradientText as h } from "@burdenoff/fe-libs/ui";
|
|
6
6
|
//#region src/crewfoundry/pages/PaymentsSecurityPagePage.tsx
|
|
7
|
-
var
|
|
7
|
+
var g = (e) => {
|
|
8
8
|
let t = new Date(e);
|
|
9
9
|
return Number.isNaN(t.getTime()) ? "Unknown" : t.toISOString().split("T")[0];
|
|
10
|
-
},
|
|
10
|
+
}, _ = (e) => {
|
|
11
11
|
let t = new Date(e);
|
|
12
12
|
if (Number.isNaN(t.getTime())) return "recently";
|
|
13
13
|
let n = Math.max(1, Math.floor((Date.now() - t.getTime()) / (1e3 * 60 * 60)));
|
|
14
14
|
return n < 24 ? `${n}h ago` : `${Math.floor(n / 24)}d ago`;
|
|
15
15
|
};
|
|
16
|
-
function
|
|
17
|
-
let { notifications:
|
|
18
|
-
let e =
|
|
16
|
+
function v() {
|
|
17
|
+
let { notifications: v, invoices: y, payrollRecords: b } = e(), x = t(() => {
|
|
18
|
+
let e = y.filter((e) => e.status === "overdue").length, t = b.filter((e) => e.status === "failed").length, n = e > 0 || t > 0;
|
|
19
19
|
return [
|
|
20
20
|
{
|
|
21
21
|
name: "PCI DSS Compliance",
|
|
22
22
|
status: "passed",
|
|
23
|
-
lastChecked:
|
|
23
|
+
lastChecked: g((/* @__PURE__ */ new Date()).toISOString())
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
26
|
name: "SSL/TLS Encryption",
|
|
27
27
|
status: "passed",
|
|
28
|
-
lastChecked:
|
|
28
|
+
lastChecked: g((/* @__PURE__ */ new Date()).toISOString())
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
name: "Two-Factor Authentication",
|
|
32
32
|
status: "passed",
|
|
33
|
-
lastChecked:
|
|
33
|
+
lastChecked: g((/* @__PURE__ */ new Date()).toISOString())
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
name: "Data Encryption at Rest",
|
|
37
37
|
status: "passed",
|
|
38
|
-
lastChecked:
|
|
38
|
+
lastChecked: g((/* @__PURE__ */ new Date()).toISOString())
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
name: "Payment Processing Audit",
|
|
42
42
|
status: n ? "warning" : "passed",
|
|
43
|
-
lastChecked:
|
|
43
|
+
lastChecked: g((/* @__PURE__ */ new Date()).toISOString())
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
name: "Access Control Review",
|
|
47
|
-
status:
|
|
48
|
-
lastChecked:
|
|
47
|
+
status: v.some((e) => e.type === "error") ? "warning" : "passed",
|
|
48
|
+
lastChecked: g((/* @__PURE__ */ new Date()).toISOString())
|
|
49
49
|
}
|
|
50
50
|
];
|
|
51
51
|
}, [
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
]),
|
|
52
|
+
y,
|
|
53
|
+
v,
|
|
54
|
+
b
|
|
55
|
+
]), S = t(() => v.slice(0, 6).map((e) => {
|
|
56
56
|
let t = e.type === "error" ? "medium" : e.type === "warning" ? "low" : "info";
|
|
57
57
|
return {
|
|
58
58
|
id: e.id,
|
|
59
59
|
message: e.message,
|
|
60
60
|
severity: t,
|
|
61
|
-
time:
|
|
61
|
+
time: _(e.createdAt)
|
|
62
62
|
};
|
|
63
|
-
}), [
|
|
63
|
+
}), [v]), C = x.filter((e) => e.status === "passed").length, w = Math.round(C / Math.max(x.length, 1) * 100);
|
|
64
64
|
return /* @__PURE__ */ s("div", {
|
|
65
65
|
className: "space-y-6 p-6",
|
|
66
66
|
children: [
|
|
@@ -68,7 +68,7 @@ function g() {
|
|
|
68
68
|
className: "flex items-center justify-between",
|
|
69
69
|
children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
|
|
70
70
|
className: "text-2xl font-semibold",
|
|
71
|
-
children: "Payment Security"
|
|
71
|
+
children: /* @__PURE__ */ o(h, { children: "Payment Security" })
|
|
72
72
|
}), /* @__PURE__ */ o("p", {
|
|
73
73
|
className: "text-sm text-text-secondary",
|
|
74
74
|
children: "Security controls and compliance status"
|
|
@@ -81,49 +81,61 @@ function g() {
|
|
|
81
81
|
/* @__PURE__ */ s("div", {
|
|
82
82
|
className: "grid gap-4 md:grid-cols-3",
|
|
83
83
|
children: [
|
|
84
|
-
/* @__PURE__ */ s(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
84
|
+
/* @__PURE__ */ s(m, {
|
|
85
|
+
treatment: "metric",
|
|
86
|
+
className: "border-border-seam",
|
|
87
|
+
children: [/* @__PURE__ */ s(f, {
|
|
88
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
89
|
+
children: [/* @__PURE__ */ o(p, {
|
|
90
|
+
className: "text-sm font-medium",
|
|
91
|
+
children: "Security Score"
|
|
92
|
+
}), /* @__PURE__ */ o(a, { className: "h-4 w-4 text-status-success-text" })]
|
|
93
|
+
}), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ s("div", {
|
|
94
|
+
className: "text-2xl font-bold tabular-nums",
|
|
95
|
+
children: [w, "/100"]
|
|
96
|
+
}) })]
|
|
97
|
+
}),
|
|
98
|
+
/* @__PURE__ */ s(m, {
|
|
99
|
+
treatment: "metric",
|
|
100
|
+
className: "border-border-seam",
|
|
101
|
+
children: [/* @__PURE__ */ s(f, {
|
|
102
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
103
|
+
children: [/* @__PURE__ */ o(p, {
|
|
104
|
+
className: "text-sm font-medium",
|
|
105
|
+
children: "Checks Passing"
|
|
106
|
+
}), /* @__PURE__ */ o(r, { className: "h-4 w-4 text-status-success-text" })]
|
|
107
|
+
}), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ s("div", {
|
|
108
|
+
className: "text-2xl font-bold tabular-nums",
|
|
109
|
+
children: [
|
|
110
|
+
C,
|
|
111
|
+
"/",
|
|
112
|
+
x.length
|
|
113
|
+
]
|
|
114
|
+
}) })]
|
|
115
|
+
}),
|
|
116
|
+
/* @__PURE__ */ s(m, {
|
|
117
|
+
treatment: "metric",
|
|
118
|
+
className: "border-border-seam",
|
|
119
|
+
children: [/* @__PURE__ */ s(f, {
|
|
120
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
121
|
+
children: [/* @__PURE__ */ o(p, {
|
|
122
|
+
className: "text-sm font-medium",
|
|
123
|
+
children: "Active Alerts"
|
|
124
|
+
}), /* @__PURE__ */ o(n, { className: "h-4 w-4 text-status-warning-text" })]
|
|
125
|
+
}), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ o("div", {
|
|
126
|
+
className: "text-2xl font-bold tabular-nums",
|
|
127
|
+
children: S.length
|
|
128
|
+
}) })]
|
|
129
|
+
})
|
|
118
130
|
]
|
|
119
131
|
}),
|
|
120
132
|
/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, { children: /* @__PURE__ */ o(p, { children: "Security Checks" }) }), /* @__PURE__ */ o(d, {
|
|
121
133
|
className: "space-y-3",
|
|
122
|
-
children:
|
|
134
|
+
children: x.map((e) => /* @__PURE__ */ s("div", {
|
|
123
135
|
className: "flex items-center justify-between rounded border p-3",
|
|
124
136
|
children: [/* @__PURE__ */ s("div", {
|
|
125
137
|
className: "flex items-center gap-2",
|
|
126
|
-
children: [e.status === "passed" ? /* @__PURE__ */ o(r, { className: "h-4 w-4 text-
|
|
138
|
+
children: [e.status === "passed" ? /* @__PURE__ */ o(r, { className: "h-4 w-4 text-status-success-text" }) : /* @__PURE__ */ o(n, { className: "h-4 w-4 text-status-warning-text" }), /* @__PURE__ */ o("span", {
|
|
127
139
|
className: "text-sm font-medium",
|
|
128
140
|
children: e.name
|
|
129
141
|
})]
|
|
@@ -142,11 +154,11 @@ function g() {
|
|
|
142
154
|
})] }),
|
|
143
155
|
/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, { children: /* @__PURE__ */ o(p, { children: "Security Alerts" }) }), /* @__PURE__ */ o(d, {
|
|
144
156
|
className: "space-y-3",
|
|
145
|
-
children:
|
|
157
|
+
children: S.map((e) => /* @__PURE__ */ s("div", {
|
|
146
158
|
className: "flex items-center justify-between rounded border p-3",
|
|
147
159
|
children: [/* @__PURE__ */ s("div", {
|
|
148
160
|
className: "flex items-center gap-2",
|
|
149
|
-
children: [/* @__PURE__ */ o(n, { className: `h-4 w-4 ${e.severity === "medium" ? "text-
|
|
161
|
+
children: [/* @__PURE__ */ o(n, { className: `h-4 w-4 ${e.severity === "medium" ? "text-status-warning-text" : e.severity === "low" ? "text-status-info-text" : "text-text-secondary"}` }), /* @__PURE__ */ o("span", {
|
|
150
162
|
className: "text-sm",
|
|
151
163
|
children: e.message
|
|
152
164
|
})]
|
|
@@ -167,6 +179,6 @@ function g() {
|
|
|
167
179
|
});
|
|
168
180
|
}
|
|
169
181
|
//#endregion
|
|
170
|
-
export {
|
|
182
|
+
export { v as PaymentsSecurityPagePage };
|
|
171
183
|
|
|
172
184
|
//# sourceMappingURL=PaymentsSecurityPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentsSecurityPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsSecurityPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { AlertTriangle, CheckCircle, Shield, ShieldCheck } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype SecurityCheck = {\n name: string;\n status: 'passed' | 'warning';\n lastChecked: string;\n};\n\ntype SecurityAlert = {\n id: string;\n message: string;\n severity: 'medium' | 'low' | 'info';\n time: string;\n};\n\nconst formatDate = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'Unknown';\n }\n return parsed.toISOString().split('T')[0];\n};\n\nconst timeAgo = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'recently';\n }\n const hours = Math.max(1, Math.floor((Date.now() - parsed.getTime()) / (1000 * 60 * 60)));\n return hours < 24 ? `${hours}h ago` : `${Math.floor(hours / 24)}d ago`;\n};\n\nexport function PaymentsSecurityPagePage() {\n const { notifications, invoices, payrollRecords } = useCrewFoundryStore();\n\n const securityChecks = useMemo<SecurityCheck[]>(() => {\n const failedInvoices = invoices.filter((invoice) => invoice.status === 'overdue').length;\n const payrollFailures = payrollRecords.filter((record) => record.status === 'failed').length;\n const warning = failedInvoices > 0 || payrollFailures > 0;\n\n return [\n {\n name: 'PCI DSS Compliance',\n status: 'passed',\n lastChecked: formatDate(new Date().toISOString()),\n },\n {\n name: 'SSL/TLS Encryption',\n status: 'passed',\n lastChecked: formatDate(new Date().toISOString()),\n },\n {\n name: 'Two-Factor Authentication',\n status: 'passed',\n lastChecked: formatDate(new Date().toISOString()),\n },\n {\n name: 'Data Encryption at Rest',\n status: 'passed',\n lastChecked: formatDate(new Date().toISOString()),\n },\n {\n name: 'Payment Processing Audit',\n status: warning ? 'warning' : 'passed',\n lastChecked: formatDate(new Date().toISOString()),\n },\n {\n name: 'Access Control Review',\n status: notifications.some((notification) => notification.type === 'error')\n ? 'warning'\n : 'passed',\n lastChecked: formatDate(new Date().toISOString()),\n },\n ];\n }, [invoices, notifications, payrollRecords]);\n\n const recentAlerts = useMemo<SecurityAlert[]>(() => {\n return notifications.slice(0, 6).map((notification) => {\n const severity: SecurityAlert['severity'] =\n notification.type === 'error' ? 'medium' : notification.type === 'warning' ? 'low' : 'info';\n\n return {\n id: notification.id,\n message: notification.message,\n severity,\n time: timeAgo(notification.createdAt),\n };\n });\n }, [notifications]);\n\n const passedChecks = securityChecks.filter((check) => check.status === 'passed').length;\n const securityScore = Math.round((passedChecks / Math.max(securityChecks.length, 1)) * 100);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Payment Security</h1>\n <p className=\"text-sm text-text-secondary\">Security controls and compliance status</p>\n </div>\n <Button variant=\"outline\" size=\"sm\">\n <Shield className=\"mr-1 h-4 w-4\" />\n Run Audit\n </Button>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Security Score</CardTitle>\n <ShieldCheck className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{securityScore}/100</div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Checks Passing</CardTitle>\n <CheckCircle className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {passedChecks}/{securityChecks.length}\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Active Alerts</CardTitle>\n <AlertTriangle className=\"h-4 w-4 text-yellow-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{recentAlerts.length}</div>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Security Checks</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {securityChecks.map((check) => (\n <div key={check.name} className=\"flex items-center justify-between rounded border p-3\">\n <div className=\"flex items-center gap-2\">\n {check.status === 'passed' ? (\n <CheckCircle className=\"h-4 w-4 text-green-500\" />\n ) : (\n <AlertTriangle className=\"h-4 w-4 text-yellow-500\" />\n )}\n <span className=\"text-sm font-medium\">{check.name}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-text-secondary\">Last: {check.lastChecked}</span>\n <Badge\n variant={check.status === 'passed' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {check.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Security Alerts</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {recentAlerts.map((alert) => (\n <div key={alert.id} className=\"flex items-center justify-between rounded border p-3\">\n <div className=\"flex items-center gap-2\">\n <AlertTriangle\n className={`h-4 w-4 ${\n alert.severity === 'medium'\n ? 'text-yellow-500'\n : alert.severity === 'low'\n ? 'text-blue-500'\n : 'text-text-secondary'\n }`}\n />\n <span className=\"text-sm\">{alert.message}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-text-secondary\">{alert.time}</span>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {alert.severity}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PaymentsSecurityPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsSecurityPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { AlertTriangle, CheckCircle, Shield, ShieldCheck } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype SecurityCheck = {\n name: string;\n status: 'passed' | 'warning';\n lastChecked: string;\n};\n\ntype SecurityAlert = {\n id: string;\n message: string;\n severity: 'medium' | 'low' | 'info';\n time: string;\n};\n\nconst formatDate = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'Unknown';\n }\n return parsed.toISOString().split('T')[0];\n};\n\nconst timeAgo = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'recently';\n }\n const hours = Math.max(1, Math.floor((Date.now() - parsed.getTime()) / (1000 * 60 * 60)));\n return hours < 24 ? `${hours}h ago` : `${Math.floor(hours / 24)}d ago`;\n};\n\nexport function PaymentsSecurityPagePage() {\n const { notifications, invoices, payrollRecords } = useCrewFoundryStore();\n\n const securityChecks = useMemo<SecurityCheck[]>(() => {\n const failedInvoices = invoices.filter((invoice) => invoice.status === 'overdue').length;\n const payrollFailures = payrollRecords.filter((record) => record.status === 'failed').length;\n const warning = failedInvoices > 0 || payrollFailures > 0;\n\n return [\n {\n name: 'PCI DSS Compliance',\n status: 'passed',\n lastChecked: formatDate(new Date().toISOString()),\n },\n {\n name: 'SSL/TLS Encryption',\n status: 'passed',\n lastChecked: formatDate(new Date().toISOString()),\n },\n {\n name: 'Two-Factor Authentication',\n status: 'passed',\n lastChecked: formatDate(new Date().toISOString()),\n },\n {\n name: 'Data Encryption at Rest',\n status: 'passed',\n lastChecked: formatDate(new Date().toISOString()),\n },\n {\n name: 'Payment Processing Audit',\n status: warning ? 'warning' : 'passed',\n lastChecked: formatDate(new Date().toISOString()),\n },\n {\n name: 'Access Control Review',\n status: notifications.some((notification) => notification.type === 'error')\n ? 'warning'\n : 'passed',\n lastChecked: formatDate(new Date().toISOString()),\n },\n ];\n }, [invoices, notifications, payrollRecords]);\n\n const recentAlerts = useMemo<SecurityAlert[]>(() => {\n return notifications.slice(0, 6).map((notification) => {\n const severity: SecurityAlert['severity'] =\n notification.type === 'error' ? 'medium' : notification.type === 'warning' ? 'low' : 'info';\n\n return {\n id: notification.id,\n message: notification.message,\n severity,\n time: timeAgo(notification.createdAt),\n };\n });\n }, [notifications]);\n\n const passedChecks = securityChecks.filter((check) => check.status === 'passed').length;\n const securityScore = Math.round((passedChecks / Math.max(securityChecks.length, 1)) * 100);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Payment Security</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Security controls and compliance status</p>\n </div>\n <Button variant=\"outline\" size=\"sm\">\n <Shield className=\"mr-1 h-4 w-4\" />\n Run Audit\n </Button>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Security Score</CardTitle>\n <ShieldCheck className=\"h-4 w-4 text-status-success-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{securityScore}/100</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Checks Passing</CardTitle>\n <CheckCircle className=\"h-4 w-4 text-status-success-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {passedChecks}/{securityChecks.length}\n </div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Active Alerts</CardTitle>\n <AlertTriangle className=\"h-4 w-4 text-status-warning-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{recentAlerts.length}</div>\n </CardContent>\n </GlassCard>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Security Checks</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {securityChecks.map((check) => (\n <div key={check.name} className=\"flex items-center justify-between rounded border p-3\">\n <div className=\"flex items-center gap-2\">\n {check.status === 'passed' ? (\n <CheckCircle className=\"h-4 w-4 text-status-success-text\" />\n ) : (\n <AlertTriangle className=\"h-4 w-4 text-status-warning-text\" />\n )}\n <span className=\"text-sm font-medium\">{check.name}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-text-secondary\">Last: {check.lastChecked}</span>\n <Badge\n variant={check.status === 'passed' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {check.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Security Alerts</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {recentAlerts.map((alert) => (\n <div key={alert.id} className=\"flex items-center justify-between rounded border p-3\">\n <div className=\"flex items-center gap-2\">\n <AlertTriangle\n className={`h-4 w-4 ${\n alert.severity === 'medium'\n ? 'text-status-warning-text'\n : alert.severity === 'low'\n ? 'text-status-info-text'\n : 'text-text-secondary'\n }`}\n />\n <span className=\"text-sm\">{alert.message}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-text-secondary\">{alert.time}</span>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {alert.severity}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { useState as e } from "react";
|
|
2
2
|
import { FolderKanban as t, Save as n } from "lucide-react";
|
|
3
3
|
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
4
|
-
import { Button as a, Card as o, CardContent as s, CardHeader as c, CardTitle as l,
|
|
4
|
+
import { Button as a, Card as o, CardContent as s, CardHeader as c, CardTitle as l, GradientText as u, Input as d, Textarea as f } from "@burdenoff/fe-libs/ui";
|
|
5
5
|
//#region src/crewfoundry/pages/ProjectsCreateProjectPagePage.tsx
|
|
6
|
-
function
|
|
7
|
-
let [
|
|
6
|
+
function p() {
|
|
7
|
+
let [p, m] = e(""), [h, g] = e(""), [_, v] = e(""), [y, b] = e(""), [x, S] = e("");
|
|
8
8
|
return /* @__PURE__ */ i("div", {
|
|
9
9
|
className: "space-y-6 p-6 max-w-3xl",
|
|
10
10
|
children: [
|
|
11
11
|
/* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("h1", {
|
|
12
12
|
className: "text-2xl font-semibold",
|
|
13
|
-
children: "Create Project"
|
|
13
|
+
children: /* @__PURE__ */ r(u, { children: "Create Project" })
|
|
14
14
|
}), /* @__PURE__ */ r("p", {
|
|
15
15
|
className: "text-sm text-text-secondary",
|
|
16
16
|
children: "Set up a new project for your team"
|
|
@@ -26,10 +26,10 @@ function f() {
|
|
|
26
26
|
children: [/* @__PURE__ */ r("label", {
|
|
27
27
|
className: "text-sm font-medium",
|
|
28
28
|
children: "Project Name"
|
|
29
|
-
}), /* @__PURE__ */ r(
|
|
29
|
+
}), /* @__PURE__ */ r(d, {
|
|
30
30
|
placeholder: "e.g. HR Analytics Dashboard v3",
|
|
31
|
-
value:
|
|
32
|
-
onChange: (e) =>
|
|
31
|
+
value: p,
|
|
32
|
+
onChange: (e) => m(e.target.value)
|
|
33
33
|
})]
|
|
34
34
|
}),
|
|
35
35
|
/* @__PURE__ */ i("div", {
|
|
@@ -37,11 +37,11 @@ function f() {
|
|
|
37
37
|
children: [/* @__PURE__ */ r("label", {
|
|
38
38
|
className: "text-sm font-medium",
|
|
39
39
|
children: "Description"
|
|
40
|
-
}), /* @__PURE__ */ r(
|
|
40
|
+
}), /* @__PURE__ */ r(f, {
|
|
41
41
|
placeholder: "Describe the project objectives and scope...",
|
|
42
42
|
rows: 3,
|
|
43
|
-
value:
|
|
44
|
-
onChange: (e) =>
|
|
43
|
+
value: h,
|
|
44
|
+
onChange: (e) => g(e.target.value)
|
|
45
45
|
})]
|
|
46
46
|
}),
|
|
47
47
|
/* @__PURE__ */ i("div", {
|
|
@@ -51,20 +51,20 @@ function f() {
|
|
|
51
51
|
children: [/* @__PURE__ */ r("label", {
|
|
52
52
|
className: "text-sm font-medium",
|
|
53
53
|
children: "Start Date"
|
|
54
|
-
}), /* @__PURE__ */ r(
|
|
54
|
+
}), /* @__PURE__ */ r(d, {
|
|
55
55
|
type: "date",
|
|
56
|
-
value:
|
|
57
|
-
onChange: (e) =>
|
|
56
|
+
value: _,
|
|
57
|
+
onChange: (e) => v(e.target.value)
|
|
58
58
|
})]
|
|
59
59
|
}), /* @__PURE__ */ i("div", {
|
|
60
60
|
className: "space-y-2",
|
|
61
61
|
children: [/* @__PURE__ */ r("label", {
|
|
62
62
|
className: "text-sm font-medium",
|
|
63
63
|
children: "End Date"
|
|
64
|
-
}), /* @__PURE__ */ r(
|
|
64
|
+
}), /* @__PURE__ */ r(d, {
|
|
65
65
|
type: "date",
|
|
66
|
-
value:
|
|
67
|
-
onChange: (e) =>
|
|
66
|
+
value: y,
|
|
67
|
+
onChange: (e) => b(e.target.value)
|
|
68
68
|
})]
|
|
69
69
|
})]
|
|
70
70
|
}),
|
|
@@ -73,11 +73,11 @@ function f() {
|
|
|
73
73
|
children: [/* @__PURE__ */ r("label", {
|
|
74
74
|
className: "text-sm font-medium",
|
|
75
75
|
children: "Budget ($)"
|
|
76
|
-
}), /* @__PURE__ */ r(
|
|
76
|
+
}), /* @__PURE__ */ r(d, {
|
|
77
77
|
type: "number",
|
|
78
78
|
placeholder: "e.g. 250000",
|
|
79
|
-
value:
|
|
80
|
-
onChange: (e) =>
|
|
79
|
+
value: x,
|
|
80
|
+
onChange: (e) => S(e.target.value)
|
|
81
81
|
})]
|
|
82
82
|
})
|
|
83
83
|
]
|
|
@@ -93,6 +93,6 @@ function f() {
|
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
95
|
//#endregion
|
|
96
|
-
export {
|
|
96
|
+
export { p as ProjectsCreateProjectPagePage };
|
|
97
97
|
|
|
98
98
|
//# sourceMappingURL=ProjectsCreateProjectPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectsCreateProjectPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/ProjectsCreateProjectPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Input,\n Textarea,\n} from '@burdenoff/fe-libs/ui';\nimport { FolderKanban, Save } from 'lucide-react';\n\nexport function ProjectsCreateProjectPagePage() {\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [startDate, setStartDate] = useState('');\n const [endDate, setEndDate] = useState('');\n const [budget, setBudget] = useState('');\n\n return (\n <div className=\"space-y-6 p-6 max-w-3xl\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Create Project</h1>\n <p className=\"text-sm text-text-secondary\">Set up a new project for your team</p>\n </div>\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FolderKanban className=\"h-5 w-5\" />\n Project Details\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Project Name</label>\n <Input\n placeholder=\"e.g. HR Analytics Dashboard v3\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Description</label>\n <Textarea\n placeholder=\"Describe the project objectives and scope...\"\n rows={3}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Start Date</label>\n <Input type=\"date\" value={startDate} onChange={(e) => setStartDate(e.target.value)} />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">End Date</label>\n <Input type=\"date\" value={endDate} onChange={(e) => setEndDate(e.target.value)} />\n </div>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Budget ($)</label>\n <Input\n type=\"number\"\n placeholder=\"e.g. 250000\"\n value={budget}\n onChange={(e) => setBudget(e.target.value)}\n />\n </div>\n </CardContent>\n </Card>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\">Save as Draft</Button>\n <Button>\n <Save className=\"h-4 w-4 mr-1\" />\n Create Project\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"ProjectsCreateProjectPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/ProjectsCreateProjectPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GradientText,\n Input,\n Textarea,\n} from '@burdenoff/fe-libs/ui';\nimport { FolderKanban, Save } from 'lucide-react';\n\nexport function ProjectsCreateProjectPagePage() {\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [startDate, setStartDate] = useState('');\n const [endDate, setEndDate] = useState('');\n const [budget, setBudget] = useState('');\n\n return (\n <div className=\"space-y-6 p-6 max-w-3xl\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Create Project</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Set up a new project for your team</p>\n </div>\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FolderKanban className=\"h-5 w-5\" />\n Project Details\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Project Name</label>\n <Input\n placeholder=\"e.g. HR Analytics Dashboard v3\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Description</label>\n <Textarea\n placeholder=\"Describe the project objectives and scope...\"\n rows={3}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Start Date</label>\n <Input type=\"date\" value={startDate} onChange={(e) => setStartDate(e.target.value)} />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">End Date</label>\n <Input type=\"date\" value={endDate} onChange={(e) => setEndDate(e.target.value)} />\n </div>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Budget ($)</label>\n <Input\n type=\"number\"\n placeholder=\"e.g. 250000\"\n value={budget}\n onChange={(e) => setBudget(e.target.value)}\n />\n </div>\n </CardContent>\n </Card>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\">Save as Draft</Button>\n <Button>\n <Save className=\"h-4 w-4 mr-1\" />\n Create Project\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AAcA,SAAgB,IAAgC;CAC9C,IAAM,CAAC,GAAM,KAAW,EAAS,GAAG,EAC9B,CAAC,GAAa,KAAkB,EAAS,GAAG,EAC5C,CAAC,GAAW,KAAgB,EAAS,GAAG,EACxC,CAAC,GAAS,KAAc,EAAS,GAAG,EACpC,CAAC,GAAQ,KAAa,EAAS,GAAG;AAExC,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UAAc,kBAA6B,CAAA;IACxC,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cAA8B;IAAsC,CAAA,CAC7E,EAAA,CAAA;GACN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IAAW,WAAU;cAArB,CACE,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA,EAAA,kBAE1B;OACD,CAAA,EACb,kBAAC,GAAD;IAAa,WAAU;cAAvB;KACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,SAAD;OAAO,WAAU;iBAAsB;OAAoB,CAAA,EAC3D,kBAAC,GAAD;OACE,aAAY;OACZ,OAAO;OACP,WAAW,MAAM,EAAQ,EAAE,OAAO,MAAM;OACxC,CAAA,CACE;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,SAAD;OAAO,WAAU;iBAAsB;OAAmB,CAAA,EAC1D,kBAAC,GAAD;OACE,aAAY;OACZ,MAAM;OACN,OAAO;OACP,WAAW,MAAM,EAAe,EAAE,OAAO,MAAM;OAC/C,CAAA,CACE;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,SAAD;QAAO,WAAU;kBAAsB;QAAkB,CAAA,EACzD,kBAAC,GAAD;QAAO,MAAK;QAAO,OAAO;QAAW,WAAW,MAAM,EAAa,EAAE,OAAO,MAAM;QAAI,CAAA,CAClF;UACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,SAAD;QAAO,WAAU;kBAAsB;QAAgB,CAAA,EACvD,kBAAC,GAAD;QAAO,MAAK;QAAO,OAAO;QAAS,WAAW,MAAM,EAAW,EAAE,OAAO,MAAM;QAAI,CAAA,CAC9E;SACF;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,SAAD;OAAO,WAAU;iBAAsB;OAAkB,CAAA,EACzD,kBAAC,GAAD;OACE,MAAK;OACL,aAAY;OACZ,OAAO;OACP,WAAW,MAAM,EAAU,EAAE,OAAO,MAAM;OAC1C,CAAA,CACE;;KACM;MACT,EAAA,CAAA;GACP,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD;KAAQ,SAAQ;eAAU;KAAsB,CAAA,EAChD,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,iBAE1B,EAAA,CAAA,CACL;;GACF"}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
2
|
import { Calendar as t, DollarSign as n, Target as r, Users as i } from "lucide-react";
|
|
3
3
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
4
|
-
import { Badge as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d } from "@burdenoff/fe-libs/ui";
|
|
4
|
+
import { Badge as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d, GradientText as f, IllustratedEmptyState as p } from "@burdenoff/fe-libs/ui";
|
|
5
5
|
//#region src/crewfoundry/pages/ProjectsProjectDetailsPagePage.tsx
|
|
6
|
-
function
|
|
7
|
-
let { projects:
|
|
8
|
-
return
|
|
6
|
+
function m() {
|
|
7
|
+
let { projects: m } = e(), h = m[1];
|
|
8
|
+
return h ? /* @__PURE__ */ o("div", {
|
|
9
9
|
className: "space-y-6 p-6 max-w-4xl",
|
|
10
10
|
children: [
|
|
11
11
|
/* @__PURE__ */ o("div", {
|
|
12
12
|
className: "flex items-center justify-between",
|
|
13
13
|
children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
|
|
14
14
|
className: "text-2xl font-semibold",
|
|
15
|
-
children:
|
|
15
|
+
children: /* @__PURE__ */ a(f, { children: h.name })
|
|
16
16
|
}), /* @__PURE__ */ a("p", {
|
|
17
17
|
className: "text-sm text-text-secondary",
|
|
18
|
-
children:
|
|
18
|
+
children: h.description
|
|
19
19
|
})] }), /* @__PURE__ */ o("div", {
|
|
20
20
|
className: "flex gap-1",
|
|
21
21
|
children: [/* @__PURE__ */ a(s, {
|
|
22
|
-
variant:
|
|
23
|
-
children:
|
|
22
|
+
variant: h.priority === "critical" ? "destructive" : "default",
|
|
23
|
+
children: h.priority
|
|
24
24
|
}), /* @__PURE__ */ a(s, {
|
|
25
|
-
variant:
|
|
26
|
-
children:
|
|
25
|
+
variant: h.status === "active" ? "default" : "secondary",
|
|
26
|
+
children: h.status
|
|
27
27
|
})]
|
|
28
28
|
})]
|
|
29
29
|
}),
|
|
@@ -36,7 +36,7 @@ function f() {
|
|
|
36
36
|
/* @__PURE__ */ a(r, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
37
37
|
/* @__PURE__ */ o("p", {
|
|
38
38
|
className: "text-lg font-bold",
|
|
39
|
-
children: [
|
|
39
|
+
children: [h.progress, "%"]
|
|
40
40
|
}),
|
|
41
41
|
/* @__PURE__ */ a("p", {
|
|
42
42
|
className: "text-xs text-text-secondary",
|
|
@@ -52,7 +52,7 @@ function f() {
|
|
|
52
52
|
className: "text-lg font-bold",
|
|
53
53
|
children: [
|
|
54
54
|
"$",
|
|
55
|
-
(
|
|
55
|
+
(h.budget / 1e3).toFixed(0),
|
|
56
56
|
"K"
|
|
57
57
|
]
|
|
58
58
|
}),
|
|
@@ -68,7 +68,7 @@ function f() {
|
|
|
68
68
|
/* @__PURE__ */ a(i, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
69
69
|
/* @__PURE__ */ a("p", {
|
|
70
70
|
className: "text-lg font-bold",
|
|
71
|
-
children:
|
|
71
|
+
children: h.teamName
|
|
72
72
|
}),
|
|
73
73
|
/* @__PURE__ */ a("p", {
|
|
74
74
|
className: "text-xs text-text-secondary",
|
|
@@ -82,7 +82,7 @@ function f() {
|
|
|
82
82
|
/* @__PURE__ */ a(t, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
83
83
|
/* @__PURE__ */ a("p", {
|
|
84
84
|
className: "text-lg font-bold",
|
|
85
|
-
children:
|
|
85
|
+
children: h.endDate
|
|
86
86
|
}),
|
|
87
87
|
/* @__PURE__ */ a("p", {
|
|
88
88
|
className: "text-xs text-text-secondary",
|
|
@@ -97,19 +97,19 @@ function f() {
|
|
|
97
97
|
children: [/* @__PURE__ */ o("div", {
|
|
98
98
|
className: "flex justify-between text-sm",
|
|
99
99
|
children: [/* @__PURE__ */ o("span", { children: [
|
|
100
|
-
|
|
100
|
+
h.completedTasks,
|
|
101
101
|
" of ",
|
|
102
|
-
|
|
102
|
+
h.tasks,
|
|
103
103
|
" tasks completed"
|
|
104
104
|
] }), /* @__PURE__ */ o("span", {
|
|
105
105
|
className: "font-medium",
|
|
106
|
-
children: [
|
|
106
|
+
children: [h.progress, "%"]
|
|
107
107
|
})]
|
|
108
108
|
}), /* @__PURE__ */ a("div", {
|
|
109
109
|
className: "h-3 bg-bg-sunken rounded overflow-hidden",
|
|
110
110
|
children: /* @__PURE__ */ a("div", {
|
|
111
111
|
className: "h-3 bg-action-primary-bg rounded",
|
|
112
|
-
style: { width: `${
|
|
112
|
+
style: { width: `${h.progress}%` }
|
|
113
113
|
})
|
|
114
114
|
})]
|
|
115
115
|
}) })] }),
|
|
@@ -119,19 +119,19 @@ function f() {
|
|
|
119
119
|
className: "flex justify-between text-sm",
|
|
120
120
|
children: [/* @__PURE__ */ o("span", { children: [
|
|
121
121
|
"Spent $",
|
|
122
|
-
(
|
|
122
|
+
(h.spent / 1e3).toFixed(0),
|
|
123
123
|
"K of $",
|
|
124
|
-
(
|
|
124
|
+
(h.budget / 1e3).toFixed(0),
|
|
125
125
|
"K"
|
|
126
126
|
] }), /* @__PURE__ */ o("span", {
|
|
127
127
|
className: "font-medium",
|
|
128
|
-
children: [Math.round(
|
|
128
|
+
children: [Math.round(h.spent / h.budget * 100), "%"]
|
|
129
129
|
})]
|
|
130
130
|
}), /* @__PURE__ */ a("div", {
|
|
131
131
|
className: "h-3 bg-bg-sunken rounded overflow-hidden",
|
|
132
132
|
children: /* @__PURE__ */ a("div", {
|
|
133
|
-
className: `h-3 rounded ${
|
|
134
|
-
style: { width: `${Math.round(
|
|
133
|
+
className: `h-3 rounded ${h.spent / h.budget > .9 ? "bg-status-error-text" : "bg-status-success-text"}`,
|
|
134
|
+
style: { width: `${Math.round(h.spent / h.budget * 100)}%` }
|
|
135
135
|
})
|
|
136
136
|
})]
|
|
137
137
|
}), /* @__PURE__ */ o("div", {
|
|
@@ -141,23 +141,27 @@ function f() {
|
|
|
141
141
|
children: "Manager"
|
|
142
142
|
}), /* @__PURE__ */ a("p", {
|
|
143
143
|
className: "font-medium",
|
|
144
|
-
children:
|
|
144
|
+
children: h.managerName
|
|
145
145
|
})] }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
|
|
146
146
|
className: "text-xs text-text-secondary",
|
|
147
147
|
children: "Timeline"
|
|
148
148
|
}), /* @__PURE__ */ o("p", { children: [
|
|
149
|
-
|
|
149
|
+
h.startDate,
|
|
150
150
|
" — ",
|
|
151
|
-
|
|
151
|
+
h.endDate
|
|
152
152
|
] })] })]
|
|
153
153
|
})] })] })
|
|
154
154
|
]
|
|
155
155
|
}) : /* @__PURE__ */ a("div", {
|
|
156
|
-
className: "p-6
|
|
157
|
-
children:
|
|
156
|
+
className: "p-6",
|
|
157
|
+
children: /* @__PURE__ */ a(p, {
|
|
158
|
+
illustration: "empty-search",
|
|
159
|
+
title: "Project not found",
|
|
160
|
+
description: "This project is no longer available."
|
|
161
|
+
})
|
|
158
162
|
});
|
|
159
163
|
}
|
|
160
164
|
//#endregion
|
|
161
|
-
export {
|
|
165
|
+
export { m as ProjectsProjectDetailsPagePage };
|
|
162
166
|
|
|
163
167
|
//# sourceMappingURL=ProjectsProjectDetailsPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectsProjectDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/ProjectsProjectDetailsPagePage.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"ProjectsProjectDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/ProjectsProjectDetailsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GradientText,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { Calendar, DollarSign, Target, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function ProjectsProjectDetailsPagePage() {\n const { projects } = useCrewFoundryStore();\n const project = projects[1]; // Show second project for variety\n if (!project)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Project not found\"\n description=\"This project is no longer available.\"\n />\n </div>\n );\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{project.name}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{project.description}</p>\n </div>\n <div className=\"flex gap-1\">\n <Badge variant={project.priority === 'critical' ? 'destructive' : 'default'}>\n {project.priority}\n </Badge>\n <Badge variant={project.status === 'active' ? 'default' : 'secondary'}>\n {project.status}\n </Badge>\n </div>\n </div>\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Target className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{project.progress}%</p>\n <p className=\"text-xs text-text-secondary\">Progress</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <DollarSign className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">${(project.budget / 1000).toFixed(0)}K</p>\n <p className=\"text-xs text-text-secondary\">Budget</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{project.teamName}</p>\n <p className=\"text-xs text-text-secondary\">Team</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Calendar className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{project.endDate}</p>\n <p className=\"text-xs text-text-secondary\">Deadline</p>\n </CardContent>\n </Card>\n </div>\n <Card>\n <CardHeader>\n <CardTitle>Task Progress</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span>\n {project.completedTasks} of {project.tasks} tasks completed\n </span>\n <span className=\"font-medium\">{project.progress}%</span>\n </div>\n <div className=\"h-3 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-3 bg-action-primary-bg rounded\"\n style={{ width: `${project.progress}%` }}\n />\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Budget Tracking</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span>\n Spent ${(project.spent / 1000).toFixed(0)}K of ${(project.budget / 1000).toFixed(0)}\n K\n </span>\n <span className=\"font-medium\">\n {Math.round((project.spent / project.budget) * 100)}%\n </span>\n </div>\n <div className=\"h-3 bg-bg-sunken rounded overflow-hidden\">\n <div\n className={`h-3 rounded ${project.spent / project.budget > 0.9 ? 'bg-status-error-text' : 'bg-status-success-text'}`}\n style={{ width: `${Math.round((project.spent / project.budget) * 100)}%` }}\n />\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-4 mt-4 text-sm\">\n <div>\n <p className=\"text-xs text-text-secondary\">Manager</p>\n <p className=\"font-medium\">{project.managerName}</p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Timeline</p>\n <p>\n {project.startDate} — {project.endDate}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|