@burdenoff/microfe-crewfoundry 2026.608.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 +94 -78
- package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +112 -96
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +101 -85
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +131 -115
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +116 -100
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +15 -15
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +63 -51
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +16 -16
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +26 -26
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +28 -28
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +10 -10
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +71 -59
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +59 -47
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +77 -61
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +40 -40
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +13 -13
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +102 -86
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +173 -139
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +59 -59
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +113 -97
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +45 -45
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +85 -69
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +23 -23
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +40 -40
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +59 -47
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +52 -48
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +31 -26
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +61 -49
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +83 -67
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +90 -74
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +90 -74
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +83 -67
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +54 -42
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +16 -16
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +39 -35
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +24 -24
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +14 -14
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +81 -65
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js +73 -57
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +28 -28
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +12 -12
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +75 -59
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +57 -45
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +71 -59
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +48 -48
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +44 -43
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +58 -46
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +16 -16
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +23 -23
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +9 -9
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +43 -39
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +31 -27
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +59 -47
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +13 -13
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +66 -50
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +18 -18
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +74 -62
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +21 -21
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +47 -43
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +20 -20
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +58 -46
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +38 -34
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +14 -14
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +67 -67
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +16 -16
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,67 +1,83 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
2
|
import { CreditCard as t, DollarSign as n, Receipt as r, TrendingUp 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, GlassCard as f, GradientText as p } from "@burdenoff/fe-libs/ui";
|
|
5
5
|
//#region src/crewfoundry/pages/PaymentsPaymentDashboardPagePage.tsx
|
|
6
|
-
function
|
|
7
|
-
let { invoices:
|
|
6
|
+
function m() {
|
|
7
|
+
let { invoices: m, payrollRecords: h } = e(), g = m.reduce((e, t) => e + t.amount, 0), _ = m.filter((e) => e.status === "paid").reduce((e, t) => e + t.amount, 0), v = h.reduce((e, t) => e + t.grossPay, 0);
|
|
8
8
|
return /* @__PURE__ */ o("div", {
|
|
9
9
|
className: "space-y-6 p-6",
|
|
10
10
|
children: [
|
|
11
11
|
/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
|
|
12
12
|
className: "text-2xl font-semibold",
|
|
13
|
-
children: "Payment Dashboard"
|
|
13
|
+
children: /* @__PURE__ */ a(p, { children: "Payment Dashboard" })
|
|
14
14
|
}), /* @__PURE__ */ a("p", {
|
|
15
|
-
className: "text-sm text-
|
|
15
|
+
className: "text-sm text-text-secondary",
|
|
16
16
|
children: "Financial transactions and payment overview"
|
|
17
17
|
})] }),
|
|
18
18
|
/* @__PURE__ */ o("div", {
|
|
19
19
|
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
|
|
20
20
|
children: [
|
|
21
|
-
/* @__PURE__ */ o(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
21
|
+
/* @__PURE__ */ o(f, {
|
|
22
|
+
treatment: "metric",
|
|
23
|
+
className: "border-border-seam",
|
|
24
|
+
children: [/* @__PURE__ */ o(u, {
|
|
25
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
26
|
+
children: [/* @__PURE__ */ a(d, {
|
|
27
|
+
className: "text-sm font-medium",
|
|
28
|
+
children: "Total Invoiced"
|
|
29
|
+
}), /* @__PURE__ */ a(r, { className: "h-4 w-4 text-text-secondary" })]
|
|
30
|
+
}), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
|
|
31
|
+
className: "text-2xl font-bold tabular-nums",
|
|
32
|
+
children: ["$", g.toLocaleString()]
|
|
33
|
+
}) })]
|
|
34
|
+
}),
|
|
35
|
+
/* @__PURE__ */ o(f, {
|
|
36
|
+
treatment: "metric",
|
|
37
|
+
className: "border-border-seam",
|
|
38
|
+
children: [/* @__PURE__ */ o(u, {
|
|
39
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
40
|
+
children: [/* @__PURE__ */ a(d, {
|
|
41
|
+
className: "text-sm font-medium",
|
|
42
|
+
children: "Collected"
|
|
43
|
+
}), /* @__PURE__ */ a(n, { className: "h-4 w-4 text-status-success-text" })]
|
|
44
|
+
}), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
|
|
45
|
+
className: "text-2xl font-bold tabular-nums",
|
|
46
|
+
children: ["$", _.toLocaleString()]
|
|
47
|
+
}) })]
|
|
48
|
+
}),
|
|
49
|
+
/* @__PURE__ */ o(f, {
|
|
50
|
+
treatment: "metric",
|
|
51
|
+
className: "border-border-seam",
|
|
52
|
+
children: [/* @__PURE__ */ o(u, {
|
|
53
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
54
|
+
children: [/* @__PURE__ */ a(d, {
|
|
55
|
+
className: "text-sm font-medium",
|
|
56
|
+
children: "Payroll Processed"
|
|
57
|
+
}), /* @__PURE__ */ a(t, { className: "h-4 w-4 text-text-secondary" })]
|
|
58
|
+
}), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
|
|
59
|
+
className: "text-2xl font-bold tabular-nums",
|
|
60
|
+
children: ["$", v.toLocaleString()]
|
|
61
|
+
}) })]
|
|
62
|
+
}),
|
|
63
|
+
/* @__PURE__ */ o(f, {
|
|
64
|
+
treatment: "metric",
|
|
65
|
+
className: "border-border-seam",
|
|
66
|
+
children: [/* @__PURE__ */ o(u, {
|
|
67
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
68
|
+
children: [/* @__PURE__ */ a(d, {
|
|
69
|
+
className: "text-sm font-medium",
|
|
70
|
+
children: "Outstanding"
|
|
71
|
+
}), /* @__PURE__ */ a(i, { className: "h-4 w-4 text-status-warning-text" })]
|
|
72
|
+
}), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
|
|
73
|
+
className: "text-2xl font-bold tabular-nums",
|
|
74
|
+
children: ["$", (g - _).toLocaleString()]
|
|
75
|
+
}) })]
|
|
76
|
+
})
|
|
61
77
|
]
|
|
62
78
|
}),
|
|
63
79
|
/* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, { children: "Recent Invoices" }) }), /* @__PURE__ */ o(l, { children: [/* @__PURE__ */ o("div", {
|
|
64
|
-
className: "grid grid-cols-5 gap-2 text-xs font-medium text-
|
|
80
|
+
className: "grid grid-cols-5 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2",
|
|
65
81
|
children: [
|
|
66
82
|
/* @__PURE__ */ a("span", { children: "Invoice" }),
|
|
67
83
|
/* @__PURE__ */ a("span", { children: "Client" }),
|
|
@@ -75,7 +91,7 @@ function f() {
|
|
|
75
91
|
children: "Status"
|
|
76
92
|
})
|
|
77
93
|
]
|
|
78
|
-
}),
|
|
94
|
+
}), m.map((e) => /* @__PURE__ */ o("div", {
|
|
79
95
|
className: "grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm",
|
|
80
96
|
children: [
|
|
81
97
|
/* @__PURE__ */ a("span", {
|
|
@@ -83,7 +99,7 @@ function f() {
|
|
|
83
99
|
children: e.number
|
|
84
100
|
}),
|
|
85
101
|
/* @__PURE__ */ a("span", {
|
|
86
|
-
className: "text-
|
|
102
|
+
className: "text-text-secondary",
|
|
87
103
|
children: e.clientName
|
|
88
104
|
}),
|
|
89
105
|
/* @__PURE__ */ o("span", {
|
|
@@ -91,7 +107,7 @@ function f() {
|
|
|
91
107
|
children: ["$", e.amount.toLocaleString()]
|
|
92
108
|
}),
|
|
93
109
|
/* @__PURE__ */ a("span", {
|
|
94
|
-
className: "text-
|
|
110
|
+
className: "text-text-secondary",
|
|
95
111
|
children: e.dueDate
|
|
96
112
|
}),
|
|
97
113
|
/* @__PURE__ */ a("div", {
|
|
@@ -108,6 +124,6 @@ function f() {
|
|
|
108
124
|
});
|
|
109
125
|
}
|
|
110
126
|
//#endregion
|
|
111
|
-
export {
|
|
127
|
+
export { m as PaymentsPaymentDashboardPagePage };
|
|
112
128
|
|
|
113
129
|
//# sourceMappingURL=PaymentsPaymentDashboardPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentsPaymentDashboardPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsPaymentDashboardPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowUp, CreditCard, DollarSign, Receipt, TrendingUp } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function PaymentsPaymentDashboardPagePage() {\n const { invoices, payrollRecords } = useCrewFoundryStore();\n const totalInvoiced = invoices.reduce((s, i) => s + i.amount, 0);\n const totalPaid = invoices.filter((i) => i.status === 'paid').reduce((s, i) => s + i.amount, 0);\n const totalPayroll = payrollRecords.reduce((s, r) => s + r.grossPay, 0);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Payment Dashboard</h1>\n <p className=\"text-sm text-
|
|
1
|
+
{"version":3,"file":"PaymentsPaymentDashboardPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsPaymentDashboardPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowUp, CreditCard, DollarSign, Receipt, TrendingUp } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function PaymentsPaymentDashboardPagePage() {\n const { invoices, payrollRecords } = useCrewFoundryStore();\n const totalInvoiced = invoices.reduce((s, i) => s + i.amount, 0);\n const totalPaid = invoices.filter((i) => i.status === 'paid').reduce((s, i) => s + i.amount, 0);\n const totalPayroll = payrollRecords.reduce((s, r) => s + r.grossPay, 0);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Payment Dashboard</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Financial transactions and payment overview</p>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\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\">Total Invoiced</CardTitle>\n <Receipt className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">${totalInvoiced.toLocaleString()}</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\">Collected</CardTitle>\n <DollarSign className=\"h-4 w-4 text-status-success-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">${totalPaid.toLocaleString()}</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\">Payroll Processed</CardTitle>\n <CreditCard className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">${totalPayroll.toLocaleString()}</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\">Outstanding</CardTitle>\n <TrendingUp className=\"h-4 w-4 text-status-warning-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n ${(totalInvoiced - totalPaid).toLocaleString()}\n </div>\n </CardContent>\n </GlassCard>\n </div>\n <Card>\n <CardHeader>\n <CardTitle>Recent Invoices</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-5 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2\">\n <span>Invoice</span>\n <span>Client</span>\n <span className=\"text-right\">Amount</span>\n <span>Due Date</span>\n <span className=\"text-center\">Status</span>\n </div>\n {invoices.map((inv) => (\n <div\n key={inv.id}\n className=\"grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm\"\n >\n <span className=\"font-medium\">{inv.number}</span>\n <span className=\"text-text-secondary\">{inv.clientName}</span>\n <span className=\"text-right\">${inv.amount.toLocaleString()}</span>\n <span className=\"text-text-secondary\">{inv.dueDate}</span>\n <div className=\"text-center\">\n <Badge\n variant={\n inv.status === 'paid'\n ? 'default'\n : inv.status === 'overdue'\n ? 'destructive'\n : 'secondary'\n }\n className=\"text-[10px]\"\n >\n {inv.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -2,23 +2,23 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
|
2
2
|
import { useMemo as t } from "react";
|
|
3
3
|
import { Building2 as n, CreditCard as r, Plus as i } from "lucide-react";
|
|
4
4
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
5
|
-
import { Badge as s, Button as c, Card as l, CardContent as u } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { Badge as s, Button as c, Card as l, CardContent as u, GradientText as d } from "@burdenoff/fe-libs/ui";
|
|
6
6
|
//#region src/crewfoundry/pages/PaymentsPaymentMethodsPagePage.tsx
|
|
7
|
-
function
|
|
8
|
-
let { paymentMethods:
|
|
9
|
-
let e =
|
|
7
|
+
function f() {
|
|
8
|
+
let { paymentMethods: f, invoices: p, payrollRecords: m, vendors: h, clients: g } = e(), _ = t(() => {
|
|
9
|
+
let e = m.slice(0, 3).map((e, t) => ({
|
|
10
10
|
id: `bank-${e.id}`,
|
|
11
11
|
type: "bank",
|
|
12
12
|
name: `${e.department} Settlement Account`,
|
|
13
|
-
bank:
|
|
13
|
+
bank: h[t % Math.max(h.length, 1)]?.name || "Burdenoff Bank",
|
|
14
14
|
last4: String(e.netPay).slice(-4).padStart(4, "0"),
|
|
15
15
|
status: t === 0 ? "primary" : "active"
|
|
16
|
-
})), t =
|
|
16
|
+
})), t = p.slice(0, 4).map((t, n) => {
|
|
17
17
|
let r = String((n + 3) % 12 + 1).padStart(2, "0"), i = String(2027 + n % 2);
|
|
18
18
|
return {
|
|
19
19
|
id: `card-${t.id}`,
|
|
20
20
|
type: "card",
|
|
21
|
-
name: `${
|
|
21
|
+
name: `${g[n % Math.max(g.length, 1)]?.name || "Corporate"} Card`,
|
|
22
22
|
bank: t.clientName,
|
|
23
23
|
last4: t.number.replaceAll(/\D/g, "").slice(-4).padStart(4, "0"),
|
|
24
24
|
status: n === 0 && e.length === 0 ? "primary" : "active",
|
|
@@ -27,20 +27,20 @@ function d() {
|
|
|
27
27
|
});
|
|
28
28
|
return [...e, ...t];
|
|
29
29
|
}, [
|
|
30
|
-
|
|
31
|
-
f,
|
|
30
|
+
g,
|
|
32
31
|
p,
|
|
33
|
-
m
|
|
34
|
-
|
|
32
|
+
m,
|
|
33
|
+
h
|
|
34
|
+
]), v = f.length > 0 ? f : _;
|
|
35
35
|
return /* @__PURE__ */ o("div", {
|
|
36
36
|
className: "space-y-6 p-6",
|
|
37
37
|
children: [/* @__PURE__ */ o("div", {
|
|
38
38
|
className: "flex items-center justify-between",
|
|
39
39
|
children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
|
|
40
40
|
className: "text-2xl font-semibold",
|
|
41
|
-
children: "Payment Methods"
|
|
41
|
+
children: /* @__PURE__ */ a(d, { children: "Payment Methods" })
|
|
42
42
|
}), /* @__PURE__ */ a("p", {
|
|
43
|
-
className: "text-sm text-
|
|
43
|
+
className: "text-sm text-text-secondary",
|
|
44
44
|
children: "Manage company payment accounts"
|
|
45
45
|
})] }), /* @__PURE__ */ o(c, {
|
|
46
46
|
size: "sm",
|
|
@@ -48,17 +48,17 @@ function d() {
|
|
|
48
48
|
})]
|
|
49
49
|
}), /* @__PURE__ */ a("div", {
|
|
50
50
|
className: "grid gap-4 md:grid-cols-2",
|
|
51
|
-
children:
|
|
51
|
+
children: v.map((e) => /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o(u, {
|
|
52
52
|
className: "p-4",
|
|
53
53
|
children: [/* @__PURE__ */ o("div", {
|
|
54
54
|
className: "mb-3 flex items-center justify-between",
|
|
55
55
|
children: [/* @__PURE__ */ o("div", {
|
|
56
56
|
className: "flex items-center gap-2",
|
|
57
|
-
children: [e.type === "bank" ? /* @__PURE__ */ a(n, { className: "h-5 w-5 text-
|
|
57
|
+
children: [e.type === "bank" ? /* @__PURE__ */ a(n, { className: "h-5 w-5 text-text-secondary" }) : /* @__PURE__ */ a(r, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
|
|
58
58
|
className: "text-sm font-medium",
|
|
59
59
|
children: e.name
|
|
60
60
|
}), /* @__PURE__ */ a("p", {
|
|
61
|
-
className: "text-xs text-
|
|
61
|
+
className: "text-xs text-text-secondary",
|
|
62
62
|
children: e.bank
|
|
63
63
|
})] })]
|
|
64
64
|
}), /* @__PURE__ */ a(s, {
|
|
@@ -67,7 +67,7 @@ function d() {
|
|
|
67
67
|
children: e.status
|
|
68
68
|
})]
|
|
69
69
|
}), /* @__PURE__ */ o("div", {
|
|
70
|
-
className: "flex items-center justify-between text-sm text-
|
|
70
|
+
className: "flex items-center justify-between text-sm text-text-secondary",
|
|
71
71
|
children: [/* @__PURE__ */ o("span", { children: ["•••• •••• •••• ", e.last4] }), e.expiry ? /* @__PURE__ */ o("span", { children: ["Exp: ", e.expiry] }) : null]
|
|
72
72
|
})]
|
|
73
73
|
}) }, e.id))
|
|
@@ -75,6 +75,6 @@ function d() {
|
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
77
|
//#endregion
|
|
78
|
-
export {
|
|
78
|
+
export { f as PaymentsPaymentMethodsPagePage };
|
|
79
79
|
|
|
80
80
|
//# sourceMappingURL=PaymentsPaymentMethodsPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentsPaymentMethodsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsPaymentMethodsPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Badge, Button, Card, CardContent } from '@burdenoff/fe-libs/ui';\nimport { Building2, CreditCard, Plus } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype PaymentMethod = {\n id: string;\n type: 'bank' | 'card';\n name: string;\n bank: string;\n last4: string;\n status: 'primary' | 'active';\n expiry?: string;\n};\n\nexport function PaymentsPaymentMethodsPagePage() {\n const {\n paymentMethods: overlapPaymentMethods,\n invoices,\n payrollRecords,\n vendors,\n clients,\n } = useCrewFoundryStore();\n\n const fallbackMethods = useMemo<PaymentMethod[]>(() => {\n const bankMethods = payrollRecords.slice(0, 3).map((record, index) => ({\n id: `bank-${record.id}`,\n type: 'bank' as const,\n name: `${record.department} Settlement Account`,\n bank: vendors[index % Math.max(vendors.length, 1)]?.name || 'Burdenoff Bank',\n last4: String(record.netPay).slice(-4).padStart(4, '0'),\n status: index === 0 ? ('primary' as const) : ('active' as const),\n }));\n\n const cardMethods = invoices.slice(0, 4).map((invoice, index) => {\n const month = String(((index + 3) % 12) + 1).padStart(2, '0');\n const year = String(2027 + (index % 2));\n return {\n id: `card-${invoice.id}`,\n type: 'card' as const,\n name: `${clients[index % Math.max(clients.length, 1)]?.name || 'Corporate'} Card`,\n bank: invoice.clientName,\n last4: invoice.number.replaceAll(/\\D/g, '').slice(-4).padStart(4, '0'),\n status:\n index === 0 && bankMethods.length === 0 ? ('primary' as const) : ('active' as const),\n expiry: `${month}/${year}`,\n };\n });\n\n return [...bankMethods, ...cardMethods];\n }, [clients, invoices, payrollRecords, vendors]);\n\n const paymentMethods = overlapPaymentMethods.length > 0 ? overlapPaymentMethods : fallbackMethods;\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 Methods</h1>\n <p className=\"text-sm text-
|
|
1
|
+
{"version":3,"file":"PaymentsPaymentMethodsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsPaymentMethodsPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Badge, Button, Card, CardContent, GradientText } from '@burdenoff/fe-libs/ui';\nimport { Building2, CreditCard, Plus } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype PaymentMethod = {\n id: string;\n type: 'bank' | 'card';\n name: string;\n bank: string;\n last4: string;\n status: 'primary' | 'active';\n expiry?: string;\n};\n\nexport function PaymentsPaymentMethodsPagePage() {\n const {\n paymentMethods: overlapPaymentMethods,\n invoices,\n payrollRecords,\n vendors,\n clients,\n } = useCrewFoundryStore();\n\n const fallbackMethods = useMemo<PaymentMethod[]>(() => {\n const bankMethods = payrollRecords.slice(0, 3).map((record, index) => ({\n id: `bank-${record.id}`,\n type: 'bank' as const,\n name: `${record.department} Settlement Account`,\n bank: vendors[index % Math.max(vendors.length, 1)]?.name || 'Burdenoff Bank',\n last4: String(record.netPay).slice(-4).padStart(4, '0'),\n status: index === 0 ? ('primary' as const) : ('active' as const),\n }));\n\n const cardMethods = invoices.slice(0, 4).map((invoice, index) => {\n const month = String(((index + 3) % 12) + 1).padStart(2, '0');\n const year = String(2027 + (index % 2));\n return {\n id: `card-${invoice.id}`,\n type: 'card' as const,\n name: `${clients[index % Math.max(clients.length, 1)]?.name || 'Corporate'} Card`,\n bank: invoice.clientName,\n last4: invoice.number.replaceAll(/\\D/g, '').slice(-4).padStart(4, '0'),\n status:\n index === 0 && bankMethods.length === 0 ? ('primary' as const) : ('active' as const),\n expiry: `${month}/${year}`,\n };\n });\n\n return [...bankMethods, ...cardMethods];\n }, [clients, invoices, payrollRecords, vendors]);\n\n const paymentMethods = overlapPaymentMethods.length > 0 ? overlapPaymentMethods : fallbackMethods;\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 Methods</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Manage company payment accounts</p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-1 h-4 w-4\" />\n Add Method\n </Button>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n {paymentMethods.map((method) => (\n <Card key={method.id}>\n <CardContent className=\"p-4\">\n <div className=\"mb-3 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n {method.type === 'bank' ? (\n <Building2 className=\"h-5 w-5 text-text-secondary\" />\n ) : (\n <CreditCard className=\"h-5 w-5 text-text-secondary\" />\n )}\n <div>\n <p className=\"text-sm font-medium\">{method.name}</p>\n <p className=\"text-xs text-text-secondary\">{method.bank}</p>\n </div>\n </div>\n <Badge\n variant={method.status === 'primary' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {method.status}\n </Badge>\n </div>\n <div className=\"flex items-center justify-between text-sm text-text-secondary\">\n <span>•••• •••• •••• {method.last4}</span>\n {method.expiry ? <span>Exp: {method.expiry}</span> : null}\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAeA,SAAgB,IAAiC;CAC/C,IAAM,EACJ,gBAAgB,GAChB,aACA,mBACA,YACA,eACE,GAAqB,EAEnB,IAAkB,QAA+B;EACrD,IAAM,IAAc,EAAe,MAAM,GAAG,EAAE,CAAC,KAAK,GAAQ,OAAW;GACrE,IAAI,QAAQ,EAAO;GACnB,MAAM;GACN,MAAM,GAAG,EAAO,WAAW;GAC3B,MAAM,EAAQ,IAAQ,KAAK,IAAI,EAAQ,QAAQ,EAAE,GAAG,QAAQ;GAC5D,OAAO,OAAO,EAAO,OAAO,CAAC,MAAM,GAAG,CAAC,SAAS,GAAG,IAAI;GACvD,QAAQ,MAAU,IAAK,YAAuB;GAC/C,EAAE,EAEG,IAAc,EAAS,MAAM,GAAG,EAAE,CAAC,KAAK,GAAS,MAAU;GAC/D,IAAM,IAAQ,QAAS,IAAQ,KAAK,KAAM,EAAE,CAAC,SAAS,GAAG,IAAI,EACvD,IAAO,OAAO,OAAQ,IAAQ,EAAG;AACvC,UAAO;IACL,IAAI,QAAQ,EAAQ;IACpB,MAAM;IACN,MAAM,GAAG,EAAQ,IAAQ,KAAK,IAAI,EAAQ,QAAQ,EAAE,GAAG,QAAQ,YAAY;IAC3E,MAAM,EAAQ;IACd,OAAO,EAAQ,OAAO,WAAW,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,SAAS,GAAG,IAAI;IACtE,QACE,MAAU,KAAK,EAAY,WAAW,IAAK,YAAuB;IACpE,QAAQ,GAAG,EAAM,GAAG;IACrB;IACD;AAEF,SAAO,CAAC,GAAG,GAAa,GAAG,EAAY;IACtC;EAAC;EAAS;EAAU;EAAgB;EAAQ,CAAC,EAE1C,IAAiB,EAAsB,SAAS,IAAI,IAAwB;AAElF,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UAAc,mBAA8B,CAAA;IACzC,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cAA8B;IAAmC,CAAA,CAC1E,EAAA,CAAA,EACN,kBAAC,GAAD;IAAQ,MAAK;cAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,aAE1B;MACL;MAEN,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAe,KAAK,MACnB,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IAAa,WAAU;cAAvB,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACG,EAAO,SAAS,SACf,kBAAC,GAAD,EAAW,WAAU,+BAAgC,CAAA,GAErD,kBAAC,GAAD,EAAY,WAAU,+BAAgC,CAAA,EAExD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAuB,EAAO;OAAS,CAAA,EACpD,kBAAC,KAAD;OAAG,WAAU;iBAA+B,EAAO;OAAS,CAAA,CACxD,EAAA,CAAA,CACF;SACN,kBAAC,GAAD;MACE,SAAS,EAAO,WAAW,YAAY,YAAY;MACnD,WAAU;gBAET,EAAO;MACF,CAAA,CACJ;QACN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD,EAAA,UAAA,CAAM,mBAAgB,EAAO,MAAa,EAAA,CAAA,EACzC,EAAO,SAAS,kBAAC,QAAD,EAAA,UAAA,CAAM,SAAM,EAAO,OAAc,EAAA,CAAA,GAAG,KACjD;OACM;OACT,EA1BI,EAAO,GA0BX,CACP;GACE,CAAA,CACF"}
|
|
@@ -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,9 +68,9 @@ 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
|
-
className: "text-sm text-
|
|
73
|
+
className: "text-sm text-text-secondary",
|
|
74
74
|
children: "Security controls and compliance status"
|
|
75
75
|
})] }), /* @__PURE__ */ s(l, {
|
|
76
76
|
variant: "outline",
|
|
@@ -81,56 +81,68 @@ 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
|
})]
|
|
130
142
|
}), /* @__PURE__ */ s("div", {
|
|
131
143
|
className: "flex items-center gap-2",
|
|
132
144
|
children: [/* @__PURE__ */ s("span", {
|
|
133
|
-
className: "text-xs text-
|
|
145
|
+
className: "text-xs text-text-secondary",
|
|
134
146
|
children: ["Last: ", e.lastChecked]
|
|
135
147
|
}), /* @__PURE__ */ o(c, {
|
|
136
148
|
variant: e.status === "passed" ? "default" : "secondary",
|
|
@@ -142,18 +154,18 @@ 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
|
})]
|
|
153
165
|
}), /* @__PURE__ */ s("div", {
|
|
154
166
|
className: "flex items-center gap-2",
|
|
155
167
|
children: [/* @__PURE__ */ o("span", {
|
|
156
|
-
className: "text-xs text-
|
|
168
|
+
className: "text-xs text-text-secondary",
|
|
157
169
|
children: e.time
|
|
158
170
|
}), /* @__PURE__ */ o(c, {
|
|
159
171
|
variant: "outline",
|
|
@@ -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
|