@burdenoff/microfe-crewfoundry 2026.1013.2 → 2026.1029.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 (198) hide show
  1. package/dist/crewfoundry/CrewFoundryRoot.d.ts.map +1 -1
  2. package/dist/crewfoundry/CrewFoundryRoot.js +160 -256
  3. package/dist/crewfoundry/CrewFoundryRoot.js.map +1 -1
  4. package/dist/crewfoundry/CrewFoundryRoutes.d.ts.map +1 -1
  5. package/dist/crewfoundry/CrewFoundryRoutes.js +152 -192
  6. package/dist/crewfoundry/CrewFoundryRoutes.js.map +1 -1
  7. package/dist/crewfoundry/components/InlineError.d.ts +5 -0
  8. package/dist/crewfoundry/components/InlineError.d.ts.map +1 -0
  9. package/dist/crewfoundry/components/InlineError.js +17 -0
  10. package/dist/crewfoundry/components/InlineError.js.map +1 -0
  11. package/dist/crewfoundry/components/marketplace/BookServiceModal.d.ts +14 -0
  12. package/dist/crewfoundry/components/marketplace/BookServiceModal.d.ts.map +1 -0
  13. package/dist/crewfoundry/components/marketplace/BookServiceModal.js +75 -0
  14. package/dist/crewfoundry/components/marketplace/BookServiceModal.js.map +1 -0
  15. package/dist/crewfoundry/components/marketplace/MarketplaceTabs.d.ts +24 -0
  16. package/dist/crewfoundry/components/marketplace/MarketplaceTabs.d.ts.map +1 -0
  17. package/dist/crewfoundry/components/marketplace/MarketplaceTabs.js +47 -0
  18. package/dist/crewfoundry/components/marketplace/MarketplaceTabs.js.map +1 -0
  19. package/dist/crewfoundry/components/marketplace/ServiceListingModal.d.ts +12 -0
  20. package/dist/crewfoundry/components/marketplace/ServiceListingModal.d.ts.map +1 -0
  21. package/dist/crewfoundry/components/marketplace/ServiceListingModal.js +123 -0
  22. package/dist/crewfoundry/components/marketplace/ServiceListingModal.js.map +1 -0
  23. package/dist/crewfoundry/components/viz/CertificateCard.js +4 -118
  24. package/dist/crewfoundry/components/viz/PathSteps.js +3 -68
  25. package/dist/crewfoundry/components/viz/lib/geometry.js +5 -13
  26. package/dist/crewfoundry/components/viz/lib/geometry.js.map +1 -1
  27. package/dist/crewfoundry/lib/analytics.d.ts +1 -6
  28. package/dist/crewfoundry/lib/analytics.d.ts.map +1 -1
  29. package/dist/crewfoundry/lib/analytics.js +3 -18
  30. package/dist/crewfoundry/lib/analytics.js.map +1 -1
  31. package/dist/crewfoundry/lib/companyFinance.d.ts +3 -7
  32. package/dist/crewfoundry/lib/companyFinance.d.ts.map +1 -1
  33. package/dist/crewfoundry/lib/companyFinance.js +3 -8
  34. package/dist/crewfoundry/lib/companyFinance.js.map +1 -1
  35. package/dist/crewfoundry/lib/learning.d.ts +12 -0
  36. package/dist/crewfoundry/lib/learning.d.ts.map +1 -0
  37. package/dist/crewfoundry/lib/learning.js +26 -0
  38. package/dist/crewfoundry/lib/learning.js.map +1 -0
  39. package/dist/crewfoundry/lib/marketplace.d.ts +30 -0
  40. package/dist/crewfoundry/lib/marketplace.d.ts.map +1 -0
  41. package/dist/crewfoundry/lib/marketplace.js +91 -0
  42. package/dist/crewfoundry/lib/marketplace.js.map +1 -0
  43. package/dist/crewfoundry/lib/useEnsureLoaded.d.ts +7 -0
  44. package/dist/crewfoundry/lib/useEnsureLoaded.d.ts.map +1 -0
  45. package/dist/crewfoundry/lib/useEnsureLoaded.js +25 -0
  46. package/dist/crewfoundry/lib/useEnsureLoaded.js.map +1 -0
  47. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.d.ts.map +1 -1
  48. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +12 -25
  49. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  50. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.d.ts.map +1 -1
  51. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +145 -157
  52. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.d.ts.map +1 -1
  54. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +14 -14
  55. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  56. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.d.ts.map +1 -1
  57. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +14 -14
  58. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.d.ts.map +1 -1
  60. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +71 -33
  61. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
  62. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.d.ts.map +1 -1
  63. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +247 -173
  64. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  65. package/dist/crewfoundry/pages/LearningCoursesPagePage.d.ts +12 -0
  66. package/dist/crewfoundry/pages/LearningCoursesPagePage.d.ts.map +1 -1
  67. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +307 -293
  68. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/LearningEnrollmentsPagePage.d.ts +2 -0
  70. package/dist/crewfoundry/pages/LearningEnrollmentsPagePage.d.ts.map +1 -0
  71. package/dist/crewfoundry/pages/LearningEnrollmentsPagePage.js +223 -0
  72. package/dist/crewfoundry/pages/LearningEnrollmentsPagePage.js.map +1 -0
  73. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.d.ts +4 -0
  74. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.d.ts.map +1 -1
  75. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +115 -160
  76. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
  77. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.d.ts.map +1 -1
  78. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +165 -75
  79. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  80. package/dist/crewfoundry/pages/MarketplaceEscrowPagePage.d.ts +7 -0
  81. package/dist/crewfoundry/pages/MarketplaceEscrowPagePage.d.ts.map +1 -0
  82. package/dist/crewfoundry/pages/MarketplaceEscrowPagePage.js +175 -0
  83. package/dist/crewfoundry/pages/MarketplaceEscrowPagePage.js.map +1 -0
  84. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.d.ts.map +1 -1
  85. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +182 -223
  86. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  87. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.d.ts.map +1 -1
  88. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +168 -227
  89. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  90. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.d.ts.map +1 -1
  91. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +127 -290
  92. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  93. package/dist/crewfoundry/store/crewfoundryStore.d.ts +138 -78
  94. package/dist/crewfoundry/store/crewfoundryStore.d.ts.map +1 -1
  95. package/dist/crewfoundry/store/crewfoundryStore.js +323 -244
  96. package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
  97. package/dist/crewfoundry/utils/dateUtils.d.ts +5 -0
  98. package/dist/crewfoundry/utils/dateUtils.d.ts.map +1 -1
  99. package/dist/crewfoundry/utils/dateUtils.js +10 -1
  100. package/dist/crewfoundry/utils/dateUtils.js.map +1 -1
  101. package/dist/generated/global-types.d.ts +5145 -1627
  102. package/dist/generated/global-types.d.ts.map +1 -1
  103. package/dist/generated/wspace-types.d.ts +100373 -34602
  104. package/dist/generated/wspace-types.d.ts.map +1 -1
  105. package/dist/utils/pageContext.d.ts.map +1 -1
  106. package/dist/utils/pageContext.js +0 -1
  107. package/dist/utils/pageContext.js.map +1 -1
  108. package/package.json +1 -1
  109. package/dist/crewfoundry/components/viz/CertificateCard.js.map +0 -1
  110. package/dist/crewfoundry/components/viz/PathSteps.js.map +0 -1
  111. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.d.ts +0 -2
  112. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.d.ts.map +0 -1
  113. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +0 -53
  114. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +0 -1
  115. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.d.ts +0 -2
  116. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.d.ts.map +0 -1
  117. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +0 -107
  118. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +0 -1
  119. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.d.ts +0 -2
  120. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.d.ts.map +0 -1
  121. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +0 -62
  122. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +0 -1
  123. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.d.ts +0 -2
  124. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.d.ts.map +0 -1
  125. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +0 -37
  126. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +0 -1
  127. package/dist/crewfoundry/pages/LearningCertificatesPagePage.d.ts +0 -2
  128. package/dist/crewfoundry/pages/LearningCertificatesPagePage.d.ts.map +0 -1
  129. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +0 -111
  130. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +0 -1
  131. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.d.ts +0 -2
  132. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.d.ts.map +0 -1
  133. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +0 -309
  134. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +0 -1
  135. package/dist/crewfoundry/pages/LearningLearningPagePage.d.ts +0 -2
  136. package/dist/crewfoundry/pages/LearningLearningPagePage.d.ts.map +0 -1
  137. package/dist/crewfoundry/pages/LearningLearningPagePage.js +0 -200
  138. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +0 -1
  139. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.d.ts +0 -2
  140. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.d.ts.map +0 -1
  141. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +0 -190
  142. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +0 -1
  143. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.d.ts +0 -2
  144. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.d.ts.map +0 -1
  145. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +0 -230
  146. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +0 -1
  147. package/dist/crewfoundry/pages/LearningMyLearningPagePage.d.ts +0 -2
  148. package/dist/crewfoundry/pages/LearningMyLearningPagePage.d.ts.map +0 -1
  149. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +0 -293
  150. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +0 -1
  151. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.d.ts +0 -2
  152. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.d.ts.map +0 -1
  153. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +0 -163
  154. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +0 -1
  155. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.d.ts +0 -2
  156. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.d.ts.map +0 -1
  157. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +0 -365
  158. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +0 -1
  159. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.d.ts +0 -2
  160. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.d.ts.map +0 -1
  161. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +0 -224
  162. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +0 -1
  163. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.d.ts +0 -2
  164. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.d.ts.map +0 -1
  165. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +0 -180
  166. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +0 -1
  167. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.d.ts +0 -2
  168. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.d.ts.map +0 -1
  169. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +0 -38
  170. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +0 -1
  171. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.d.ts +0 -2
  172. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.d.ts.map +0 -1
  173. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +0 -204
  174. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +0 -1
  175. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.d.ts +0 -2
  176. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.d.ts.map +0 -1
  177. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +0 -55
  178. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +0 -1
  179. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.d.ts +0 -2
  180. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.d.ts.map +0 -1
  181. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +0 -335
  182. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +0 -1
  183. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.d.ts +0 -2
  184. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.d.ts.map +0 -1
  185. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +0 -160
  186. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +0 -1
  187. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.d.ts +0 -2
  188. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.d.ts.map +0 -1
  189. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +0 -80
  190. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +0 -1
  191. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.d.ts +0 -2
  192. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.d.ts.map +0 -1
  193. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +0 -191
  194. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +0 -1
  195. package/dist/crewfoundry/utils/courseProgress.d.ts +0 -33
  196. package/dist/crewfoundry/utils/courseProgress.d.ts.map +0 -1
  197. package/dist/crewfoundry/utils/courseProgress.js +0 -46
  198. package/dist/crewfoundry/utils/courseProgress.js.map +0 -1
