@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.
Files changed (131) hide show
  1. package/dist/crewfoundry/pages/AdminAdminPagePage.js +86 -70
  2. package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
  3. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +104 -88
  4. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  5. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +91 -75
  6. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
  7. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +119 -103
  8. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  9. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +107 -91
  10. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
  11. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +10 -10
  12. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  13. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +60 -48
  14. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
  15. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +10 -10
  16. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
  17. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +20 -20
  18. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
  19. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +22 -22
  20. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  21. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +7 -7
  22. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
  23. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +67 -55
  24. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
  25. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +54 -42
  26. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  27. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +68 -52
  28. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
  29. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +30 -30
  30. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
  31. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +9 -9
  32. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  33. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +90 -74
  34. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
  35. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +166 -132
  36. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  37. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +43 -43
  38. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
  39. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +107 -91
  40. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
  41. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +35 -35
  42. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
  43. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +78 -62
  44. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
  45. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +17 -17
  46. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  47. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +39 -39
  48. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  49. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +53 -41
  50. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  51. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +41 -37
  52. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/HiringJobsPagePage.js +25 -20
  54. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  55. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +54 -42
  56. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  57. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +76 -60
  58. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +83 -67
  60. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  61. package/dist/crewfoundry/pages/HrPayrollPagePage.js +86 -70
  62. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  63. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +79 -63
  64. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  65. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +51 -39
  66. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
  67. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +14 -14
  68. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +29 -25
  70. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  71. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +17 -17
  72. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
  73. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +11 -11
  74. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  75. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +76 -60
  76. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
  77. package/dist/crewfoundry/pages/LearningLearningPagePage.js +67 -51
  78. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
  79. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +17 -17
  80. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  81. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +7 -7
  82. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  83. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +69 -53
  84. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  85. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +54 -42
  86. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  87. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +66 -54
  88. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
  89. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +37 -37
  90. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
  91. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +33 -32
  92. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
  93. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +54 -42
  94. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  95. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +11 -11
  96. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
  97. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +18 -18
  98. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
  99. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +7 -7
  100. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  101. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +29 -25
  102. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
  103. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +22 -18
  104. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  105. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +55 -43
  106. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
  107. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +7 -7
  108. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  109. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +62 -46
  110. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  111. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +14 -14
  112. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
  113. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +71 -59
  114. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
  115. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +20 -20
  116. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
  117. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +33 -29
  118. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  119. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +16 -16
  120. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  121. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +53 -41
  122. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
  123. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +25 -21
  124. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
  125. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +9 -9
  126. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
  127. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +48 -48
  128. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  129. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +13 -13
  130. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  131. package/package.json +2 -2
@@ -2,11 +2,11 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { useMemo as t } from "react";
3
3
  import { DollarSign as n, Lock as r, ShieldCheck as i } from "lucide-react";
4
4
  import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
- import { Badge as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d } from "@burdenoff/fe-libs/ui";
5
+ 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";
6
6
  //#region src/crewfoundry/pages/PaymentsEscrowPagePage.tsx
