@burdenoff/microfe-crewfoundry 2026.624.1 → 2026.625.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/crewfoundry/pages/AdminAdminPagePage.js +100 -76
  2. package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
  3. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +118 -94
  4. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  5. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +105 -81
  6. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
  7. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +134 -110
  8. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  9. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +121 -97
  10. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
  11. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +28 -15
  12. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  13. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +74 -54
  14. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
  15. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +87 -69
  16. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
  17. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +99 -80
  18. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
  19. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +87 -68
  20. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  21. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +31 -15
  22. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
  23. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +81 -61
  24. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
  25. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +71 -51
  26. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  27. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +82 -58
  28. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
  29. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +46 -39
  30. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
  31. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +80 -62
  32. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  33. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +104 -80
  34. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
  35. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +219 -151
  36. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  37. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +183 -142
  38. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
  39. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +121 -97
  40. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
  41. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +57 -46
  42. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
  43. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +91 -67
  44. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
  45. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +112 -93
  46. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  47. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +55 -48
  48. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  49. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +70 -50
  50. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  51. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +140 -97
  52. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/HiringJobsPagePage.js +101 -85
  54. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  55. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +68 -48
  56. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  57. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +99 -71
  58. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +97 -73
  60. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  61. package/dist/crewfoundry/pages/HrPayrollPagePage.js +100 -76
  62. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  63. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +93 -69
  64. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  65. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +65 -45
  66. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
  67. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +93 -75
  68. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +117 -72
  70. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  71. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +66 -54
  72. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
  73. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +36 -20
  74. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  75. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +90 -66
  76. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
  77. package/dist/crewfoundry/pages/LearningLearningPagePage.js +81 -57
  78. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
  79. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +90 -65
  80. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  81. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +33 -17
  82. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  83. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +83 -59
  84. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  85. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +68 -48
  86. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  87. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +80 -60
  88. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
  89. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +153 -118
  90. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
  91. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +42 -37
  92. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
  93. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +67 -47
  94. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  95. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +104 -85
  96. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
  97. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +76 -57
  98. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
  99. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +78 -60
  100. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  101. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +138 -93
  102. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
  103. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +98 -53
  104. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  105. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +69 -49
  106. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
  107. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +84 -65
  108. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  109. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +76 -52
  110. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  111. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +58 -40
  112. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
  113. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +85 -65
  114. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
  115. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +36 -29
  116. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
  117. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +108 -73
  118. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  119. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +43 -27
  120. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  121. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +67 -47
  122. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
  123. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +108 -63
  124. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
  125. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +83 -64
  126. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
  127. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +185 -144
  128. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  129. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +40 -24
  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, PagePurpose as m } 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 h() {
8
+ let { projects: h, invoices: g, payrollRecords: _ } = e(), v = t(() => h.slice(0, 10).map((e, t) => {
9
+ let n = g[t % Math.max(g.length, 1)], r = _[t % Math.max(_.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,58 +18,78 @@ 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
+ g,
22
+ _,
23
+ h
24
+ ]), y = v.reduce((e, t) => e + t.amount, 0), b = v.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
- /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
29
- className: "text-2xl font-semibold",
30
- children: "Escrow"
31
- }), /* @__PURE__ */ a("p", {
32
- className: "text-sm text-text-secondary",
33
- children: "Secure payment holding for service contracts"
34
- })] }),
28
+ /* @__PURE__ */ o("div", { children: [
29
+ /* @__PURE__ */ a("h1", {
30
+ className: "text-2xl font-semibold",
31
+ children: /* @__PURE__ */ a(p, { children: "Escrow" })
32
+ }),
33
+ /* @__PURE__ */ a("p", {
34
+ className: "text-sm text-text-secondary",
35
+ children: "Secure payment holding for service contracts"
36
+ }),
37
+ /* @__PURE__ */ a(m, {
38
+ className: "mt-1",
39
+ children: "Hold and release project funds safely in escrow — use it to protect both sides until milestones are met and work is approved."
40
+ })
41
+ ] }),
35
42
  /* @__PURE__ */ o("div", {
36
43
  className: "grid gap-4 md:grid-cols-3",
37
44
  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
- }) })] })
45
+ /* @__PURE__ */ o(f, {
46
+ treatment: "glass",
47
+ glow: !0,
48
+ className: "border-border-seam",
49
+ children: [/* @__PURE__ */ o(u, {
50
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
51
+ children: [/* @__PURE__ */ a(d, {
52
+ className: "text-sm font-medium",
53
+ children: "Total in Escrow"
54
+ }), /* @__PURE__ */ a(r, { className: "h-4 w-4 text-text-secondary" })]
55
+ }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
56
+ className: "text-2xl font-bold tabular-nums",
57
+ children: ["$", y.toLocaleString()]
58
+ }) })]
59
+ }),
60
+ /* @__PURE__ */ o(f, {
61
+ treatment: "metric",
62
+ className: "border-border-seam",
63
+ children: [/* @__PURE__ */ o(u, {
64
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
65
+ children: [/* @__PURE__ */ a(d, {
66
+ className: "text-sm font-medium",
67
+ children: "Released"
68
+ }), /* @__PURE__ */ a(n, { className: "h-4 w-4 text-status-success-text" })]
69
+ }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
70
+ className: "text-2xl font-bold tabular-nums",
71
+ children: ["$", b.toLocaleString()]
72
+ }) })]
73
+ }),
74
+ /* @__PURE__ */ o(f, {
75
+ treatment: "metric",
76
+ className: "border-border-seam",
77
+ children: [/* @__PURE__ */ o(u, {
78
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
79
+ children: [/* @__PURE__ */ a(d, {
80
+ className: "text-sm font-medium",
81
+ children: "Held"
82
+ }), /* @__PURE__ */ a(i, { className: "h-4 w-4 text-status-info-text" })]
83
+ }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
84
+ className: "text-2xl font-bold tabular-nums",
85
+ children: ["$", (y - b).toLocaleString()]
86
+ }) })]
87
+ })
68
88
  ]
