@burdenoff/microfe-crewfoundry 2026.703.2 → 2026.704.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 (127) hide show
  1. package/dist/crewfoundry/pages/AdminAdminPagePage.js +117 -164
  2. package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
  3. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +99 -82
  4. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  5. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +160 -192
  6. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
  7. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +238 -231
  8. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  9. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +196 -166
  10. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
  11. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +45 -147
  12. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
  13. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +20 -11
  14. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
  15. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +45 -152
  16. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
  17. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +50 -138
  18. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  19. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +149 -67
  20. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
  21. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +50 -201
  22. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
  23. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +205 -136
  24. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  25. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +25 -31
  26. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
  27. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +118 -104
  28. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
  29. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +117 -58
  30. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  31. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +90 -94
  32. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
  33. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +210 -191
  34. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  35. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +213 -180
  36. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
  37. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +133 -264
  38. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
  39. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +279 -212
  40. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
  41. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +131 -105
  42. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
  43. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +167 -148
  44. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  45. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +3 -3
  46. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  47. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +13 -5
  48. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  49. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +151 -152
  50. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  51. package/dist/crewfoundry/pages/HiringJobsPagePage.js +38 -21
  52. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +3 -3
  54. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  55. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +134 -127
  56. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  57. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +163 -132
  58. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/HrPayrollPagePage.js +202 -160
  60. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  61. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +104 -91
  62. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  63. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +29 -147
  64. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
  65. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +22 -106
  66. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
  67. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +74 -74
  68. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +101 -97
  70. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
  71. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +64 -47
  72. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  73. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +111 -121
  74. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
  75. package/dist/crewfoundry/pages/LearningLearningPagePage.js +131 -110
  76. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
  77. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +65 -64
  78. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  79. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +58 -43
  80. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  81. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +66 -82
  82. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  83. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +38 -88
  84. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  85. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +59 -65
  86. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
  87. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +209 -323
  88. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
  89. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +175 -220
  90. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
  91. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +74 -59
  92. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  93. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +96 -80
  94. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
  95. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +28 -100
  96. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
  97. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +27 -20
  98. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  99. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +73 -73
  100. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
  101. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +62 -56
  102. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  103. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +40 -138
  104. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
  105. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +126 -93
  106. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  107. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +99 -77
  108. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  109. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +73 -74
  110. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
  111. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +1 -1
  112. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
  113. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +122 -122
  114. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  115. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +130 -113
  116. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  117. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +68 -59
  118. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
  119. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +73 -62
  120. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
  121. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +82 -58
  122. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
  123. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +153 -153
  124. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  125. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +63 -48
  126. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  127. package/package.json +1 -1
@@ -1,12 +1,13 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { useMemo as t } from "react";
3
- import { ArrowUp as n, DollarSign as r, FileText as i, Receipt as a, TrendingUp as o, Wallet as s } from "lucide-react";
4
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
5
- import { Badge as u, Card as d, CardContent as f, CardDescription as p, CardHeader as m, CardTitle as h, GlassCard as g, GradientText as _, PagePurpose as v, Separator as y } from "@burdenoff/fe-libs/ui";
3
+ import { DollarSign as n, FileText as r, Receipt as i, TrendingUp as a, Wallet as o } from "lucide-react";
4
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
5
+ import { Badge as l, Card as u, CardContent as d, CardDescription as f, CardHeader as p, CardTitle as m, GlassCard as h, GradientText as g, IllustratedEmptyState as _, PagePurpose as v, Pagination as y, ResponsiveTable as b, Separator as x } from "@burdenoff/fe-libs/ui";
6
+ import { usePagination as S } from "@burdenoff/fe-libs/shared/hooks";
6
7
  //#region src/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.tsx