7
- function f() {
8
- let { projects: f, invoices: p, payrollRecords: m } = e(), h = t(() => f.slice(0, 10).map((e, t) => {
9
- let n = p[t % Math.max(p.length, 1)], r = m[t % Math.max(m.length, 1)], i = Math.max(e.budget || 0, n?.amount || 0, 1e3), a = Math.min(e.spent || 0, i), o = Math.max(0, Math.round(e.progress / 100 * 5)), s = Math.max(o + 1, 3), c = a >= i ? "completed" : a > 0 ? "active" : r?.status === "approved" ? "funded" : "active";
7
+ function m() {
8
+ let { projects: m, invoices: h, payrollRecords: g } = e(), _ = t(() => m.slice(0, 10).map((e, t) => {
9
+ let n = h[t % Math.max(h.length, 1)], r = g[t % Math.max(g.length, 1)], i = Math.max(e.budget || 0, n?.amount || 0, 1e3), a = Math.min(e.spent || 0, i), o = Math.max(0, Math.round(e.progress / 100 * 5)), s = Math.max(o + 1, 3), c = a >= i ? "completed" : a > 0 ? "active" : r?.status === "approved" ? "funded" : "active";
10
10
  return {
11
11
  id: e.id,
12
12
  project: e.name,
@@ -18,16 +18,16 @@ function f() {
18
18
  completedMilestones: Math.min(o, s)
19
19
  };
20
20
  }), [
21
- p,
22
- m,
23
- f
24
- ]), g = h.reduce((e, t) => e + t.amount, 0), _ = h.reduce((e, t) => e + t.released, 0);
21
+ h,
22
+ g,
23
+ m
24
+ ]), v = _.reduce((e, t) => e + t.amount, 0), y = _.reduce((e, t) => e + t.released, 0);
25
25
  return /* @__PURE__ */ o("div", {
26
26
  className: "space-y-6 p-6",
27
27
  children: [
28
28
  /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
29
29
  className: "text-2xl font-semibold",
30
- children: "Escrow"
30
+ children: /* @__PURE__ */ a(p, { children: "Escrow" })
31
31
  }), /* @__PURE__ */ a("p", {
32
32
  className: "text-sm text-text-secondary",
33
33
  children: "Secure payment holding for service contracts"
@@ -35,41 +35,53 @@ function f() {
35
35
  /* @__PURE__ */ o("div", {
36
36
  className: "grid gap-4 md:grid-cols-3",
37
37
  children: [
38
- /* @__PURE__ */ o(c, { 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: "Total in Escrow"
43
- }), /* @__PURE__ */ a(r, { className: "h-4 w-4 text-text-secondary" })]
44
- }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
45
- className: "text-2xl font-bold",
46
- children: ["$", g.toLocaleString()]
47
- }) })] }),
48
- /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ o(u, {
49
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
50
- children: [/* @__PURE__ */ a(d, {
51
- className: "text-sm font-medium",
52
- children: "Released"
53
- }), /* @__PURE__ */ a(n, { className: "h-4 w-4 text-green-500" })]
54
- }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
55
- className: "text-2xl font-bold",
56
- children: ["$", _.toLocaleString()]
57
- }) })] }),
58
- /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ o(u, {
59
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
60
- children: [/* @__PURE__ */ a(d, {
61
- className: "text-sm font-medium",
62
- children: "Held"
63
- }), /* @__PURE__ */ a(i, { className: "h-4 w-4 text-blue-500" })]
64
- }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
65
- className: "text-2xl font-bold",
66
- children: ["$", (g - _).toLocaleString()]
67
- }) })] })
38
+ /* @__PURE__ */ o(f, {
39
+ treatment: "metric",
40
+ className: "border-border-seam",
41
+ children: [/* @__PURE__ */ o(u, {
42
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
43
+ children: [/* @__PURE__ */ a(d, {
44
+ className: "text-sm font-medium",
45
+ children: "Total in Escrow"
46
+ }), /* @__PURE__ */ a(r, { className: "h-4 w-4 text-text-secondary" })]
47
+ }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
48
+ className: "text-2xl font-bold tabular-nums",
49
+ children: ["$", v.toLocaleString()]
50
+ }) })]
51
+ }),
52
+ /* @__PURE__ */ o(f, {
53
+ treatment: "metric",
54
+ className: "border-border-seam",
55
+ children: [/* @__PURE__ */ o(u, {
56
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
57
+ children: [/* @__PURE__ */ a(d, {
58
+ className: "text-sm font-medium",
59
+ children: "Released"
60
+ }), /* @__PURE__ */ a(n, { className: "h-4 w-4 text-status-success-text" })]
61
+ }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
62
+ className: "text-2xl font-bold tabular-nums",
63
+ children: ["$", y.toLocaleString()]
64
+ }) })]
65
+ }),
66
+ /* @__PURE__ */ o(f, {
67
+ treatment: "metric",
68
+ className: "border-border-seam",
69
+ children: [/* @__PURE__ */ o(u, {
70
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
71
+ children: [/* @__PURE__ */ a(d, {
72
+ className: "text-sm font-medium",
73
+ children: "Held"
74
+ }), /* @__PURE__ */ a(i, { className: "h-4 w-4 text-status-info-text" })]
75
+ }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
76
+ className: "text-2xl font-bold tabular-nums",
77
+ children: ["$", (v - y).toLocaleString()]
78
+ }) })]
79
+ })
68
80
  ]