69
89
  }),
70
90
  /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, { children: "Escrow Transactions" }) }), /* @__PURE__ */ a(l, {
71
91
  className: "space-y-3",
72
- children: h.map((e) => {
92
+ children: v.map((e) => {
73
93
  let t = e.amount === 0 ? 0 : Math.round(e.released / e.amount * 100);
74
94
  return /* @__PURE__ */ o("div", {
75
95
  className: "rounded border p-4",
@@ -93,7 +113,7 @@ function f() {
93
113
  children: [
94
114
  /* @__PURE__ */ o("span", { children: ["Total: $", e.amount.toLocaleString()] }),
95
115
  /* @__PURE__ */ o("span", {
96
- className: "text-green-600",
116
+ className: "text-status-success-text",
97
117
  children: ["Released: $", e.released.toLocaleString()]
98
118
  }),
99
119
  /* @__PURE__ */ o("span", {
@@ -115,7 +135,7 @@ function f() {
115
135
  }), /* @__PURE__ */ a("div", {
116
136
  className: "h-2 overflow-hidden rounded bg-bg-sunken",
117
137
  children: /* @__PURE__ */ a("div", {
118
- className: "h-2 rounded bg-green-500",
138
+ className: "h-2 rounded bg-status-success-text",
119
139
  style: { width: `${t}%` }
120
140
  })
121
141
  })]
@@ -128,6 +148,6 @@ function f() {
128
148
  });
129
149
  }
130
150
  //#endregion
131
- export { f as PaymentsEscrowPagePage };
151
+ export { h as PaymentsEscrowPagePage };
132
152
 
133
153
  //# 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 PagePurpose,\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 <PagePurpose className=\"mt-1\">Hold and release project funds safely in escrow — use it to protect both sides until milestones are met and work is approved.</PagePurpose>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n <GlassCard treatment=\"glass\" glow 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,79 +1,98 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { Plus as t } from "lucide-react";
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";
3
+ import { Fragment as n, jsx as r, jsxs as i } from "react/jsx-runtime";
4
+ import { Badge as a, Button as o, CardContent as s, GlassCard as c, GradientText as l, IllustratedEmptyState as u, PagePurpose as d } from "@burdenoff/fe-libs/ui";
5
5
  //#region src/crewfoundry/pages/PaymentsInvoicesPagePage.tsx
6
- function c() {
7
- let { invoices: c } = e();
8
- return /* @__PURE__ */ r("div", {
6
+ function f() {
7
+ let { invoices: f } = e();
8
+ return /* @__PURE__ */ i("div", {
9
9
  className: "space-y-6 p-6",
10
- children: [/* @__PURE__ */ r("div", {
10
+ children: [/* @__PURE__ */ i("div", {
11
11
  className: "flex items-center justify-between",
12
- children: [/* @__PURE__ */ r("div", { children: [/* @__PURE__ */ n("h1", {
13
- className: "text-2xl font-semibold",
14
- children: "Invoices"
15
- }), /* @__PURE__ */ r("p", {
16
- className: "text-sm text-text-secondary",
17
- children: [c.length, " invoices"]
18
- })] }), /* @__PURE__ */ r(a, {
12
+ children: [/* @__PURE__ */ i("div", { children: [
13
+ /* @__PURE__ */ r("h1", {
14
+ className: "text-2xl font-semibold",
15
+ children: /* @__PURE__ */ r(l, { children: "Invoices" })
16
+ }),
17
+ /* @__PURE__ */ i("p", {
18
+ className: "text-sm text-text-secondary",
19
+ children: [f.length, " invoices"]
20
+ }),
21
+ /* @__PURE__ */ r(d, {
22
+ className: "mt-1",
23
+ children: "Create, send, and track invoices — see what's paid, pending, or overdue so you stay on top of getting paid."
24
+ })
25
+ ] }), /* @__PURE__ */ i(o, {
19
26
  size: "sm",
20
- children: [/* @__PURE__ */ n(t, { className: "h-4 w-4 mr-1" }), "Create Invoice"]
27
+ children: [/* @__PURE__ */ r(t, { className: "h-4 w-4 mr-1" }), "Create Invoice"]
21
28
  })]
22
- }), /* @__PURE__ */ n(o, { children: /* @__PURE__ */ r(s, {
23
- className: "p-0",
24
- children: [/* @__PURE__ */ r("div", {
25
- className: "grid grid-cols-6 gap-2 text-xs font-medium text-text-secondary p-4 border-b",
26
- children: [
27
- /* @__PURE__ */ n("span", { children: "Invoice #" }),
28
- /* @__PURE__ */ n("span", { children: "Client" }),
29
- /* @__PURE__ */ n("span", { children: "Items" }),
30
- /* @__PURE__ */ n("span", {
31
- className: "text-right",
32
- children: "Amount"
33
- }),
34
- /* @__PURE__ */ n("span", { children: "Due Date" }),
35
- /* @__PURE__ */ n("span", {
36
- className: "text-center",
37
- children: "Status"
29
+ }), /* @__PURE__ */ r(c, {
30
+ treatment: "glass",
31
+ glow: !0,
32
+ className: "border-border-seam",
33
+ children: /* @__PURE__ */ r(s, {
34
+ className: "p-0",
35
+ children: f.length === 0 ? /* @__PURE__ */ r("div", {
36
+ className: "p-6",
37
+ children: /* @__PURE__ */ r(u, {
38
+ illustration: "empty-data",
39
+ title: "No invoices yet",
40
+ description: "Create your first invoice to start getting paid."
38
41
  })
39
- ]
40
- }), c.map((e) => /* @__PURE__ */ r("div", {
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
- children: [
43
- /* @__PURE__ */ n("span", {
44
- className: "font-medium",
45
- children: e.number
46
- }),
47
- /* @__PURE__ */ n("span", {
48
- className: "text-text-secondary",
49
- children: e.clientName
50
- }),
51
- /* @__PURE__ */ n("div", {
52
- className: "text-xs text-text-secondary",
53
- children: e.items.map((e) => e.description).join(", ")
54
- }),
55
- /* @__PURE__ */ r("span", {
56
- className: "text-right font-medium",
57
- children: ["$", e.amount.toLocaleString()]
58
- }),
59
- /* @__PURE__ */ n("span", {
60
- className: "text-text-secondary",
61
- children: e.dueDate
62
- }),
63
- /* @__PURE__ */ n("div", {
64
- className: "text-center",
65
- children: /* @__PURE__ */ n(i, {
66
- variant: e.status === "paid" ? "default" : e.status === "overdue" ? "destructive" : e.status === "draft" ? "outline" : "secondary",
67
- className: "text-[10px]",
68
- children: e.status
42
+ }) : /* @__PURE__ */ i(n, { children: [/* @__PURE__ */ i("div", {
43
+ className: "grid grid-cols-6 gap-2 text-xs font-medium text-text-secondary p-4 border-b",
44
+ children: [
45
+ /* @__PURE__ */ r("span", { children: "Invoice #" }),
46
+ /* @__PURE__ */ r("span", { children: "Client" }),
47
+ /* @__PURE__ */ r("span", { children: "Items" }),
48
+ /* @__PURE__ */ r("span", {
49
+ className: "text-right",
50
+ children: "Amount"
51
+ }),
52
+ /* @__PURE__ */ r("span", { children: "Due Date" }),
53
+ /* @__PURE__ */ r("span", {
54
+ className: "text-center",
55
+ children: "Status"
69
56
  })
70
- })
71
- ]
72
- }, e.id))]
73
- }) })]
57
+ ]
58
+ }), f.map((e) => /* @__PURE__ */ i("div", {
59
+ className: "grid grid-cols-6 gap-2 py-3 px-4 border-b last:border-0 text-sm hover:bg-bg-sunken/50",
60
+ children: [
61
+ /* @__PURE__ */ r("span", {
62
+ className: "font-medium",
63
+ children: e.number
64
+ }),
65
+ /* @__PURE__ */ r("span", {
66
+ className: "text-text-secondary",
67
+ children: e.clientName
68
+ }),
69
+ /* @__PURE__ */ r("div", {
70
+ className: "text-xs text-text-secondary",
71
+ children: e.items.map((e) => e.description).join(", ")
72
+ }),
73
+ /* @__PURE__ */ i("span", {
74
+ className: "text-right font-medium",
75
+ children: ["$", e.amount.toLocaleString()]
76
+ }),
77
+ /* @__PURE__ */ r("span", {
78
+ className: "text-text-secondary",
79
+ children: e.dueDate
80
+ }),
81
+ /* @__PURE__ */ r("div", {
82
+ className: "text-center",
83
+ children: /* @__PURE__ */ r(a, {
84
+ variant: e.status === "paid" ? "default" : e.status === "overdue" ? "destructive" : e.status === "draft" ? "outline" : "secondary",
85
+ className: "text-[10px]",
86
+ children: e.status
87
+ })
88
+ })
89
+ ]
90
+ }, e.id))] })
91
+ })
92
+ })]
74
93
  });
75
94
  }
76
95
  //#endregion
77
- export { c as PaymentsInvoicesPagePage };
96
+ export { f as PaymentsInvoicesPagePage };
78
97
 
79
98
  //# 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 CardContent,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n PagePurpose,\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 <PagePurpose className=\"mt-1\">Create, send, and track invoices — see what&apos;s paid, pending, or overdue so you stay on top of getting paid.</PagePurpose>\n </div>\n <Button size=\"sm\">\n <Plus className=\"h-4 w-4 mr-1\" />\n Create Invoice\n </Button>\n </div>\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardContent className=\"p-0\">\n {invoices.length === 0 ? (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No invoices yet\"\n description=\"Create your first invoice to start getting paid.\"\n />\n </div>\n ) : (\n <>\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 </>\n )}\n </CardContent>\n </GlassCard>\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;IACE,kBAAC,MAAD;KAAI,WAAU;eACZ,kBAAC,GAAD,EAAA,UAAc,YAAuB,CAAA;KAClC,CAAA;IACL,kBAAC,KAAD;KAAG,WAAU;eAAb,CAA4C,EAAS,QAAO,YAAa;;IACzE,kBAAC,GAAD;KAAa,WAAU;eAAO;KAA8H,CAAA;IACxJ,EAAA,CAAA,EACN,kBAAC,GAAD;IAAQ,MAAK;cAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,iBAE1B;MACL;MACN,kBAAC,GAAD;GAAW,WAAU;GAAQ,MAAA;GAAK,WAAU;aAC1C,kBAAC,GAAD;IAAa,WAAU;cACpB,EAAS,WAAW,IACnB,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD;MACE,cAAa;MACb,OAAM;MACN,aAAY;MACZ,CAAA;KACE,CAAA,GAEN,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,QAAD,EAAA,UAAM,aAAgB,CAAA;MACtB,kBAAC,QAAD,EAAA,UAAM,UAAa,CAAA;MACnB,kBAAC,QAAD,EAAA,UAAM,SAAY,CAAA;MAClB,kBAAC,QAAD;OAAM,WAAU;iBAAa;OAAa,CAAA;MAC1C,kBAAC,QAAD,EAAA,UAAM,YAAe,CAAA;MACrB,kBAAC,QAAD;OAAM,WAAU;iBAAc;OAAa,CAAA;MACvC;QACL,EAAS,KAAK,MACjB,kBAAC,OAAD;KAEE,WAAU;eAFZ;MAIE,kBAAC,QAAD;OAAM,WAAU;iBAAe,EAAI;OAAc,CAAA;MACjD,kBAAC,QAAD;OAAM,WAAU;iBAAuB,EAAI;OAAkB,CAAA;MAC7D,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAI,MAAM,KAAK,MAAM,EAAE,YAAY,CAAC,KAAK,KAAK;OAC3C,CAAA;MACN,kBAAC,QAAD;OAAM,WAAU;iBAAhB,CAAyC,KAAE,EAAI,OAAO,gBAAgB,CAAQ;;MAC9E,kBAAC,QAAD;OAAM,WAAU;iBAAuB,EAAI;OAAe,CAAA;MAC1D,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,GAAD;QACE,SACE,EAAI,WAAW,SACX,YACA,EAAI,WAAW,YACb,gBACA,EAAI,WAAW,UACb,YACA;QAEV,WAAU;kBAET,EAAI;QACC,CAAA;OACJ,CAAA;MACF;OA1BC,EAAI,GA0BL,CACF,CACD,EAAA,CAAA;IAEO,CAAA;GACJ,CAAA,CACR"}
@@ -1,63 +1,87 @@
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, PagePurpose as m } 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 h() {
7
+ let { invoices: h, payrollRecords: g } = e(), _ = h.reduce((e, t) => e + t.amount, 0), v = h.filter((e) => e.status === "paid").reduce((e, t) => e + t.amount, 0), y = g.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
- /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
12
- className: "text-2xl font-semibold",
13
- children: "Payment Dashboard"
14
- }), /* @__PURE__ */ a("p", {
15
- className: "text-sm text-text-secondary",
16
- children: "Financial transactions and payment overview"
17
- })] }),
11
+ /* @__PURE__ */ o("div", { children: [
12
+ /* @__PURE__ */ a("h1", {
13
+ className: "text-2xl font-semibold",
14
+ children: /* @__PURE__ */ a(p, { children: "Payment Dashboard" })
15
+ }),
16
+ /* @__PURE__ */ a("p", {
17
+ className: "text-sm text-text-secondary",
18
+ children: "Financial transactions and payment overview"
19
+ }),
20
+ /* @__PURE__ */ a(m, {
21
+ className: "mt-1",
22
+ children: "A snapshot of all money movement — incoming payments, payouts, and balances so you understand your financial position at a glance."
23
+ })
24
+ ] }),
18
25
  /* @__PURE__ */ o("div", {
19
26
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
20
27
  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
- }) })] })
28
+ /* @__PURE__ */ o(f, {
29
+ treatment: "glass",
30
+ glow: !0,
31
+ className: "border-border-seam",
32
+ children: [/* @__PURE__ */ o(u, {
33
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
34
+ children: [/* @__PURE__ */ a(d, {
35
+ className: "text-sm font-medium",
36
+ children: "Total Invoiced"
37
+ }), /* @__PURE__ */ a(r, { className: "h-4 w-4 text-text-secondary" })]
38
+ }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
39
+ className: "text-2xl font-bold tabular-nums",
40
+ children: ["$", _.toLocaleString()]
41
+ }) })]
42
+ }),
43
+ /* @__PURE__ */ o(f, {
44
+ treatment: "metric",
45
+ className: "border-border-seam",
46
+ children: [/* @__PURE__ */ o(u, {
47
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
48
+ children: [/* @__PURE__ */ a(d, {
49
+ className: "text-sm font-medium",
50
+ children: "Collected"
51
+ }), /* @__PURE__ */ a(n, { className: "h-4 w-4 text-status-success-text" })]
52
+ }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
53
+ className: "text-2xl font-bold tabular-nums",
54
+ children: ["$", v.toLocaleString()]
55
+ }) })]
56
+ }),
57
+ /* @__PURE__ */ o(f, {
58
+ treatment: "metric",
59
+ className: "border-border-seam",
60
+ children: [/* @__PURE__ */ o(u, {
61
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
62
+ children: [/* @__PURE__ */ a(d, {
63
+ className: "text-sm font-medium",
64
+ children: "Payroll Processed"
65
+ }), /* @__PURE__ */ a(t, { className: "h-4 w-4 text-text-secondary" })]
66
+ }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
67
+ className: "text-2xl font-bold tabular-nums",
68
+ children: ["$", y.toLocaleString()]
69
+ }) })]
70
+ }),
71
+ /* @__PURE__ */ o(f, {
72
+ treatment: "metric",
73
+ className: "border-border-seam",
74
+ children: [/* @__PURE__ */ o(u, {
75
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
76
+ children: [/* @__PURE__ */ a(d, {
77
+ className: "text-sm font-medium",
78
+ children: "Outstanding"
79
+ }), /* @__PURE__ */ a(i, { className: "h-4 w-4 text-status-warning-text" })]
80
+ }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
81
+ className: "text-2xl font-bold tabular-nums",
82
+ children: ["$", (_ - v).toLocaleString()]
83
+ }) })]
84
+ })
61
85
  ]
62
86
  }),
63
87
  /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, { children: "Recent Invoices" }) }), /* @__PURE__ */ o(l, { children: [/* @__PURE__ */ o("div", {
@@ -75,7 +99,7 @@ function f() {
75
99
  children: "Status"
76
100
  })
77
101
  ]
78
- }), f.map((e) => /* @__PURE__ */ o("div", {
102
+ }), h.map((e) => /* @__PURE__ */ o("div", {
79
103
  className: "grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm",
80
104
  children: [
81
105
  /* @__PURE__ */ a("span", {
@@ -108,6 +132,6 @@ function f() {
108
132
  });
109
133
  }
110
134
  //#endregion
111
- export { f as PaymentsPaymentDashboardPagePage };
135
+ export { h as PaymentsPaymentDashboardPagePage };
112
136
 
113
137
  //# sourceMappingURL=PaymentsPaymentDashboardPagePage.js.map