@@ -1,335 +0,0 @@
1
- import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
- import { formatEnumLabel as t } from "../utils/formatEnumLabel.js";
3
- import { AreaChart as n } from "../components/viz/AreaChart.js";
4
- import { StatCard as r } from "../components/viz/StatCard.js";
5
- import "../components/viz/index.js";
6
- import { revenueTrend as i } from "../lib/analytics.js";
7
- import { FormModal as ee, useFormModal as a } from "../components/forms/FormModal.js";
8
- import { useState as o } from "react";
9
- import { CheckCircle2 as s, MoreHorizontal as c, Pencil as l, Plus as u, Trash2 as d } from "lucide-react";
10
- import { jsx as f, jsxs as p } from "react/jsx-runtime";
11
- import { AlertDialog as m, AlertDialogAction as te, AlertDialogCancel as ne, AlertDialogContent as re, AlertDialogDescription as h, AlertDialogFooter as g, AlertDialogHeader as _, AlertDialogTitle as v, Badge as ie, Button as y, CardContent as ae, CardHeader as oe, CardTitle as b, DropdownMenu as x, DropdownMenuContent as S, DropdownMenuItem as C, DropdownMenuSeparator as w, DropdownMenuTrigger as T, GlassCard as E, GradientText as D, IllustratedEmptyState as O, PagePurpose as k, Pagination as A, ResponsiveTable as j } from "@burdenoff/fe-libs/ui";
12
- import { usePagination as M } from "@burdenoff/fe-libs/shared/hooks";
13
- //#region src/crewfoundry/pages/PaymentsInvoicesPagePage.tsx
14
- var N = [
15
- {
16
- name: "number",
17
- label: "Invoice number",
18
- type: "text",
19
- required: !0,
20
- placeholder: "INV-0001"
21
- },
22
- {
23
- name: "clientName",
24
- label: "Client name",
25
- type: "text",
26
- required: !0
27
- },
28
- {
29
- name: "amount",
30
- label: "Amount (USD)",
31
- type: "number",
32
- required: !0
33
- },
34
- {
35
- name: "status",
36
- label: "Status",
37
- type: "select",
38
- options: [
39
- {
40
- label: "Draft",
41
- value: "draft"
42
- },
43
- {
44
- label: "Sent",
45
- value: "sent"
46
- },
47
- {
48
- label: "Paid",
49
- value: "paid"
50
- },
51
- {
52
- label: "Overdue",
53
- value: "overdue"
54
- },
55
- {
56
- label: "Cancelled",
57
- value: "cancelled"
58
- }
59
- ]
60
- },
61
- {
62
- name: "issueDate",
63
- label: "Issue date",
64
- type: "date",
65
- required: !0
66
- },
67
- {
68
- name: "dueDate",
69
- label: "Due date",
70
- type: "date"
71
- },
72
- {
73
- name: "lineItem",
74
- label: "Line item description",
75
- type: "text",
76
- colSpan: 2,
77
- placeholder: "e.g. Consulting services"
78
- }
79
- ], P = (e) => ({
80
- number: e.number,
81
- clientName: e.clientName,
82
- amount: e.amount,
83
- status: e.status,
84
- issueDate: e.issueDate ? e.issueDate.slice(0, 10) : "",
85
- dueDate: e.dueDate ? e.dueDate.slice(0, 10) : "",
86
- lineItem: e.items[0]?.description ?? ""
87
- }), F = (e, t) => {
88
- let n = typeof e.amount == "number" ? e.amount : Number(e.amount) || 0, r = String(e.lineItem ?? "").trim() || "Services rendered";
89
- return {
90
- id: t?.id ?? crypto.randomUUID(),
91
- number: String(e.number ?? ""),
92
- clientName: String(e.clientName ?? ""),
93
- amount: n,
94
- status: e.status || "draft",
95
- issueDate: String(e.issueDate ?? ""),
96
- dueDate: String(e.dueDate ?? ""),
97
- items: [{
98
- description: r,
99
- amount: n
100
- }]
101
- };
102
- }, I = (e) => e === "paid" ? "default" : e === "overdue" ? "destructive" : e === "draft" ? "outline" : "secondary", L = (e) => `$${Math.round(e).toLocaleString()}`;
103
- function R() {
104
- let { invoices: R, addInvoice: se, updateInvoice: z, removeInvoice: B } = e(), V = a(), { page: H, pageSize: U, offset: W, setPage: G } = M({ initialPageSize: 25 }), [K, q] = o(null), [J, Y] = o(!1), X = [...R].sort((e, t) => (t.issueDate ?? "").localeCompare(e.issueDate ?? "")), ce = X.slice(W, W + U), Z = R.filter((e) => e.status !== "cancelled").reduce((e, t) => e + t.amount, 0), Q = R.filter((e) => e.status === "paid").reduce((e, t) => e + t.amount, 0), le = R.filter((e) => e.status === "overdue").reduce((e, t) => e + t.amount, 0), ue = Math.max(Z - Q, 0), $ = i(R), de = async (e) => {
105
- V.context ? await z(V.context.id, F(e, V.context)) : await se(F(e));
106
- }, fe = async () => {
107
- if (K) {
108
- Y(!0);
109
- try {
110
- await B(K.id), q(null);
111
- } finally {
112
- Y(!1);
113
- }
114
- }
115
- };
116
- return /* @__PURE__ */ p("div", {
117
- className: "space-y-6 p-6",
118
- children: [
119
- /* @__PURE__ */ p("div", {
120
- className: "flex items-center justify-between",
121
- children: [/* @__PURE__ */ p("div", { children: [
122
- /* @__PURE__ */ f("h1", {
123
- className: "text-2xl font-semibold",
124
- children: /* @__PURE__ */ f(D, { children: "Invoices" })
125
- }),
126
- /* @__PURE__ */ p("p", {
127
- className: "text-sm text-text-secondary",
128
- children: [R.length, " invoices"]
129
- }),
130
- /* @__PURE__ */ f(k, {
131
- className: "mt-1",
132
- children: "Create, send, and track invoices — see what's paid, pending, or overdue so you stay on top of getting paid."
133
- })
134
- ] }), /* @__PURE__ */ p(y, {
135
- size: "sm",
136
- onClick: () => V.openModal(),
137
- children: [/* @__PURE__ */ f(u, { className: "h-4 w-4 mr-1" }), "Create Invoice"]
138
- })]
139
- }),
140
- /* @__PURE__ */ p("div", {
141
- className: "grid gap-4 sm:grid-cols-2 xl:grid-cols-5",
142
- children: [
143
- /* @__PURE__ */ f(r, {
144
- label: "Total Billed",
145
- value: L(Z)
146
- }),
147
- /* @__PURE__ */ f(r, {
148
- label: "Paid",
149
- value: L(Q)
150
- }),
151
- /* @__PURE__ */ f(r, {
152
- label: "Outstanding",
153
- value: L(ue)
154
- }),
155
- /* @__PURE__ */ f(r, {
156
- label: "Overdue",
157
- value: /* @__PURE__ */ f("span", {
158
- className: "text-status-error-text",
159
- children: L(le)
160
- })
161
- }),
162
- /* @__PURE__ */ p("div", {
163
- className: "flex flex-col gap-2 rounded-[var(--radius-card)] border border-border-subtle bg-bg-surface p-5 shadow-elevation-1 sm:col-span-2 xl:col-span-1",
164
- children: [/* @__PURE__ */ f("span", {
165
- className: "text-sm font-medium text-text-secondary",
166
- children: "Revenue trend"
167
- }), $.length > 1 ? /* @__PURE__ */ f(n, {
168
- series: $,
169
- height: 96,
170
- valueFormatter: (e) => L(e),
171
- title: "Recognised revenue from paid invoices by month"
172
- }) : /* @__PURE__ */ f("p", {
173
- className: "flex flex-1 items-center text-xs text-text-muted",
174
- children: "Revenue trend appears once paid invoices span more than one month."
175
- })]
176
- })
177
- ]
178
- }),
179
- /* @__PURE__ */ p(E, {
180
- treatment: "glass",
181
- glow: !0,
182
- className: "border-border-seam",
183
- children: [/* @__PURE__ */ f(oe, { children: /* @__PURE__ */ f(b, { children: "Invoices" }) }), /* @__PURE__ */ p(ae, {
184
- className: "p-4 pt-0",
185
- children: [/* @__PURE__ */ f(j, {
186
- data: ce,
187
- rowKey: (e) => e.id,
188
- columns: [
189
- {
190
- key: "number",
191
- header: "Invoice #",
192
- priority: "primary",
193
- cell: (e) => /* @__PURE__ */ f("span", {
194
- className: "font-medium",
195
- children: e.number
196
- })
197
- },
198
- {
199
- key: "client",
200
- header: "Client",
201
- priority: "secondary",
202
- cell: (e) => /* @__PURE__ */ f("span", {
203
- className: "text-text-secondary",
204
- children: e.clientName
205
- })
206
- },
207
- {
208
- key: "issueDate",
209
- header: "Issue Date",
210
- priority: "hidden-on-mobile",
211
- cell: (e) => /* @__PURE__ */ f("span", {
212
- className: "text-text-secondary",
213
- children: e.issueDate || "—"
214
- })
215
- },
216
- {
217
- key: "dueDate",
218
- header: "Due Date",
219
- priority: "secondary",
220
- cell: (e) => /* @__PURE__ */ f("span", {
221
- className: "text-text-secondary",
222
- children: e.dueDate || "—"
223
- })
224
- },
225
- {
226
- key: "amount",
227
- header: "Amount",
228
- priority: "secondary",
229
- headerClassName: "text-right",
230
- cellClassName: "text-right",
231
- cell: (e) => /* @__PURE__ */ p("span", {
232
- className: "font-medium tabular-nums",
233
- children: ["$", e.amount.toLocaleString()]
234
- })
235
- },
236
- {
237
- key: "status",
238
- header: "Status",
239
- priority: "secondary",
240
- cell: (e) => /* @__PURE__ */ f(ie, {
241
- variant: I(e.status),
242
- className: "text-[10px]",
243
- children: t(e.status)
244
- })
245
- }
246
- ],
247
- emptyState: /* @__PURE__ */ f(O, {
248
- illustration: "empty-data",
249
- title: "No invoices yet",
250
- description: "Create your first invoice to start getting paid."
251
- }),
252
- rowActions: (e) => /* @__PURE__ */ p("div", {
253
- className: "flex items-center justify-end gap-1",
254
- children: [e.status === "paid" ? /* @__PURE__ */ p("span", {
255
- className: "inline-flex items-center gap-1 text-xs text-status-success-text",
256
- children: [/* @__PURE__ */ f(s, { className: "h-3.5 w-3.5" }), "Paid"]
257
- }) : /* @__PURE__ */ p(y, {
258
- variant: "outline",
259
- size: "sm",
260
- "aria-label": `Mark invoice ${e.number} as paid`,
261
- onClick: () => void z(e.id, { status: "paid" }),
262
- children: [/* @__PURE__ */ f(s, { className: "h-3.5 w-3.5 mr-1" }), "Mark Paid"]
263
- }), /* @__PURE__ */ p(x, { children: [/* @__PURE__ */ f(T, {
264
- asChild: !0,
265
- children: /* @__PURE__ */ f(y, {
266
- variant: "ghost",
267
- size: "icon",
268
- className: "h-8 w-8",
269
- "aria-label": `More actions for invoice ${e.number}`,
270
- children: /* @__PURE__ */ f(c, { className: "h-4 w-4" })
271
- })
272
- }), /* @__PURE__ */ p(S, {
273
- align: "end",
274
- children: [
275
- /* @__PURE__ */ p(C, {
276
- onSelect: () => V.openModal(e),
277
- children: [/* @__PURE__ */ f(l, { className: "mr-2 h-4 w-4" }), "Edit"]
278
- }),
279
- e.status !== "paid" && /* @__PURE__ */ p(C, {
280
- onSelect: () => void z(e.id, { status: "paid" }),
281
- children: [/* @__PURE__ */ f(s, { className: "mr-2 h-4 w-4" }), "Mark as paid"]
282
- }),
283
- /* @__PURE__ */ f(w, {}),
284
- /* @__PURE__ */ p(C, {
285
- className: "text-status-error-text",
286
- onSelect: () => q(e),
287
- children: [/* @__PURE__ */ f(d, { className: "mr-2 h-4 w-4" }), "Delete"]
288
- })
289
- ]
290
- })] })]
291
- })
292
- }), X.length > U && /* @__PURE__ */ f("div", {
293
- className: "mt-4",
294
- children: /* @__PURE__ */ f(A, {
295
- page: H,
296
- pageSize: U,
297
- totalItems: X.length,
298
- onPageChange: G
299
- })
300
- })]
301
- })]
302
- }),
303
- /* @__PURE__ */ f(ee, {
304
- open: V.open,
305
- onOpenChange: V.onOpenChange,
306
- title: V.context ? "Edit invoice" : "Create invoice",
307
- description: "Issue a new invoice to a client and track its payment status.",
308
- fields: N,
309
- initialValues: V.context ? P(V.context) : void 0,
310
- submitLabel: V.context ? "Save changes" : "Create invoice",
311
- onSubmit: de
312
- }),
313
- /* @__PURE__ */ f(m, {
314
- open: K !== null,
315
- onOpenChange: (e) => {
316
- e || q(null);
317
- },
318
- children: /* @__PURE__ */ p(re, { children: [/* @__PURE__ */ p(_, { children: [/* @__PURE__ */ f(v, { children: "Delete invoice?" }), /* @__PURE__ */ f(h, { children: K ? `Invoice ${K.number} will be permanently removed. This cannot be undone.` : "" })] }), /* @__PURE__ */ p(g, { children: [/* @__PURE__ */ f(ne, {
319
- disabled: J,
320
- children: "Cancel"
321
- }), /* @__PURE__ */ f(te, {
322
- onClick: (e) => {
323
- e.preventDefault(), fe();
324
- },
325
- disabled: J,
326
- children: J ? "Deleting…" : "Delete"
327
- })] })] })
328
- })
329
- ]
330
- });
331
- }
332
- //#endregion
333
- export { R as PaymentsInvoicesPagePage };
334
-
335
- //# sourceMappingURL=PaymentsInvoicesPagePage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PaymentsInvoicesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsInvoicesPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n Badge,\n Button,\n CardContent,\n CardHeader,\n CardTitle,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n PagePurpose,\n Pagination,\n ResponsiveTable,\n type ResponsiveTableColumn,\n} from '@burdenoff/fe-libs/ui';\nimport { usePagination } from '@burdenoff/fe-libs/shared/hooks';\nimport { CheckCircle2, MoreHorizontal, Pencil, Plus, Trash2 } from 'lucide-react';\nimport {\n FormModal,\n useFormModal,\n type FieldConfig,\n type FormValues,\n} from '../components/forms/FormModal';\nimport { useCrewFoundryStore, type Invoice } from '../store/crewfoundryStore';\nimport { formatEnumLabel } from '../utils/formatEnumLabel';\nimport { AreaChart, StatCard } from '../components/viz';\nimport { revenueTrend } from '../lib/analytics';\n\nconst INVOICE_FIELDS: FieldConfig[] = [\n {\n name: 'number',\n label: 'Invoice number',\n type: 'text',\n required: true,\n placeholder: 'INV-0001',\n },\n { name: 'clientName', label: 'Client name', type: 'text', required: true },\n { name: 'amount', label: 'Amount (USD)', type: 'number', required: true },\n {\n name: 'status',\n label: 'Status',\n type: 'select',\n options: [\n { label: 'Draft', value: 'draft' },\n { label: 'Sent', value: 'sent' },\n { label: 'Paid', value: 'paid' },\n { label: 'Overdue', value: 'overdue' },\n { label: 'Cancelled', value: 'cancelled' },\n ],\n },\n { name: 'issueDate', label: 'Issue date', type: 'date', required: true },\n { name: 'dueDate', label: 'Due date', type: 'date' },\n {\n name: 'lineItem',\n label: 'Line item description',\n type: 'text',\n colSpan: 2,\n placeholder: 'e.g. Consulting services',\n },\n];\n\nconst toInitialValues = (invoice: Invoice): FormValues => ({\n number: invoice.number,\n clientName: invoice.clientName,\n amount: invoice.amount,\n status: invoice.status,\n issueDate: invoice.issueDate ? invoice.issueDate.slice(0, 10) : '',\n dueDate: invoice.dueDate ? invoice.dueDate.slice(0, 10) : '',\n lineItem: invoice.items[0]?.description ?? '',\n});\n\nconst valuesToInvoice = (values: FormValues, base?: Invoice): Invoice => {\n const amount = typeof values.amount === 'number' ? values.amount : Number(values.amount) || 0;\n const description = String(values.lineItem ?? '').trim() || 'Services rendered';\n return {\n id: base?.id ?? crypto.randomUUID(),\n number: String(values.number ?? ''),\n clientName: String(values.clientName ?? ''),\n amount,\n status: (values.status as Invoice['status']) || 'draft',\n issueDate: String(values.issueDate ?? ''),\n dueDate: String(values.dueDate ?? ''),\n items: [{ description, amount }],\n };\n};\n\nconst statusVariant = (status: Invoice['status']) =>\n status === 'paid'\n ? 'default'\n : status === 'overdue'\n ? 'destructive'\n : status === 'draft'\n ? 'outline'\n : 'secondary';\n\nconst formatMoney = (value: number): string => `$${Math.round(value).toLocaleString()}`;\n\nexport function PaymentsInvoicesPagePage() {\n const { invoices, addInvoice, updateInvoice, removeInvoice } = useCrewFoundryStore();\n const modal = useFormModal<Invoice>();\n const { page, pageSize, offset, setPage } = usePagination({ initialPageSize: 25 });\n const [deleteTarget, setDeleteTarget] = useState<Invoice | null>(null);\n const [deleting, setDeleting] = useState(false);\n\n const sorted = [...invoices].sort((a, b) => (b.issueDate ?? '').localeCompare(a.issueDate ?? ''));\n const paged = sorted.slice(offset, offset + pageSize);\n\n // Finance KPIs — all computed from real invoice entities.\n const totalBilled = invoices\n .filter((inv) => inv.status !== 'cancelled')\n .reduce((sum, inv) => sum + inv.amount, 0);\n const totalPaid = invoices\n .filter((inv) => inv.status === 'paid')\n .reduce((sum, inv) => sum + inv.amount, 0);\n const totalOverdue = invoices\n .filter((inv) => inv.status === 'overdue')\n .reduce((sum, inv) => sum + inv.amount, 0);\n const outstanding = Math.max(totalBilled - totalPaid, 0);\n\n const revenueSeries = revenueTrend(invoices);\n\n const handleSubmit = async (values: FormValues) => {\n if (modal.context) {\n await updateInvoice(modal.context.id, valuesToInvoice(values, modal.context));\n } else {\n await addInvoice(valuesToInvoice(values));\n }\n };\n\n const confirmDelete = async () => {\n if (!deleteTarget) {\n return;\n }\n setDeleting(true);\n try {\n await removeInvoice(deleteTarget.id);\n setDeleteTarget(null);\n } finally {\n setDeleting(false);\n }\n };\n\n const columns: ResponsiveTableColumn<Invoice>[] = [\n {\n key: 'number',\n header: 'Invoice #',\n priority: 'primary',\n cell: (inv) => <span className=\"font-medium\">{inv.number}</span>,\n },\n {\n key: 'client',\n header: 'Client',\n priority: 'secondary',\n cell: (inv) => <span className=\"text-text-secondary\">{inv.clientName}</span>,\n },\n {\n key: 'issueDate',\n header: 'Issue Date',\n priority: 'hidden-on-mobile',\n cell: (inv) => <span className=\"text-text-secondary\">{inv.issueDate || '—'}</span>,\n },\n {\n key: 'dueDate',\n header: 'Due Date',\n priority: 'secondary',\n cell: (inv) => <span className=\"text-text-secondary\">{inv.dueDate || '—'}</span>,\n },\n {\n key: 'amount',\n header: 'Amount',\n priority: 'secondary',\n headerClassName: 'text-right',\n cellClassName: 'text-right',\n cell: (inv) => (\n <span className=\"font-medium tabular-nums\">${inv.amount.toLocaleString()}</span>\n ),\n },\n {\n key: 'status',\n header: 'Status',\n priority: 'secondary',\n cell: (inv) => (\n <Badge variant={statusVariant(inv.status)} className=\"text-[10px]\">\n {formatEnumLabel(inv.status)}\n </Badge>\n ),\n },\n ];\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\">\n Create, send, and track invoices — see what&apos;s paid, pending, or overdue so you stay\n on top of getting paid.\n </PagePurpose>\n </div>\n <Button size=\"sm\" onClick={() => modal.openModal()}>\n <Plus className=\"h-4 w-4 mr-1\" />\n Create Invoice\n </Button>\n </div>\n\n {/* Finance header: 4 KPI tiles + revenue-trend chart */}\n <div className=\"grid gap-4 sm:grid-cols-2 xl:grid-cols-5\">\n <StatCard label=\"Total Billed\" value={formatMoney(totalBilled)} />\n <StatCard label=\"Paid\" value={formatMoney(totalPaid)} />\n <StatCard label=\"Outstanding\" value={formatMoney(outstanding)} />\n <StatCard\n label=\"Overdue\"\n value={<span className=\"text-status-error-text\">{formatMoney(totalOverdue)}</span>}\n />\n <div className=\"flex flex-col gap-2 rounded-[var(--radius-card)] border border-border-subtle bg-bg-surface p-5 shadow-elevation-1 sm:col-span-2 xl:col-span-1\">\n <span className=\"text-sm font-medium text-text-secondary\">Revenue trend</span>\n {revenueSeries.length > 1 ? (\n <AreaChart\n series={revenueSeries}\n height={96}\n valueFormatter={(value) => formatMoney(value)}\n title=\"Recognised revenue from paid invoices by month\"\n />\n ) : (\n <p className=\"flex flex-1 items-center text-xs text-text-muted\">\n Revenue trend appears once paid invoices span more than one month.\n </p>\n )}\n </div>\n </div>\n\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardHeader>\n <CardTitle>Invoices</CardTitle>\n </CardHeader>\n <CardContent className=\"p-4 pt-0\">\n <ResponsiveTable\n data={paged}\n rowKey={(inv) => inv.id}\n columns={columns}\n emptyState={\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No invoices yet\"\n description=\"Create your first invoice to start getting paid.\"\n />\n }\n rowActions={(inv) => (\n <div className=\"flex items-center justify-end gap-1\">\n {inv.status === 'paid' ? (\n <span className=\"inline-flex items-center gap-1 text-xs text-status-success-text\">\n <CheckCircle2 className=\"h-3.5 w-3.5\" />\n Paid\n </span>\n ) : (\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-label={`Mark invoice ${inv.number} as paid`}\n onClick={() => void updateInvoice(inv.id, { status: 'paid' })}\n >\n <CheckCircle2 className=\"h-3.5 w-3.5 mr-1\" />\n Mark Paid\n </Button>\n )}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n aria-label={`More actions for invoice ${inv.number}`}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onSelect={() => modal.openModal(inv)}>\n <Pencil className=\"mr-2 h-4 w-4\" />\n Edit\n </DropdownMenuItem>\n {inv.status !== 'paid' && (\n <DropdownMenuItem\n onSelect={() => void updateInvoice(inv.id, { status: 'paid' })}\n >\n <CheckCircle2 className=\"mr-2 h-4 w-4\" />\n Mark as paid\n </DropdownMenuItem>\n )}\n <DropdownMenuSeparator />\n <DropdownMenuItem\n className=\"text-status-error-text\"\n onSelect={() => setDeleteTarget(inv)}\n >\n <Trash2 className=\"mr-2 h-4 w-4\" />\n Delete\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )}\n />\n {sorted.length > pageSize && (\n <div className=\"mt-4\">\n <Pagination\n page={page}\n pageSize={pageSize}\n totalItems={sorted.length}\n onPageChange={setPage}\n />\n </div>\n )}\n </CardContent>\n </GlassCard>\n\n <FormModal\n open={modal.open}\n onOpenChange={modal.onOpenChange}\n title={modal.context ? 'Edit invoice' : 'Create invoice'}\n description=\"Issue a new invoice to a client and track its payment status.\"\n fields={INVOICE_FIELDS}\n initialValues={modal.context ? toInitialValues(modal.context) : undefined}\n submitLabel={modal.context ? 'Save changes' : 'Create invoice'}\n onSubmit={handleSubmit}\n />\n\n <AlertDialog\n open={deleteTarget !== null}\n onOpenChange={(open) => {\n if (!open) {\n setDeleteTarget(null);\n }\n }}\n >\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete invoice?</AlertDialogTitle>\n <AlertDialogDescription>\n {deleteTarget\n ? `Invoice ${deleteTarget.number} will be permanently removed. This cannot be undone.`\n : ''}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={deleting}>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={(event) => {\n event.preventDefault();\n void confirmDelete();\n }}\n disabled={deleting}\n >\n {deleting ? 'Deleting…' : 'Delete'}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function PaymentsPaymentDashboardPagePage(): import("react").JSX.Element;
2
- //# sourceMappingURL=PaymentsPaymentDashboardPagePage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PaymentsPaymentDashboardPagePage.d.ts","sourceRoot":"","sources":["../../../src/crewfoundry/pages/PaymentsPaymentDashboardPagePage.tsx"],"names":[],"mappings":"AAwBA,wBAAgB,gCAAgC,gCAgI/C"}
@@ -1,160 +0,0 @@
1
- import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
- import { formatEnumLabel as t } from "../utils/formatEnumLabel.js";
3
- import { CreditCard as n, DollarSign as r, Receipt as i, TrendingUp as a } from "lucide-react";
4
- import { useNavigate as o } from "react-router";
5
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
6
- import { Badge as l, Button as u, Card as d, CardContent as f, CardHeader as p, CardTitle as m, GlassCard as h, GradientText as g, IllustratedEmptyState as _, PagePurpose as v, ResponsiveTable as y } from "@burdenoff/fe-libs/ui";
7
- //#region src/crewfoundry/pages/PaymentsPaymentDashboardPagePage.tsx
8
- var b = 5, x = (e) => e === "paid" ? "default" : e === "overdue" ? "destructive" : "secondary";
9
- function S() {
10
- let S = o(), { invoices: C, payrollRecords: w } = e(), T = C.reduce((e, t) => e + t.amount, 0), E = C.filter((e) => e.status === "paid").reduce((e, t) => e + t.amount, 0), D = w.reduce((e, t) => e + t.grossPay, 0), O = [...C].sort((e, t) => (t.issueDate ?? "").localeCompare(e.issueDate ?? "")).slice(0, b);
11
- return /* @__PURE__ */ c("div", {
12
- className: "space-y-6 p-6",
13
- children: [
14
- /* @__PURE__ */ c("div", { children: [
15
- /* @__PURE__ */ s("h1", {
16
- className: "text-2xl font-semibold",
17
- children: /* @__PURE__ */ s(g, { children: "Payment Dashboard" })
18
- }),
19
- /* @__PURE__ */ s("p", {
20
- className: "text-sm text-text-secondary",
21
- children: "Financial transactions and payment overview"
22
- }),
23
- /* @__PURE__ */ s(v, {
24
- className: "mt-1",
25
- children: "A snapshot of all money movement — incoming payments, payouts, and balances so you understand your financial position at a glance."
26
- })
27
- ] }),
28
- /* @__PURE__ */ c("div", {
29
- className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
30
- children: [
31
- /* @__PURE__ */ c(h, {
32
- treatment: "glass",
33
- glow: !0,
34
- className: "border-border-seam",
35
- children: [/* @__PURE__ */ c(p, {
36
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
37
- children: [/* @__PURE__ */ s(m, {
38
- className: "text-sm font-medium",
39
- children: "Total Invoiced"
40
- }), /* @__PURE__ */ s(i, { className: "h-4 w-4 text-text-secondary" })]
41
- }), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ c("div", {
42
- className: "text-2xl font-bold tabular-nums",
43
- children: ["$", T.toLocaleString()]
44
- }) })]
45
- }),
46
- /* @__PURE__ */ c(h, {
47
- treatment: "metric",
48
- className: "border-border-seam",
49
- children: [/* @__PURE__ */ c(p, {
50
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
51
- children: [/* @__PURE__ */ s(m, {
52
- className: "text-sm font-medium",
53
- children: "Collected"
54
- }), /* @__PURE__ */ s(r, { className: "h-4 w-4 text-status-success-text" })]
55
- }), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ c("div", {
56
- className: "text-2xl font-bold tabular-nums",
57
- children: ["$", E.toLocaleString()]
58
- }) })]
59
- }),
60
- /* @__PURE__ */ c(h, {
61
- treatment: "metric",
62
- className: "border-border-seam",
63
- children: [/* @__PURE__ */ c(p, {
64
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
65
- children: [/* @__PURE__ */ s(m, {
66
- className: "text-sm font-medium",
67
- children: "Payroll Processed"
68
- }), /* @__PURE__ */ s(n, { className: "h-4 w-4 text-text-secondary" })]
69
- }), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ c("div", {
70
- className: "text-2xl font-bold tabular-nums",
71
- children: ["$", D.toLocaleString()]
72
- }) })]
73
- }),
74
- /* @__PURE__ */ c(h, {
75
- treatment: "metric",
76
- className: "border-border-seam",
77
- children: [/* @__PURE__ */ c(p, {
78
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
79
- children: [/* @__PURE__ */ s(m, {
80
- className: "text-sm font-medium",
81
- children: "Outstanding"
82
- }), /* @__PURE__ */ s(a, { className: "h-4 w-4 text-status-warning-text" })]
83
- }), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ c("div", {
84
- className: "text-2xl font-bold tabular-nums",
85
- children: ["$", (T - E).toLocaleString()]
86
- }) })]
87
- })
88
- ]
89
- }),
90
- /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c(p, {
91
- className: "flex flex-row items-center justify-between space-y-0",
92
- children: [/* @__PURE__ */ s(m, { children: "Recent Invoices" }), C.length > b && /* @__PURE__ */ s(u, {
93
- variant: "ghost",
94
- size: "sm",
95
- onClick: () => S("../payments/invoices-page"),
96
- children: "View all"
97
- })]
98
- }), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ s(y, {
99
- data: O,
100
- rowKey: (e) => e.id,
101
- columns: [
102
- {
103
- key: "number",
104
- header: "Invoice",
105
- priority: "primary",
106
- cell: (e) => /* @__PURE__ */ s("span", {
107
- className: "font-medium",
108
- children: e.number
109
- })
110
- },
111
- {
112
- key: "client",
113
- header: "Client",
114
- priority: "secondary",
115
- cell: (e) => /* @__PURE__ */ s("span", {
116
- className: "text-text-secondary",
117
- children: e.clientName
118
- })
119
- },
120
- {
121
- key: "amount",
122
- header: "Amount",
123
- priority: "secondary",
124
- headerClassName: "text-right",
125
- cellClassName: "text-right",
126
- cell: (e) => /* @__PURE__ */ c("span", { children: ["$", e.amount.toLocaleString()] })
127
- },
128
- {
129
- key: "dueDate",
130
- header: "Due Date",
131
- priority: "hidden-on-mobile",
132
- cell: (e) => /* @__PURE__ */ s("span", {
133
- className: "text-text-secondary",
134
- children: e.dueDate
135
- })
136
- },
137
- {
138
- key: "status",
139
- header: "Status",
140
- priority: "secondary",
141
- cell: (e) => /* @__PURE__ */ s(l, {
142
- variant: x(e.status),
143
- className: "text-[10px]",
144
- children: t(e.status)
145
- })
146
- }
147
- ],
148
- emptyState: /* @__PURE__ */ s(_, {
149
- illustration: "empty-data",
150
- title: "No invoices yet",
151
- description: "Invoices you create will show up here."
152
- })
153
- }) })] })
154
- ]
155
- });
156
- }
157
- //#endregion
158
- export { S as PaymentsPaymentDashboardPagePage };
159
-
160
- //# sourceMappingURL=PaymentsPaymentDashboardPagePage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PaymentsPaymentDashboardPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/PaymentsPaymentDashboardPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n PagePurpose,\n ResponsiveTable,\n type ResponsiveTableColumn,\n} from '@burdenoff/fe-libs/ui';\nimport { CreditCard, DollarSign, Receipt, TrendingUp } from 'lucide-react';\nimport { useNavigate } from 'react-router';\nimport { useCrewFoundryStore, type Invoice } from '../store/crewfoundryStore';\nimport { formatEnumLabel } from '../utils/formatEnumLabel';\n\nconst RECENT_LIMIT = 5;\n\nconst statusVariant = (status: Invoice['status']) =>\n status === 'paid' ? 'default' : status === 'overdue' ? 'destructive' : 'secondary';\n\nexport function PaymentsPaymentDashboardPagePage() {\n const navigate = useNavigate();\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 const recentInvoices = [...invoices]\n .sort((a, b) => (b.issueDate ?? '').localeCompare(a.issueDate ?? ''))\n .slice(0, RECENT_LIMIT);\n\n const columns: ResponsiveTableColumn<Invoice>[] = [\n {\n key: 'number',\n header: 'Invoice',\n priority: 'primary',\n cell: (inv) => <span className=\"font-medium\">{inv.number}</span>,\n },\n {\n key: 'client',\n header: 'Client',\n priority: 'secondary',\n cell: (inv) => <span className=\"text-text-secondary\">{inv.clientName}</span>,\n },\n {\n key: 'amount',\n header: 'Amount',\n priority: 'secondary',\n headerClassName: 'text-right',\n cellClassName: 'text-right',\n cell: (inv) => <span>${inv.amount.toLocaleString()}</span>,\n },\n {\n key: 'dueDate',\n header: 'Due Date',\n priority: 'hidden-on-mobile',\n cell: (inv) => <span className=\"text-text-secondary\">{inv.dueDate}</span>,\n },\n {\n key: 'status',\n header: 'Status',\n priority: 'secondary',\n cell: (inv) => (\n <Badge variant={statusVariant(inv.status)} className=\"text-[10px]\">\n {formatEnumLabel(inv.status)}\n </Badge>\n ),\n },\n ];\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 <PagePurpose className=\"mt-1\">\n A snapshot of all money movement — incoming payments, payouts, and balances so you\n understand your financial position at a glance.\n </PagePurpose>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\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 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 className=\"flex flex-row items-center justify-between space-y-0\">\n <CardTitle>Recent Invoices</CardTitle>\n {invoices.length > RECENT_LIMIT && (\n <Button variant=\"ghost\" size=\"sm\" onClick={() => navigate('../payments/invoices-page')}>\n View all\n </Button>\n )}\n </CardHeader>\n <CardContent>\n <ResponsiveTable\n data={recentInvoices}\n rowKey={(inv) => inv.id}\n columns={columns}\n emptyState={\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No invoices yet\"\n description=\"Invoices you create will show up here.\"\n />\n }\n />\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function PaymentsPaymentMethodsPagePage(): import("react").JSX.Element;
2
- //# sourceMappingURL=PaymentsPaymentMethodsPagePage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PaymentsPaymentMethodsPagePage.d.ts","sourceRoot":"","sources":["../../../src/crewfoundry/pages/PaymentsPaymentMethodsPagePage.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,8BAA8B,gCA0E7C"}
@@ -1,80 +0,0 @@
1
- import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
- import { formatEnumLabel as t } from "../utils/formatEnumLabel.js";
3
- import { Building2 as n, CreditCard as r, ExternalLink as i } from "lucide-react";
4
- import { useNavigate as a } from "react-router";
5
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
6
- import { Badge as c, Button as l, CardContent as u, GlassCard as d, GradientText as f, IllustratedEmptyState as p, PagePurpose as m } from "@burdenoff/fe-libs/ui";
7
- //#region src/crewfoundry/pages/PaymentsPaymentMethodsPagePage.tsx
8
- var h = "/billing/payment-methods";
9
- function g() {
10
- let g = a(), { paymentMethods: _ } = e(), v = () => g(h);
11
- return /* @__PURE__ */ s("div", {
12
- className: "space-y-6 p-6",
13
- children: [/* @__PURE__ */ s("div", {
14
- className: "flex items-center justify-between",
15
- children: [/* @__PURE__ */ s("div", { children: [
16
- /* @__PURE__ */ o("h1", {
17
- className: "text-2xl font-semibold",
18
- children: /* @__PURE__ */ o(f, { children: "Payment Methods" })
19
- }),
20
- /* @__PURE__ */ o("p", {
21
- className: "text-sm text-text-secondary",
22
- children: "Managed in your platform Billing settings"
23
- }),
24
- /* @__PURE__ */ o(m, {
25
- className: "mt-1",
26
- children: "Manage how you pay and get paid — cards, bank accounts, and payout methods are held securely in Billing settings."
27
- })
28
- ] }), /* @__PURE__ */ s(l, {
29
- size: "sm",
30
- onClick: v,
31
- children: [/* @__PURE__ */ o(i, { className: "mr-1 h-4 w-4" }), "Manage in Billing settings"]
32
- })]
33
- }), /* @__PURE__ */ o("div", {
34
- className: "grid gap-4 md:grid-cols-2",
35
- children: _.length === 0 ? /* @__PURE__ */ o("div", {
36
- className: "col-span-full",
37
- children: /* @__PURE__ */ o(p, {
38
- illustration: "empty-generic",
39
- title: "No payment methods",
40
- description: "Payment methods live in your platform Billing settings. Add a card or bank account there to pay and get paid.",
41
- action: /* @__PURE__ */ s(l, {
42
- size: "sm",
43
- onClick: v,
44
- children: [/* @__PURE__ */ o(i, { className: "mr-1 h-4 w-4" }), "Open Billing settings"]
45
- })
46
- })
47
- }) : _.map((e, i) => /* @__PURE__ */ o(d, {
48
- treatment: i === 0 ? "glass" : "plain",
49
- glow: i === 0,
50
- children: /* @__PURE__ */ s(u, {
51
- className: "p-4",
52
- children: [/* @__PURE__ */ s("div", {
53
- className: "mb-3 flex items-center justify-between",
54
- children: [/* @__PURE__ */ s("div", {
55
- className: "flex items-center gap-2",
56
- children: [e.type === "bank" ? /* @__PURE__ */ o(n, { className: "h-5 w-5 text-text-secondary" }) : /* @__PURE__ */ o(r, { className: "h-5 w-5 text-text-secondary" }), /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
57
- className: "text-sm font-medium",
58
- children: e.name
59
- }), /* @__PURE__ */ o("p", {
60
- className: "text-xs text-text-secondary",
61
- children: e.bank
62
- })] })]
63
- }), /* @__PURE__ */ o(c, {
64
- variant: e.status === "primary" ? "default" : "secondary",
65
- className: "text-[10px]",
66
- children: t(e.status)
67
- })]
68
- }), /* @__PURE__ */ s("div", {
69
- className: "flex items-center justify-between text-sm text-text-secondary",
70
- children: [/* @__PURE__ */ s("span", { children: ["•••• •••• •••• ", e.last4] }), e.expiry ? /* @__PURE__ */ s("span", { children: ["Exp: ", e.expiry] }) : null]
71
- })]
72
- })
73
- }, e.id))
74
- })]
75
- });
76
- }
77
- //#endregion
78
- export { g as PaymentsPaymentMethodsPagePage };
79
-
80
- //# sourceMappingURL=PaymentsPaymentMethodsPagePage.js.map