7
- function b() {
8
- let { employees: b, departments: x, payrollRecords: S, invoices: C, projects: w } = e(), T = t(() => {
9
- let e = S.reduce((e, t) => {
8
+ function C() {
9
+ let { employees: C, departments: w, payrollRecords: T, invoices: E, projects: D } = e(), O = t(() => {
10
+ let e = T.reduce((e, t) => {
10
11
  let n = new Date(t.payDate).toLocaleString("en-US", { month: "short" }), r = e[n] || {
11
12
  gross: 0,
12
13
  net: 0,
@@ -18,179 +19,180 @@ function b() {
18
19
  month: e,
19
20
  ...t
20
21
  })).slice(-6);
21
- }, [S]), E = t(() => [
22
- {
23
- category: "Payroll",
24
- amount: S.reduce((e, t) => e + t.grossPay, 0),
25
- budget: x.reduce((e, t) => e + t.budget * .7, 0),
26
- icon: s
27
- },
28
- {
29
- category: "Benefits",
30
- amount: S.reduce((e, t) => e + t.deductions * .4, 0),
31
- budget: x.reduce((e, t) => e + t.budget * .15, 0),
32
- icon: a
33
- },
34
- {
35
- category: "Recruitment",
36
- amount: C.reduce((e, t) => e + (t.status === "paid" ? t.amount * .15 : 0), 0),
37
- budget: x.reduce((e, t) => e + t.budget * .1, 0),
38
- icon: i
39
- },
40
- {
41
- category: "Training",
42
- amount: w.reduce((e, t) => e + t.spent * .08, 0),
43
- budget: x.reduce((e, t) => e + t.budget * .08, 0),
44
- icon: o
45
- }
46
- ], [
47
- x,
48
- C,
49
- S,
50
- w
51
- ]), D = b.reduce((e, t) => e + t.salary, 0), O = Math.round(D / 12), k = C.reduce((e, t) => e + t.amount, 0), A = C.filter((e) => e.status === "paid").reduce((e, t) => e + t.amount, 0), j = w.reduce((e, t) => e + t.budget, 0), M = w.reduce((e, t) => e + t.spent, 0), N = Math.max(1, ...T.map((e) => e.gross)), P = x.map((e) => {
52
- let t = b.filter((t) => t.department === e.name), n = t.reduce((e, t) => e + t.salary, 0);
22
+ }, [T]), k = t(() => {
23
+ let e = [
24
+ {
25
+ category: "Gross Payroll",
26
+ amount: T.reduce((e, t) => e + t.grossPay, 0),
27
+ icon: o
28
+ },
29
+ {
30
+ category: "Deductions",
31
+ amount: T.reduce((e, t) => e + t.deductions, 0),
32
+ icon: i
33
+ },
34
+ {
35
+ category: "Project Spend",
36
+ amount: D.reduce((e, t) => e + t.spent, 0),
37
+ icon: a
38
+ },
39
+ {
40
+ category: "Collected Invoices",
41
+ amount: E.filter((e) => e.status === "paid").reduce((e, t) => e + t.amount, 0),
42
+ icon: r
43
+ }
44
+ ], t = e.reduce((e, t) => e + t.amount, 0) || 1;
45
+ return e.map((e) => ({
46
+ ...e,
47
+ percentage: Math.round(e.amount / t * 100)
48
+ }));
49
+ }, [
50
+ E,
51
+ T,
52
+ D
53
+ ]), A = C.reduce((e, t) => e + t.salary, 0), j = Math.round(A / 12), M = E.reduce((e, t) => e + t.amount, 0), N = E.filter((e) => e.status === "paid").reduce((e, t) => e + t.amount, 0), P = D.reduce((e, t) => e + t.budget, 0), F = D.reduce((e, t) => e + t.spent, 0), I = Math.max(1, ...O.map((e) => e.gross)), L = P > 0 ? Math.round(F / P * 100) : 0, R = [...w.map((e) => {
54
+ let t = C.filter((t) => t.department === e.name), n = t.reduce((e, t) => e + t.salary, 0);
53
55
  return {
54
56
  name: e.name,
55
57
  salary: n,
56
58
  budget: e.budget,
57
59
  headcount: t.length
58
60
  };
59
- });
60
- return /* @__PURE__ */ l("div", {
61
+ })].sort((e, t) => t.salary - e.salary), z = w.reduce((e, t) => e + t.budget, 0), B = [...E].filter((e) => e.status !== "paid").sort((e, t) => e.dueDate.localeCompare(t.dueDate)), { page: V, pageSize: H, offset: U, setPage: W } = S({ initialPageSize: 6 }), G = B.slice(U, U + H);
62
+ return /* @__PURE__ */ c("div", {
61
63
  className: "space-y-6 p-6",
62
64
  children: [
63
- /* @__PURE__ */ c("div", {
65
+ /* @__PURE__ */ s("div", {
64
66
  className: "flex items-center justify-between",
65
- children: /* @__PURE__ */ l("div", { children: [
66
- /* @__PURE__ */ c("h1", {
67
+ children: /* @__PURE__ */ c("div", { children: [
68
+ /* @__PURE__ */ s("h1", {
67
69
  className: "text-2xl font-semibold",
68
- children: /* @__PURE__ */ c(_, { children: "Financial Analytics" })
70
+ children: /* @__PURE__ */ s(g, { children: "Financial Analytics" })
69
71
  }),
70
- /* @__PURE__ */ c("p", {
72
+ /* @__PURE__ */ s("p", {
71
73
  className: "text-sm text-text-secondary",
72
74
  children: "Workforce financial metrics and cost analysis"
73
75
  }),
74
- /* @__PURE__ */ c(v, {
76
+ /* @__PURE__ */ s(v, {
75
77
  className: "mt-1",
76
78
  children: "Understand the money side of your workforce — payroll, project budgets, and spend trends — so you can plan headcount and control costs with confidence."
77
79
  })
78
80
  ] })
79
81
  }),
80
- /* @__PURE__ */ l("div", {
82
+ /* @__PURE__ */ c("div", {
81
83
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
82
84
  children: [
83
- /* @__PURE__ */ l(g, {
85
+ /* @__PURE__ */ c(h, {
84
86
  treatment: "glass",
85
87
  glow: !0,
86
88
  className: "border-border-seam",
87
- children: [/* @__PURE__ */ l(m, {
89
+ children: [/* @__PURE__ */ c(p, {
88
90
  className: "flex flex-row items-center justify-between space-y-0 pb-2",
89
- children: [/* @__PURE__ */ c(h, {
91
+ children: [/* @__PURE__ */ s(m, {
90
92
  className: "text-sm font-medium",
91
93
  children: "Monthly Payroll"
92
- }), /* @__PURE__ */ c(r, { className: "h-4 w-4 text-text-secondary" })]
93
- }), /* @__PURE__ */ l(f, { children: [/* @__PURE__ */ l("div", {
94
+ }), /* @__PURE__ */ s(n, { className: "h-4 w-4 text-text-secondary" })]
95
+ }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c("div", {
94
96
  className: "text-2xl font-bold tabular-nums",
95
97
  children: [
96
98
  "$",
97
- (O / 1e3).toFixed(0),
99
+ (j / 1e3).toFixed(0),
98
100
  "K"
99
101
  ]
100
- }), /* @__PURE__ */ l("div", {
101
- className: "flex items-center text-xs text-status-warning-text",
102
- children: [/* @__PURE__ */ c(n, { className: "h-3 w-3 mr-1" }), "+2.1% from last month"]
102
+ }), /* @__PURE__ */ s("p", {
103
+ className: "text-xs text-text-secondary",
104
+ children: "Annual salary ÷ 12 months"
103
105
  })] })]
104
106
  }),
105
- /* @__PURE__ */ l(g, {
107
+ /* @__PURE__ */ c(h, {
106
108
  treatment: "metric",
107
109
  className: "border-border-seam",
108
- children: [/* @__PURE__ */ l(m, {
110
+ children: [/* @__PURE__ */ c(p, {
109
111
  className: "flex flex-row items-center justify-between space-y-0 pb-2",
110
- children: [/* @__PURE__ */ c(h, {
112
+ children: [/* @__PURE__ */ s(m, {
111
113
  className: "text-sm font-medium",
112
114
  children: "Annual Salary Cost"
113
- }), /* @__PURE__ */ c(s, { className: "h-4 w-4 text-text-secondary" })]
114
- }), /* @__PURE__ */ l(f, { children: [/* @__PURE__ */ l("div", {
115
+ }), /* @__PURE__ */ s(o, { className: "h-4 w-4 text-text-secondary" })]
116
+ }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c("div", {
115
117
  className: "text-2xl font-bold tabular-nums",
116
118
  children: [
117
119
  "$",
118
- (D / 1e6).toFixed(1),
120
+ (A / 1e6).toFixed(1),
119
121
  "M"
120
122
  ]
121
- }), /* @__PURE__ */ l("p", {
123
+ }), /* @__PURE__ */ c("p", {
122
124
  className: "text-xs text-text-secondary",
123
- children: [b.length, " employees"]
125
+ children: [C.length, " employees"]
124
126
  })] })]
125
127
  }),
126
- /* @__PURE__ */ l(g, {
128
+ /* @__PURE__ */ c(h, {
127
129
  treatment: "metric",
128
130
  className: "border-border-seam",
129
- children: [/* @__PURE__ */ l(m, {
131
+ children: [/* @__PURE__ */ c(p, {
130
132
  className: "flex flex-row items-center justify-between space-y-0 pb-2",
131
- children: [/* @__PURE__ */ c(h, {
133
+ children: [/* @__PURE__ */ s(m, {
132
134
  className: "text-sm font-medium",
133
135
  children: "Total Invoiced"
134
- }), /* @__PURE__ */ c(i, { className: "h-4 w-4 text-text-secondary" })]
135
- }), /* @__PURE__ */ l(f, { children: [/* @__PURE__ */ l("div", {
136
+ }), /* @__PURE__ */ s(r, { className: "h-4 w-4 text-text-secondary" })]
137
+ }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c("div", {
136
138
  className: "text-2xl font-bold tabular-nums",
137
139
  children: [
138
140
  "$",
139
- (k / 1e3).toFixed(1),
141
+ (M / 1e3).toFixed(1),
140
142
  "K"
141
143
  ]
142
- }), /* @__PURE__ */ l("p", {
144
+ }), /* @__PURE__ */ c("p", {
143
145
  className: "text-xs text-text-secondary",
144
146
  children: [
145
147
  "$",
146
- (A / 1e3).toFixed(1),
148
+ (N / 1e3).toFixed(1),
147
149
  "K collected"
148
150
  ]
149
151
  })] })]
150
152
  }),
151
- /* @__PURE__ */ l(g, {
153
+ /* @__PURE__ */ c(h, {
152
154
  treatment: "metric",
153
155
  className: "border-border-seam",
154
- children: [/* @__PURE__ */ l(m, {
156
+ children: [/* @__PURE__ */ c(p, {
155
157
  className: "flex flex-row items-center justify-between space-y-0 pb-2",
156
- children: [/* @__PURE__ */ c(h, {
158
+ children: [/* @__PURE__ */ s(m, {
157
159
  className: "text-sm font-medium",
158
160
  children: "Project Budget"
159
- }), /* @__PURE__ */ c(o, { className: "h-4 w-4 text-text-secondary" })]
160
- }), /* @__PURE__ */ l(f, { children: [/* @__PURE__ */ l("div", {
161
+ }), /* @__PURE__ */ s(a, { className: "h-4 w-4 text-text-secondary" })]
162
+ }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c("div", {
161
163
  className: "text-2xl font-bold tabular-nums",
162
164
  children: [
163
165
  "$",
164
- (j / 1e6).toFixed(1),
166
+ (P / 1e6).toFixed(1),
165
167
  "M"
166
168
  ]
167
- }), /* @__PURE__ */ l("p", {
169
+ }), /* @__PURE__ */ c("p", {
168
170
  className: "text-xs text-text-secondary",
169
- children: [Math.round(M / j * 100), "% utilized"]
171
+ children: [L, "% utilized"]
170
172
  })] })]
171
173
  })
172
174
  ]
173
175
  }),
174
- /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ l(m, { children: [/* @__PURE__ */ c(h, { children: "Payroll Trend" }), /* @__PURE__ */ c(p, { children: "Monthly gross payroll over the last 6 months" })] }), /* @__PURE__ */ l(f, {
176
+ /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ c(p, { children: [/* @__PURE__ */ s(m, { children: "Payroll Trend" }), /* @__PURE__ */ s(f, { children: "Monthly gross payroll over the last 6 months" })] }), /* @__PURE__ */ c(d, {
175
177
  className: "space-y-3",
176
- children: [T.map((e) => /* @__PURE__ */ l("div", {
178
+ children: [O.map((e) => /* @__PURE__ */ c("div", {
177
179
  className: "flex items-center gap-3",
178
180
  children: [
179
- /* @__PURE__ */ c("span", {
181
+ /* @__PURE__ */ s("span", {
180
182
  className: "w-10 text-sm text-text-secondary",
181
183
  children: e.month
182
184
  }),
183
- /* @__PURE__ */ l("div", {
185
+ /* @__PURE__ */ c("div", {
184
186
  className: "flex-1 h-5 bg-bg-sunken rounded overflow-hidden flex",
185
- children: [/* @__PURE__ */ c("div", {
187
+ children: [/* @__PURE__ */ s("div", {
186
188
  className: "h-5 bg-action-primary-bg",
187
- style: { width: `${Math.round(e.net / N * 100)}%` }
188
- }), /* @__PURE__ */ c("div", {
189
+ style: { width: `${Math.round(e.net / I * 100)}%` }
190
+ }), /* @__PURE__ */ s("div", {
189
191
  className: "h-5 bg-action-primary-bg/30",
190
- style: { width: `${Math.round(e.deductions / N * 100)}%` }
192
+ style: { width: `${Math.round(e.deductions / I * 100)}%` }
191
193
  })]
192
194
  }),
193
- /* @__PURE__ */ l("span", {
195
+ /* @__PURE__ */ c("span", {
194
196
  className: "text-sm font-medium w-20 text-right",
195
197
  children: [
196
198
  "$",
@@ -199,163 +201,168 @@ function b() {
199
201
  ]
200
202
  })
201
203
  ]
202
- }, e.month)), /* @__PURE__ */ l("div", {
204
+ }, e.month)), /* @__PURE__ */ c("div", {
203
205
  className: "flex items-center gap-4 mt-2 text-xs text-text-secondary",
204
- children: [/* @__PURE__ */ l("div", {
206
+ children: [/* @__PURE__ */ c("div", {
205
207
  className: "flex items-center gap-1",
206
- children: [/* @__PURE__ */ c("div", { className: "h-3 w-3 bg-action-primary-bg rounded" }), /* @__PURE__ */ c("span", { children: "Net Pay" })]
207
- }), /* @__PURE__ */ l("div", {
208
+ children: [/* @__PURE__ */ s("div", { className: "h-3 w-3 bg-action-primary-bg rounded" }), /* @__PURE__ */ s("span", { children: "Net Pay" })]
209
+ }), /* @__PURE__ */ c("div", {
208
210
  className: "flex items-center gap-1",
209
- children: [/* @__PURE__ */ c("div", { className: "h-3 w-3 bg-action-primary-bg/30 rounded" }), /* @__PURE__ */ c("span", { children: "Deductions" })]
211
+ children: [/* @__PURE__ */ s("div", { className: "h-3 w-3 bg-action-primary-bg/30 rounded" }), /* @__PURE__ */ s("span", { children: "Deductions" })]
210
212
  })]
211
213
  })]
212
214
  })] }),
213
- /* @__PURE__ */ l("div", {
215
+ /* @__PURE__ */ c("div", {
214
216
  className: "grid gap-4 md:grid-cols-2",
215
- children: [/* @__PURE__ */ l(d, { children: [/* @__PURE__ */ l(m, { children: [/* @__PURE__ */ c(h, { children: "Budget vs Actual" }), /* @__PURE__ */ c(p, { children: "Monthly expense tracking by category" })] }), /* @__PURE__ */ c(f, {
217
+ children: [/* @__PURE__ */ c(u, { children: [/* @__PURE__ */ c(p, { children: [/* @__PURE__ */ s(m, { children: "Spend by Category" }), /* @__PURE__ */ s(f, { children: "Share of tracked workforce spend" })] }), /* @__PURE__ */ s(d, {
216
218
  className: "space-y-4",
217
- children: E.map((e) => {
218
- let t = Math.round(e.amount / e.budget * 100);
219
- return /* @__PURE__ */ l("div", {
220
- className: "space-y-1",
221
- children: [
222
- /* @__PURE__ */ l("div", {
223
- className: "flex justify-between text-sm",
224
- children: [/* @__PURE__ */ c("span", {
225
- className: "font-medium",
226
- children: e.category
227
- }), /* @__PURE__ */ l("span", { children: [
228
- "$",
229
- (e.amount / 1e3).toFixed(0),
230
- "K / $",
231
- (e.budget / 1e3).toFixed(0),
232
- "K"
233
- ] })]
234
- }),
235
- /* @__PURE__ */ c("div", {
236
- className: "h-3 bg-bg-sunken rounded overflow-hidden",
237
- children: /* @__PURE__ */ c("div", {
238
- className: `h-3 rounded ${t > 95 ? "bg-status-error-text" : t > 80 ? "bg-status-warning-text" : "bg-status-success-text"}`,
239
- style: { width: `${t}%` }
240
- })
241
- }),
242
- /* @__PURE__ */ l("p", {
243
- className: "text-xs text-text-secondary text-right",
244
- children: [t, "% utilized"]
219
+ children: k.map((e) => /* @__PURE__ */ c("div", {
220
+ className: "space-y-1",
221
+ children: [
222
+ /* @__PURE__ */ c("div", {
223
+ className: "flex justify-between text-sm",
224
+ children: [/* @__PURE__ */ c("span", {
225
+ className: "flex items-center gap-2 font-medium",
226
+ children: [/* @__PURE__ */ s(e.icon, { className: "h-4 w-4 text-text-secondary" }), e.category]
227
+ }), /* @__PURE__ */ c("span", { children: [
228
+ "$",
229
+ (e.amount / 1e3).toFixed(0),
230
+ "K"
231
+ ] })]
232
+ }),
233
+ /* @__PURE__ */ s("div", {
234
+ className: "h-3 bg-bg-sunken rounded overflow-hidden",
235
+ children: /* @__PURE__ */ s("div", {
236
+ className: "h-3 rounded bg-action-primary-bg",
237
+ style: { width: `${e.percentage}%` }
245
238
  })
246
- ]
247
- }, e.category);
248
- })
249
- })] }), /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ l(m, { children: [/* @__PURE__ */ c(h, { children: "Outstanding Invoices" }), /* @__PURE__ */ c(p, { children: "Invoices requiring attention" })] }), /* @__PURE__ */ c(f, {
239
+ }),
240
+ /* @__PURE__ */ c("p", {
241
+ className: "text-xs text-text-secondary text-right",
242
+ children: [e.percentage, "% of spend"]
243
+ })
244
+ ]
245
+ }, e.category))
246
+ })] }), /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ c(p, { children: [/* @__PURE__ */ s(m, { children: "Outstanding Invoices" }), /* @__PURE__ */ s(f, { children: "Unpaid invoices requiring attention" })] }), /* @__PURE__ */ c(d, {
250
247
  className: "space-y-3",
251
- children: C.map((e) => /* @__PURE__ */ l("div", {
252
- className: "flex items-center justify-between rounded border p-3",
253
- children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
254
- className: "text-sm font-medium",
255
- children: e.number
256
- }), /* @__PURE__ */ c("p", {
257
- className: "text-xs text-text-secondary",
258
- children: e.clientName
259
- })] }), /* @__PURE__ */ l("div", {
260
- className: "text-right",
261
- children: [/* @__PURE__ */ l("p", {
262
- className: "text-sm font-medium",
263
- children: ["$", e.amount.toLocaleString()]
264
- }), /* @__PURE__ */ c(u, {
265
- variant: e.status === "paid" ? "default" : e.status === "overdue" ? "destructive" : "secondary",
266
- className: "text-[10px]",
267
- children: e.status
268
- })]
269
- })]
270
- }, e.id))
271
- })] })]
272
- }),
273
- /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ l(m, { children: [/* @__PURE__ */ c(h, { children: "Department Cost Analysis" }), /* @__PURE__ */ c(p, { children: "Total salary cost and budget allocation by department" })] }), /* @__PURE__ */ l(f, { children: [
274
- /* @__PURE__ */ l("div", {
275
- className: "grid grid-cols-5 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2",
276
248
  children: [
277
- /* @__PURE__ */ c("span", { children: "Department" }),
278
- /* @__PURE__ */ c("span", {
279
- className: "text-right",
280
- children: "Headcount"
281
- }),
282
- /* @__PURE__ */ c("span", {
283
- className: "text-right",
284
- children: "Total Salary"
285
- }),
286
- /* @__PURE__ */ c("span", {
287
- className: "text-right",
288
- children: "Dept Budget"
249
+ B.length === 0 && /* @__PURE__ */ s(_, {
250
+ illustration: "empty-data",
251
+ title: "No outstanding invoices",
252
+ description: "Every invoice has been paid. New unpaid invoices will appear here."
289
253
  }),
290
- /* @__PURE__ */ c("span", {
291
- className: "text-right",
292
- children: "Salary/Budget %"
254
+ G.map((e) => /* @__PURE__ */ c("div", {
255
+ className: "flex items-center justify-between rounded border p-3",
256
+ children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
257
+ className: "text-sm font-medium",
258
+ children: e.number
259
+ }), /* @__PURE__ */ s("p", {
260
+ className: "text-xs text-text-secondary",
261
+ children: e.clientName
262
+ })] }), /* @__PURE__ */ c("div", {
263
+ className: "text-right",
264
+ children: [/* @__PURE__ */ c("p", {
265
+ className: "text-sm font-medium",
266
+ children: ["$", e.amount.toLocaleString()]
267
+ }), /* @__PURE__ */ s(l, {
268
+ variant: e.status === "overdue" ? "destructive" : "secondary",
269
+ className: "text-[10px]",
270
+ children: e.status
271
+ })]
272
+ })]
273
+ }, e.id)),
274
+ B.length > H && /* @__PURE__ */ s(y, {
275
+ page: V,
276
+ pageSize: H,
277
+ totalItems: B.length,
278
+ onPageChange: W
293
279
  })
294
280
  ]
295
- }),
296
- P.sort((e, t) => t.salary - e.salary).map((e) => /* @__PURE__ */ l("div", {
297
- className: "grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm",
298
- children: [
299
- /* @__PURE__ */ c("span", {
300
- className: "font-medium",
301
- children: e.name
302
- }),
303
- /* @__PURE__ */ c("span", {
304
- className: "text-right",
305
- children: e.headcount
306
- }),
307
- /* @__PURE__ */ l("span", {
308
- className: "text-right",
309
- children: [
310
- "$",
311
- (e.salary / 1e3).toFixed(0),
312
- "K"
313
- ]
314
- }),
315
- /* @__PURE__ */ l("span", {
316
- className: "text-right",
317
- children: [
318
- "$",
319
- (e.budget / 1e6).toFixed(1),
320
- "M"
321
- ]
322
- }),
323
- /* @__PURE__ */ c("span", {
324
- className: "text-right",
325
- children: /* @__PURE__ */ l(u, {
326
- variant: e.salary / e.budget > .5 ? "destructive" : "default",
327
- className: "text-[10px]",
328
- children: [Math.round(e.salary / e.budget * 100), "%"]
281
+ })] })]
282
+ }),
283
+ /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ c(p, { children: [/* @__PURE__ */ s(m, { children: "Department Cost Analysis" }), /* @__PURE__ */ s(f, { children: "Total salary cost and budget allocation by department" })] }), /* @__PURE__ */ c(d, { children: [
284
+ /* @__PURE__ */ s(b, {
285
+ columns: [
286
+ {
287
+ key: "name",
288
+ header: "Department",
289
+ priority: "primary",
290
+ cell: (e) => /* @__PURE__ */ s("span", {
291
+ className: "font-medium",
292
+ children: e.name
329
293
  })
330
- })
331
- ]
332
- }, e.name)),
333
- /* @__PURE__ */ c(y, { className: "my-2" }),
334
- /* @__PURE__ */ l("div", {
335
- className: "grid grid-cols-5 gap-2 text-sm font-bold",
294
+ },
295
+ {
296
+ key: "headcount",
297
+ header: "Headcount",
298
+ priority: "secondary",
299
+ cell: (e) => /* @__PURE__ */ s("span", {
300
+ className: "md:block md:text-right",
301
+ children: e.headcount
302
+ })
303
+ },
304
+ {
305
+ key: "salary",
306
+ header: "Total Salary",
307
+ priority: "secondary",
308
+ cell: (e) => /* @__PURE__ */ c("span", {
309
+ className: "md:block md:text-right",
310
+ children: [
311
+ "$",
312
+ (e.salary / 1e3).toFixed(0),
313
+ "K"
314
+ ]
315
+ })
316
+ },
317
+ {
318
+ key: "budget",
319
+ header: "Dept Budget",
320
+ priority: "secondary",
321
+ cell: (e) => /* @__PURE__ */ c("span", {
322
+ className: "md:block md:text-right",
323
+ children: [
324
+ "$",
325
+ (e.budget / 1e6).toFixed(1),
326
+ "M"
327
+ ]
328
+ })
329
+ },
330
+ {
331
+ key: "ratio",
332
+ header: "Salary/Budget %",
333
+ priority: "primary",
334
+ cell: (e) => {
335
+ let t = e.budget > 0 ? Math.round(e.salary / e.budget * 100) : 0;
336
+ return /* @__PURE__ */ s("span", {
337
+ className: "md:block md:text-right",
338
+ children: /* @__PURE__ */ c(l, {
339
+ variant: t > 50 ? "destructive" : "default",
340
+ className: "text-[10px]",
341
+ children: [t, "%"]
342
+ })
343
+ });
344
+ }
345
+ }
346
+ ],
347
+ data: R,
348
+ rowKey: (e) => e.name
349
+ }),
350
+ /* @__PURE__ */ s(x, { className: "my-3" }),
351
+ /* @__PURE__ */ c("div", {
352
+ className: "flex flex-wrap items-center justify-between gap-2 text-sm font-bold",
336
353
  children: [
337
- /* @__PURE__ */ c("span", { children: "Total" }),
338
- /* @__PURE__ */ c("span", {
339
- className: "text-right",
340
- children: b.length
341
- }),
342
- /* @__PURE__ */ l("span", {
343
- className: "text-right",
344
- children: [
345
- "$",
346
- (D / 1e6).toFixed(1),
347
- "M"
348
- ]
349
- }),
350
- /* @__PURE__ */ l("span", {
351
- className: "text-right",
352
- children: [
353
- "$",
354
- (x.reduce((e, t) => e + t.budget, 0) / 1e6).toFixed(1),
355
- "M"
356
- ]
357
- }),
358
- /* @__PURE__ */ c("span", {})
354
+ /* @__PURE__ */ s("span", { children: "Total" }),
355
+ /* @__PURE__ */ c("span", { children: [C.length, " employees"] }),
356
+ /* @__PURE__ */ c("span", { children: [
357
+ "$",
358
+ (A / 1e6).toFixed(1),
359
+ "M salary"
360
+ ] }),
361
+ /* @__PURE__ */ c("span", { children: [
362
+ "$",
363
+ (z / 1e6).toFixed(1),
364
+ "M budget"
365
+ ] })
359
366
  ]
360
367
  })
361
368
  ] })] })
@@ -363,6 +370,6 @@ function b() {
363
370
  });
364
371
  }
365
372
  //#endregion
366
- export { b as AnalyticsFinancialAnalyticsPagePage };
373
+ export { C as AnalyticsFinancialAnalyticsPagePage };
367
374
 
368
375
  //# sourceMappingURL=AnalyticsFinancialAnalyticsPagePage.js.map