69
81
  }),
70
82
  /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, { children: "Escrow Transactions" }) }), /* @__PURE__ */ a(l, {
71
83
  className: "space-y-3",
72
- children: h.map((e) => {
84
+ children: _.map((e) => {
73
85
  let t = e.amount === 0 ? 0 : Math.round(e.released / e.amount * 100);
74
86
  return /* @__PURE__ */ o("div", {
75
87
  className: "rounded border p-4",
@@ -93,7 +105,7 @@ function f() {
93
105
  children: [
94
106
  /* @__PURE__ */ o("span", { children: ["Total: $", e.amount.toLocaleString()] }),
95
107
  /* @__PURE__ */ o("span", {
96
- className: "text-green-600",
108
+ className: "text-status-success-text",
97
109
  children: ["Released: $", e.released.toLocaleString()]
98
110
  }),
99
111
  /* @__PURE__ */ o("span", {
@@ -115,7 +127,7 @@ function f() {
115
127
  }), /* @__PURE__ */ a("div", {
116
128
  className: "h-2 overflow-hidden rounded bg-bg-sunken",
117
129
  children: /* @__PURE__ */ a("div", {
118
- className: "h-2 rounded bg-green-500",
130
+ className: "h-2 rounded bg-status-success-text",
119
131
  style: { width: `${t}%` }
120
132
  })
121
133
  })]
@@ -128,6 +140,6 @@ function f() {
128
140
  });
129
141
  }
130
142
  //#endregion
131
- export { f as PaymentsEscrowPagePage };
143
+ export { m as PaymentsEscrowPagePage };
132
144
 
133
145
  //# sourceMappingURL=PaymentsEscrowPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentsEscrowPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsEscrowPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Badge, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { DollarSign, Lock, ShieldCheck } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype EscrowTransaction = {\n id: string;\n project: string;\n provider: string;\n amount: number;\n released: number;\n status: 'active' | 'funded' | 'completed';\n milestones: number;\n completedMilestones: number;\n};\n\nexport function PaymentsEscrowPagePage() {\n const { projects, invoices, payrollRecords } = useCrewFoundryStore();\n\n const escrowTransactions = useMemo<EscrowTransaction[]>(() => {\n return projects.slice(0, 10).map((project, index) => {\n const invoice = invoices[index % Math.max(invoices.length, 1)];\n const payroll = payrollRecords[index % Math.max(payrollRecords.length, 1)];\n const amount = Math.max(project.budget || 0, invoice?.amount || 0, 1000);\n const released = Math.min(project.spent || 0, amount);\n const completedMilestones = Math.max(0, Math.round((project.progress / 100) * 5));\n const milestones = Math.max(completedMilestones + 1, 3);\n const status: EscrowTransaction['status'] =\n released >= amount\n ? 'completed'\n : released > 0\n ? 'active'\n : payroll?.status === 'approved'\n ? 'funded'\n : 'active';\n\n return {\n id: project.id,\n project: project.name,\n provider: payroll?.employeeName || project.managerName,\n amount,\n released,\n status,\n milestones,\n completedMilestones: Math.min(completedMilestones, milestones),\n };\n });\n }, [invoices, payrollRecords, projects]);\n\n const totalEscrow = escrowTransactions.reduce((sum, transaction) => sum + transaction.amount, 0);\n const totalReleased = escrowTransactions.reduce(\n (sum, transaction) => sum + transaction.released,\n 0\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Escrow</h1>\n <p className=\"text-sm text-text-secondary\">\n Secure payment holding for service contracts\n </p>\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\">Total in Escrow</CardTitle>\n <Lock className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">${totalEscrow.toLocaleString()}</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\">Released</CardTitle>\n <DollarSign className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">${totalReleased.toLocaleString()}</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\">Held</CardTitle>\n <ShieldCheck className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n ${(totalEscrow - totalReleased).toLocaleString()}\n </div>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Escrow Transactions</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {escrowTransactions.map((escrow) => {\n const progress =\n escrow.amount === 0 ? 0 : Math.round((escrow.released / escrow.amount) * 100);\n\n return (\n <div key={escrow.id} className=\"rounded border p-4\">\n <div className=\"mb-2 flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{escrow.project}</p>\n <p className=\"text-xs text-text-secondary\">{escrow.provider}</p>\n </div>\n <Badge\n variant={\n escrow.status === 'active'\n ? 'default'\n : escrow.status === 'completed'\n ? 'secondary'\n : 'outline'\n }\n className=\"text-[10px]\"\n >\n {escrow.status}\n </Badge>\n </div>\n\n <div className=\"flex items-center gap-4 text-sm\">\n <span>Total: ${escrow.amount.toLocaleString()}</span>\n <span className=\"text-green-600\">\n Released: ${escrow.released.toLocaleString()}\n </span>\n <span className=\"text-text-secondary\">\n Held: ${(escrow.amount - escrow.released).toLocaleString()}\n </span>\n </div>\n\n <div className=\"mt-2\">\n <div className=\"mb-1 flex justify-between text-xs\">\n <span>\n Milestones: {escrow.completedMilestones}/{escrow.milestones}\n </span>\n <span>{progress}%</span>\n </div>\n <div className=\"h-2 overflow-hidden rounded bg-bg-sunken\">\n <div className=\"h-2 rounded bg-green-500\" style={{ width: `${progress}%` }} />\n </div>\n </div>\n </div>\n );\n })}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"PaymentsEscrowPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsEscrowPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n Badge,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { DollarSign, Lock, ShieldCheck } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype EscrowTransaction = {\n id: string;\n project: string;\n provider: string;\n amount: number;\n released: number;\n status: 'active' | 'funded' | 'completed';\n milestones: number;\n completedMilestones: number;\n};\n\nexport function PaymentsEscrowPagePage() {\n const { projects, invoices, payrollRecords } = useCrewFoundryStore();\n\n const escrowTransactions = useMemo<EscrowTransaction[]>(() => {\n return projects.slice(0, 10).map((project, index) => {\n const invoice = invoices[index % Math.max(invoices.length, 1)];\n const payroll = payrollRecords[index % Math.max(payrollRecords.length, 1)];\n const amount = Math.max(project.budget || 0, invoice?.amount || 0, 1000);\n const released = Math.min(project.spent || 0, amount);\n const completedMilestones = Math.max(0, Math.round((project.progress / 100) * 5));\n const milestones = Math.max(completedMilestones + 1, 3);\n const status: EscrowTransaction['status'] =\n released >= amount\n ? 'completed'\n : released > 0\n ? 'active'\n : payroll?.status === 'approved'\n ? 'funded'\n : 'active';\n\n return {\n id: project.id,\n project: project.name,\n provider: payroll?.employeeName || project.managerName,\n amount,\n released,\n status,\n milestones,\n completedMilestones: Math.min(completedMilestones, milestones),\n };\n });\n }, [invoices, payrollRecords, projects]);\n\n const totalEscrow = escrowTransactions.reduce((sum, transaction) => sum + transaction.amount, 0);\n const totalReleased = escrowTransactions.reduce(\n (sum, transaction) => sum + transaction.released,\n 0\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Escrow</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Secure payment holding for service contracts</p>\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\">Total in Escrow</CardTitle>\n <Lock className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">${totalEscrow.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\">Released</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\">${totalReleased.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\">Held</CardTitle>\n <ShieldCheck className=\"h-4 w-4 text-status-info-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n ${(totalEscrow - totalReleased).toLocaleString()}\n </div>\n </CardContent>\n </GlassCard>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Escrow Transactions</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {escrowTransactions.map((escrow) => {\n const progress =\n escrow.amount === 0 ? 0 : Math.round((escrow.released / escrow.amount) * 100);\n\n return (\n <div key={escrow.id} className=\"rounded border p-4\">\n <div className=\"mb-2 flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{escrow.project}</p>\n <p className=\"text-xs text-text-secondary\">{escrow.provider}</p>\n </div>\n <Badge\n variant={\n escrow.status === 'active'\n ? 'default'\n : escrow.status === 'completed'\n ? 'secondary'\n : 'outline'\n }\n className=\"text-[10px]\"\n >\n {escrow.status}\n </Badge>\n </div>\n\n <div className=\"flex items-center gap-4 text-sm\">\n <span>Total: ${escrow.amount.toLocaleString()}</span>\n <span className=\"text-status-success-text\">\n Released: ${escrow.released.toLocaleString()}\n </span>\n <span className=\"text-text-secondary\">\n Held: ${(escrow.amount - escrow.released).toLocaleString()}\n </span>\n </div>\n\n <div className=\"mt-2\">\n <div className=\"mb-1 flex justify-between text-xs\">\n <span>\n Milestones: {escrow.completedMilestones}/{escrow.milestones}\n </span>\n <span>{progress}%</span>\n </div>\n <div className=\"h-2 overflow-hidden rounded bg-bg-sunken\">\n <div\n className=\"h-2 rounded bg-status-success-text\"\n style={{ width: `${progress}%` }}\n />\n </div>\n </div>\n </div>\n );\n })}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,20 +1,20 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { Plus as t } from "lucide-react";
3
3
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
- import { Badge as i, Button as a, Card as o, CardContent as s } from "@burdenoff/fe-libs/ui";
4
+ import { Badge as i, Button as a, Card as o, CardContent as s, GradientText as c } from "@burdenoff/fe-libs/ui";
5
5
  //#region src/crewfoundry/pages/PaymentsInvoicesPagePage.tsx
6
- function c() {
7
- let { invoices: c } = e();
6
+ function l() {
7
+ let { invoices: l } = e();
8
8
  return /* @__PURE__ */ r("div", {
9
9
  className: "space-y-6 p-6",
10
10
  children: [/* @__PURE__ */ r("div", {
11
11
  className: "flex items-center justify-between",
12
12
  children: [/* @__PURE__ */ r("div", { children: [/* @__PURE__ */ n("h1", {
13
13
  className: "text-2xl font-semibold",
14
- children: "Invoices"
14
+ children: /* @__PURE__ */ n(c, { children: "Invoices" })
15
15
  }), /* @__PURE__ */ r("p", {
16
16
  className: "text-sm text-text-secondary",
17
- children: [c.length, " invoices"]
17
+ children: [l.length, " invoices"]
18
18
  })] }), /* @__PURE__ */ r(a, {
19
19
  size: "sm",
20
20
  children: [/* @__PURE__ */ n(t, { className: "h-4 w-4 mr-1" }), "Create Invoice"]
@@ -37,7 +37,7 @@ function c() {
37
37
  children: "Status"
38
38
  })
39
39
  ]
40
- }), c.map((e) => /* @__PURE__ */ r("div", {
40
+ }), l.map((e) => /* @__PURE__ */ r("div", {
41
41
  className: "grid grid-cols-6 gap-2 py-3 px-4 border-b last:border-0 text-sm hover:bg-bg-sunken/50",
42
42
  children: [
43
43
  /* @__PURE__ */ n("span", {
@@ -74,6 +74,6 @@ function c() {
74
74
  });
75
75
  }
76
76
  //#endregion
77
- export { c as PaymentsInvoicesPagePage };
77
+ export { l as PaymentsInvoicesPagePage };
78
78
 
79
79
  //# sourceMappingURL=PaymentsInvoicesPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentsInvoicesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsInvoicesPagePage.tsx"],"sourcesContent":["import { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { FileText, Plus } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function PaymentsInvoicesPagePage() {\n const { invoices } = useCrewFoundryStore();\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\">Invoices</h1>\n <p className=\"text-sm text-text-secondary\">{invoices.length} invoices</p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"h-4 w-4 mr-1\" />\n Create Invoice\n </Button>\n </div>\n <Card>\n <CardContent className=\"p-0\">\n <div className=\"grid grid-cols-6 gap-2 text-xs font-medium text-text-secondary p-4 border-b\">\n <span>Invoice #</span>\n <span>Client</span>\n <span>Items</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-6 gap-2 py-3 px-4 border-b last:border-0 text-sm hover:bg-bg-sunken/50\"\n >\n <span className=\"font-medium\">{inv.number}</span>\n <span className=\"text-text-secondary\">{inv.clientName}</span>\n <div className=\"text-xs text-text-secondary\">\n {inv.items.map((i) => i.description).join(', ')}\n </div>\n <span className=\"text-right font-medium\">${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 : inv.status === 'draft'\n ? 'outline'\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":";;;;;AAIA,SAAgB,IAA2B;CACzC,IAAM,EAAE,gBAAa,GAAqB;AAE1C,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAyB;IAAa,CAAA,EACpD,kBAAC,KAAD;IAAG,WAAU;cAAb,CAA4C,EAAS,QAAO,YAAa;MACrE,EAAA,CAAA,EACN,kBAAC,GAAD;IAAQ,MAAK;cAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,iBAE1B;MACL;MACN,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;GAAa,WAAU;aAAvB,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,QAAD,EAAA,UAAM,aAAgB,CAAA;KACtB,kBAAC,QAAD,EAAA,UAAM,UAAa,CAAA;KACnB,kBAAC,QAAD,EAAA,UAAM,SAAY,CAAA;KAClB,kBAAC,QAAD;MAAM,WAAU;gBAAa;MAAa,CAAA;KAC1C,kBAAC,QAAD,EAAA,UAAM,YAAe,CAAA;KACrB,kBAAC,QAAD;MAAM,WAAU;gBAAc;MAAa,CAAA;KACvC;OACL,EAAS,KAAK,MACb,kBAAC,OAAD;IAEE,WAAU;cAFZ;KAIE,kBAAC,QAAD;MAAM,WAAU;gBAAe,EAAI;MAAc,CAAA;KACjD,kBAAC,QAAD;MAAM,WAAU;gBAAuB,EAAI;MAAkB,CAAA;KAC7D,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAI,MAAM,KAAK,MAAM,EAAE,YAAY,CAAC,KAAK,KAAK;MAC3C,CAAA;KACN,kBAAC,QAAD;MAAM,WAAU;gBAAhB,CAAyC,KAAE,EAAI,OAAO,gBAAgB,CAAQ;;KAC9E,kBAAC,QAAD;MAAM,WAAU;gBAAuB,EAAI;MAAe,CAAA;KAC1D,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD;OACE,SACE,EAAI,WAAW,SACX,YACA,EAAI,WAAW,YACb,gBACA,EAAI,WAAW,UACb,YACA;OAEV,WAAU;iBAET,EAAI;OACC,CAAA;MACJ,CAAA;KACF;MA1BC,EAAI,GA0BL,CACN,CACU;MACT,CAAA,CACH"}
1
+ {"version":3,"file":"PaymentsInvoicesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsInvoicesPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { FileText, Plus } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function PaymentsInvoicesPagePage() {\n const { invoices } = useCrewFoundryStore();\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>Invoices</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{invoices.length} invoices</p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"h-4 w-4 mr-1\" />\n Create Invoice\n </Button>\n </div>\n <Card>\n <CardContent className=\"p-0\">\n <div className=\"grid grid-cols-6 gap-2 text-xs font-medium text-text-secondary p-4 border-b\">\n <span>Invoice #</span>\n <span>Client</span>\n <span>Items</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-6 gap-2 py-3 px-4 border-b last:border-0 text-sm hover:bg-bg-sunken/50\"\n >\n <span className=\"font-medium\">{inv.number}</span>\n <span className=\"text-text-secondary\">{inv.clientName}</span>\n <div className=\"text-xs text-text-secondary\">\n {inv.items.map((i) => i.description).join(', ')}\n </div>\n <span className=\"text-right font-medium\">${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 : inv.status === 'draft'\n ? 'outline'\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":";;;;;AAYA,SAAgB,IAA2B;CACzC,IAAM,EAAE,gBAAa,GAAqB;AAE1C,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,YAAuB,CAAA;IAClC,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cAAb,CAA4C,EAAS,QAAO,YAAa;MACrE,EAAA,CAAA,EACN,kBAAC,GAAD;IAAQ,MAAK;cAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,iBAE1B;MACL;MACN,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;GAAa,WAAU;aAAvB,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,QAAD,EAAA,UAAM,aAAgB,CAAA;KACtB,kBAAC,QAAD,EAAA,UAAM,UAAa,CAAA;KACnB,kBAAC,QAAD,EAAA,UAAM,SAAY,CAAA;KAClB,kBAAC,QAAD;MAAM,WAAU;gBAAa;MAAa,CAAA;KAC1C,kBAAC,QAAD,EAAA,UAAM,YAAe,CAAA;KACrB,kBAAC,QAAD;MAAM,WAAU;gBAAc;MAAa,CAAA;KACvC;OACL,EAAS,KAAK,MACb,kBAAC,OAAD;IAEE,WAAU;cAFZ;KAIE,kBAAC,QAAD;MAAM,WAAU;gBAAe,EAAI;MAAc,CAAA;KACjD,kBAAC,QAAD;MAAM,WAAU;gBAAuB,EAAI;MAAkB,CAAA;KAC7D,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAI,MAAM,KAAK,MAAM,EAAE,YAAY,CAAC,KAAK,KAAK;MAC3C,CAAA;KACN,kBAAC,QAAD;MAAM,WAAU;gBAAhB,CAAyC,KAAE,EAAI,OAAO,gBAAgB,CAAQ;;KAC9E,kBAAC,QAAD;MAAM,WAAU;gBAAuB,EAAI;MAAe,CAAA;KAC1D,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD;OACE,SACE,EAAI,WAAW,SACX,YACA,EAAI,WAAW,YACb,gBACA,EAAI,WAAW,UACb,YACA;OAEV,WAAU;iBAET,EAAI;OACC,CAAA;MACJ,CAAA;KACF;MA1BC,EAAI,GA0BL,CACN,CACU;MACT,CAAA,CACH"}
@@ -1,16 +1,16 @@
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 f() {
7
- let { invoices: f, payrollRecords: p } = e(), m = f.reduce((e, t) => e + t.amount, 0), h = f.filter((e) => e.status === "paid").reduce((e, t) => e + t.amount, 0), g = p.reduce((e, t) => e + t.grossPay, 0);
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
15
  className: "text-sm text-text-secondary",
16
16
  children: "Financial transactions and payment overview"
@@ -18,46 +18,62 @@ function f() {
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(c, { children: [/* @__PURE__ */ o(u, {
22
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
23
- children: [/* @__PURE__ */ a(d, {
24
- className: "text-sm font-medium",
25
- children: "Total Invoiced"
26
- }), /* @__PURE__ */ a(r, { className: "h-4 w-4 text-text-secondary" })]
27
- }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
28
- className: "text-2xl font-bold",
29
- children: ["$", m.toLocaleString()]
30
- }) })] }),
31
- /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ o(u, {
32
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
33
- children: [/* @__PURE__ */ a(d, {
34
- className: "text-sm font-medium",
35
- children: "Collected"
36
- }), /* @__PURE__ */ a(n, { className: "h-4 w-4 text-green-500" })]
37
- }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
38
- className: "text-2xl font-bold",
39
- children: ["$", h.toLocaleString()]
40
- }) })] }),
41
- /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ o(u, {
42
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
43
- children: [/* @__PURE__ */ a(d, {
44
- className: "text-sm font-medium",
45
- children: "Payroll Processed"
46
- }), /* @__PURE__ */ a(t, { className: "h-4 w-4 text-text-secondary" })]
47
- }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
48
- className: "text-2xl font-bold",
49
- children: ["$", g.toLocaleString()]
50
- }) })] }),
51
- /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ o(u, {
52
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
53
- children: [/* @__PURE__ */ a(d, {
54
- className: "text-sm font-medium",
55
- children: "Outstanding"
56
- }), /* @__PURE__ */ a(i, { className: "h-4 w-4 text-yellow-500" })]
57
- }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
58
- className: "text-2xl font-bold",
59
- children: ["$", (m - h).toLocaleString()]
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", {
@@ -75,7 +91,7 @@ function f() {
75
91
  children: "Status"
76
92
  })
77
93
  ]
78
- }), f.map((e) => /* @__PURE__ */ o("div", {
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", {
@@ -108,6 +124,6 @@ function f() {
108
124
  });
109
125
  }
110
126
  //#endregion
111
- export { f as PaymentsPaymentDashboardPagePage };
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-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 <Card>\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\">${totalInvoiced.toLocaleString()}</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\">Collected</CardTitle>\n <DollarSign className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">${totalPaid.toLocaleString()}</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\">Payroll Processed</CardTitle>\n <CreditCard className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">${totalPayroll.toLocaleString()}</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\">Outstanding</CardTitle>\n <TrendingUp className=\"h-4 w-4 text-yellow-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n ${(totalInvoiced - totalPaid).toLocaleString()}\n </div>\n </CardContent>\n </Card>\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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"}
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 d() {
8
- let { paymentMethods: d, invoices: f, payrollRecords: p, vendors: m, clients: h } = e(), g = t(() => {
9
- let e = p.slice(0, 3).map((e, t) => ({
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: m[t % Math.max(m.length, 1)]?.name || "Burdenoff 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 = f.slice(0, 4).map((t, n) => {
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: `${h[n % Math.max(h.length, 1)]?.name || "Corporate"} Card`,
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,18 +27,18 @@ function d() {
27
27
  });
28
28
  return [...e, ...t];
29
29
  }, [
30
- h,
31
- f,
30
+ g,
32
31
  p,
33
- m
34
- ]), _ = d.length > 0 ? d : g;
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
43
  className: "text-sm text-text-secondary",
44
44
  children: "Manage company payment accounts"
@@ -48,7 +48,7 @@ function d() {
48
48
  })]
49
49
  }), /* @__PURE__ */ a("div", {
50
50
  className: "grid gap-4 md:grid-cols-2",
51
- children: _.map((e) => /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o(u, {
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",
@@ -75,6 +75,6 @@ function d() {
75
75
  });
76
76
  }
77
77
  //#endregion
78
- export { d as PaymentsPaymentMethodsPagePage };
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-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;cAAyB;IAAoB,CAAA,EAC3D,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"}
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"}