@burdenoff/microfe-crewfoundry 2026.608.1 → 2026.625.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/crewfoundry/pages/AdminAdminPagePage.js +94 -78
  2. package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
  3. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +112 -96
  4. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  5. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +101 -85
  6. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
  7. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +131 -115
  8. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  9. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +116 -100
  10. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
  11. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +15 -15
  12. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  13. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +63 -51
  14. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
  15. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +16 -16
  16. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
  17. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +26 -26
  18. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
  19. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +28 -28
  20. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  21. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +10 -10
  22. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
  23. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +71 -59
  24. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
  25. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +59 -47
  26. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  27. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +77 -61
  28. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
  29. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +40 -40
  30. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
  31. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +13 -13
  32. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  33. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +102 -86
  34. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
  35. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +173 -139
  36. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  37. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +59 -59
  38. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
  39. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +113 -97
  40. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
  41. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +45 -45
  42. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
  43. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +85 -69
  44. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
  45. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +23 -23
  46. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  47. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +40 -40
  48. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  49. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +59 -47
  50. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  51. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +52 -48
  52. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/HiringJobsPagePage.js +31 -26
  54. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  55. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +61 -49
  56. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  57. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +83 -67
  58. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +90 -74
  60. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  61. package/dist/crewfoundry/pages/HrPayrollPagePage.js +90 -74
  62. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  63. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +83 -67
  64. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  65. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +54 -42
  66. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
  67. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +16 -16
  68. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +39 -35
  70. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  71. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +24 -24
  72. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
  73. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +14 -14
  74. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  75. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +81 -65
  76. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
  77. package/dist/crewfoundry/pages/LearningLearningPagePage.js +73 -57
  78. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
  79. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +28 -28
  80. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  81. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +12 -12
  82. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  83. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +75 -59
  84. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  85. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +57 -45
  86. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  87. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +71 -59
  88. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
  89. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +48 -48
  90. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
  91. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +44 -43
  92. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
  93. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +58 -46
  94. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  95. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +16 -16
  96. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
  97. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +23 -23
  98. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
  99. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +9 -9
  100. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  101. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +43 -39
  102. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
  103. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +31 -27
  104. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  105. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +59 -47
  106. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
  107. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +13 -13
  108. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  109. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +66 -50
  110. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  111. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +18 -18
  112. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
  113. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +74 -62
  114. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
  115. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +21 -21
  116. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
  117. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +47 -43
  118. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  119. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +20 -20
  120. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  121. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +58 -46
  122. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
  123. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +38 -34
  124. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
  125. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +14 -14
  126. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
  127. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +67 -67
  128. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  129. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +16 -16
  130. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  131. package/package.json +2 -2
@@ -2,18 +2,18 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { useMemo as t } from "react";
3
3
  import { ArrowUp as n, Building2 as r, DollarSign as i, Percent as a, Target as o } from "lucide-react";
4
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, Separator as h } from "@burdenoff/fe-libs/ui";
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, Separator as _ } from "@burdenoff/fe-libs/ui";
6
6
  //#region src/crewfoundry/pages/DashboardExecutiveDashboardPage.tsx
7
- function g() {
8
- let { employees: g, departments: _, projects: v, jobPostings: y } = e(), b = t(() => {
7
+ function v() {
8
+ let { employees: v, departments: y, projects: b, jobPostings: x } = e(), S = t(() => {
9
9
  let e = [
10
10
  "Q1 2025",
11
11
  "Q2 2025",
12
12
  "Q3 2025",
13
13
  "Q4 2025"
14
- ], t = v.reduce((e, t) => e + t.budget, 0) || 1e6;
14
+ ], t = b.reduce((e, t) => e + t.budget, 0) || 1e6;
15
15
  return e.map((e, n) => {
16
- let r = Math.round(t * (.55 + n * .08)), i = Math.max(1, g.length - (3 - n) * 4);
16
+ let r = Math.round(t * (.55 + n * .08)), i = Math.max(1, v.length - (3 - n) * 4);
17
17
  return {
18
18
  quarter: e,
19
19
  revenue: r,
@@ -21,45 +21,45 @@ function g() {
21
21
  revenuePerHead: Math.round(r / i)
22
22
  };
23
23
  });
24
- }, [g.length, v]), x = t(() => [
24
+ }, [v.length, b]), C = t(() => [
25
25
  {
26
26
  metric: "Flight Risk Employees",
27
- value: g.filter((e) => e.performanceScore < 3.6).length,
27
+ value: v.filter((e) => e.performanceScore < 3.6).length,
28
28
  severity: "warning",
29
- detail: `${Math.round(g.filter((e) => e.performanceScore < 3.6).length / Math.max(g.length, 1) * 100)}% of workforce`
29
+ detail: `${Math.round(v.filter((e) => e.performanceScore < 3.6).length / Math.max(v.length, 1) * 100)}% of workforce`
30
30
  },
31
31
  {
32
32
  metric: "Overdue Performance Reviews",
33
- value: g.filter((e) => e.status === "on_leave").length,
33
+ value: v.filter((e) => e.status === "on_leave").length,
34
34
  severity: "error",
35
35
  detail: "Review follow-ups required"
36
36
  },
37
37
  {
38
38
  metric: "Unfilled Critical Roles",
39
- value: y.filter((e) => e.status === "active" && e.experienceLevel === "lead").length,
39
+ value: x.filter((e) => e.status === "active" && e.experienceLevel === "lead").length,
40
40
  severity: "warning",
41
41
  detail: "Open lead-level positions"
42
42
  },
43
43
  {
44
44
  metric: "Expiring Contracts",
45
- value: g.filter((e) => e.type === "contract").length,
45
+ value: v.filter((e) => e.type === "contract").length,
46
46
  severity: "info",
47
47
  detail: "Contract renewals in focus"
48
48
  }
49
- ], [g, y]), S = t(() => [{
49
+ ], [v, x]), w = t(() => [{
50
50
  category: "Company",
51
51
  male: 52,
52
52
  female: 43,
53
53
  other: 5
54
- }, ..._.map((e) => {
55
- let t = g.filter((t) => t.department === e.name).length, n = Math.min(100, Math.round(45 + t % 15)), r = Math.min(100 - n, Math.round(40 + t % 10)), i = Math.max(0, 100 - n - r);
54
+ }, ...y.map((e) => {
55
+ let t = v.filter((t) => t.department === e.name).length, n = Math.min(100, Math.round(45 + t % 15)), r = Math.min(100 - n, Math.round(40 + t % 10)), i = Math.max(0, 100 - n - r);
56
56
  return {
57
57
  category: e.name,
58
58
  male: n,
59
59
  female: r,
60
60
  other: i
61
61
  };
62
- }).slice(0, 3)], [_, g]), C = g.reduce((e, t) => e + t.salary, 0), w = _.reduce((e, t) => e + t.budget, 0), T = v.reduce((e, t) => e + t.budget, 0), E = v.reduce((e, t) => e + t.spent, 0), D = Math.round(E / T * 100);
62
+ }).slice(0, 3)], [y, v]), T = v.reduce((e, t) => e + t.salary, 0), E = y.reduce((e, t) => e + t.budget, 0), D = b.reduce((e, t) => e + t.budget, 0), O = b.reduce((e, t) => e + t.spent, 0), k = Math.round(O / D * 100);
63
63
  return /* @__PURE__ */ c("div", {
64
64
  className: "space-y-6 p-6",
65
65
  children: [
@@ -67,9 +67,9 @@ function g() {
67
67
  className: "flex items-center justify-between",
68
68
  children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
69
69
  className: "text-2xl font-semibold",
70
- children: "Executive Dashboard"
70
+ children: /* @__PURE__ */ s(g, { children: "Executive Dashboard" })
71
71
  }), /* @__PURE__ */ s("p", {
72
- className: "text-sm text-muted-foreground",
72
+ className: "text-sm text-text-secondary",
73
73
  children: "Strategic workforce insights for leadership"
74
74
  })] }), /* @__PURE__ */ s(l, {
75
75
  variant: "outline",
@@ -79,74 +79,90 @@ function g() {
79
79
  /* @__PURE__ */ c("div", {
80
80
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
81
81
  children: [
82
- /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ c(p, {
83
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
84
- children: [/* @__PURE__ */ s(m, {
85
- className: "text-sm font-medium",
86
- children: "Revenue per Employee"
87
- }), /* @__PURE__ */ s(i, { className: "h-4 w-4 text-muted-foreground" })]
88
- }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s("div", {
89
- className: "text-2xl font-bold",
90
- children: "$21,862"
91
- }), /* @__PURE__ */ c("div", {
92
- className: "flex items-center text-xs text-green-600",
93
- children: [/* @__PURE__ */ s(n, { className: "h-3 w-3 mr-1" }), "+2.0% from Q3"]
94
- })] })] }),
95
- /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ c(p, {
96
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
97
- children: [/* @__PURE__ */ s(m, {
98
- className: "text-sm font-medium",
99
- children: "Total Workforce Cost"
100
- }), /* @__PURE__ */ s(r, { className: "h-4 w-4 text-muted-foreground" })]
101
- }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c("div", {
102
- className: "text-2xl font-bold",
103
- children: [
104
- "$",
105
- (C / 1e6).toFixed(1),
106
- "M"
107
- ]
108
- }), /* @__PURE__ */ s("p", {
109
- className: "text-xs text-muted-foreground",
110
- children: "Annual salary expenditure"
111
- })] })] }),
112
- /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ c(p, {
113
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
114
- children: [/* @__PURE__ */ s(m, {
115
- className: "text-sm font-medium",
116
- children: "Budget Utilization"
117
- }), /* @__PURE__ */ s(a, { className: "h-4 w-4 text-muted-foreground" })]
118
- }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c("div", {
119
- className: "text-2xl font-bold",
120
- children: [D, "%"]
121
- }), /* @__PURE__ */ c("p", {
122
- className: "text-xs text-muted-foreground",
123
- children: [
124
- "$",
125
- (E / 1e6).toFixed(1),
126
- "M of $",
127
- (T / 1e6).toFixed(1),
128
- "M"
129
- ]
130
- })] })] }),
131
- /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ c(p, {
132
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
133
- children: [/* @__PURE__ */ s(m, {
134
- className: "text-sm font-medium",
135
- children: "Retention Rate"
136
- }), /* @__PURE__ */ s(o, { className: "h-4 w-4 text-muted-foreground" })]
137
- }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s("div", {
138
- className: "text-2xl font-bold",
139
- children: "95.8%"
140
- }), /* @__PURE__ */ c("div", {
141
- className: "flex items-center text-xs text-green-600",
142
- children: [/* @__PURE__ */ s(n, { className: "h-3 w-3 mr-1" }), "+1.1% improvement"]
143
- })] })] })
82
+ /* @__PURE__ */ c(h, {
83
+ treatment: "metric",
84
+ className: "border-border-seam",
85
+ children: [/* @__PURE__ */ c(p, {
86
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
87
+ children: [/* @__PURE__ */ s(m, {
88
+ className: "text-sm font-medium",
89
+ children: "Revenue per Employee"
90
+ }), /* @__PURE__ */ s(i, { className: "h-4 w-4 text-text-secondary" })]
91
+ }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s("div", {
92
+ className: "text-2xl font-bold tabular-nums",
93
+ children: "$21,862"
94
+ }), /* @__PURE__ */ c("div", {
95
+ className: "flex items-center text-xs text-status-success-text",
96
+ children: [/* @__PURE__ */ s(n, { className: "h-3 w-3 mr-1" }), "+2.0% from Q3"]
97
+ })] })]
98
+ }),
99
+ /* @__PURE__ */ c(h, {
100
+ treatment: "metric",
101
+ className: "border-border-seam",
102
+ children: [/* @__PURE__ */ c(p, {
103
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
104
+ children: [/* @__PURE__ */ s(m, {
105
+ className: "text-sm font-medium",
106
+ children: "Total Workforce Cost"
107
+ }), /* @__PURE__ */ s(r, { className: "h-4 w-4 text-text-secondary" })]
108
+ }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c("div", {
109
+ className: "text-2xl font-bold tabular-nums",
110
+ children: [
111
+ "$",
112
+ (T / 1e6).toFixed(1),
113
+ "M"
114
+ ]
115
+ }), /* @__PURE__ */ s("p", {
116
+ className: "text-xs text-text-secondary",
117
+ children: "Annual salary expenditure"
118
+ })] })]
119
+ }),
120
+ /* @__PURE__ */ c(h, {
121
+ treatment: "metric",
122
+ className: "border-border-seam",
123
+ children: [/* @__PURE__ */ c(p, {
124
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
125
+ children: [/* @__PURE__ */ s(m, {
126
+ className: "text-sm font-medium",
127
+ children: "Budget Utilization"
128
+ }), /* @__PURE__ */ s(a, { className: "h-4 w-4 text-text-secondary" })]
129
+ }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c("div", {
130
+ className: "text-2xl font-bold tabular-nums",
131
+ children: [k, "%"]
132
+ }), /* @__PURE__ */ c("p", {
133
+ className: "text-xs text-text-secondary",
134
+ children: [
135
+ "$",
136
+ (O / 1e6).toFixed(1),
137
+ "M of $",
138
+ (D / 1e6).toFixed(1),
139
+ "M"
140
+ ]
141
+ })] })]
142
+ }),
143
+ /* @__PURE__ */ c(h, {
144
+ treatment: "metric",
145
+ className: "border-border-seam",
146
+ children: [/* @__PURE__ */ c(p, {
147
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
148
+ children: [/* @__PURE__ */ s(m, {
149
+ className: "text-sm font-medium",
150
+ children: "Retention Rate"
151
+ }), /* @__PURE__ */ s(o, { className: "h-4 w-4 text-text-secondary" })]
152
+ }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s("div", {
153
+ className: "text-2xl font-bold tabular-nums",
154
+ children: "95.8%"
155
+ }), /* @__PURE__ */ c("div", {
156
+ className: "flex items-center text-xs text-status-success-text",
157
+ children: [/* @__PURE__ */ s(n, { className: "h-3 w-3 mr-1" }), "+1.1% improvement"]
158
+ })] })]
159
+ })
144
160
  ]
145
161
  }),
146
162
  /* @__PURE__ */ c("div", {
147
163
  className: "grid gap-4 md:grid-cols-2",
148
164
  children: [/* @__PURE__ */ c(u, { children: [/* @__PURE__ */ c(p, { children: [/* @__PURE__ */ s(m, { children: "Revenue & Headcount Trend" }), /* @__PURE__ */ s(f, { children: "Quarterly performance metrics" })] }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c("div", {
149
- className: "grid grid-cols-4 gap-2 text-xs font-medium text-muted-foreground border-b pb-2 mb-2",
165
+ className: "grid grid-cols-4 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2",
150
166
  children: [
151
167
  /* @__PURE__ */ s("span", { children: "Quarter" }),
152
168
  /* @__PURE__ */ s("span", {
@@ -162,7 +178,7 @@ function g() {
162
178
  children: "Rev/Head"
163
179
  })
164
180
  ]
165
- }), b.map((e) => /* @__PURE__ */ c("div", {
181
+ }), S.map((e) => /* @__PURE__ */ c("div", {
166
182
  className: "grid grid-cols-4 gap-2 py-2 border-b last:border-0 text-sm",
167
183
  children: [
168
184
  /* @__PURE__ */ s("span", {
@@ -188,15 +204,15 @@ function g() {
188
204
  ]
189
205
  }, e.quarter))] })] }), /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ c(p, { children: [/* @__PURE__ */ s(m, { children: "Risk Indicators" }), /* @__PURE__ */ s(f, { children: "Items requiring executive attention" })] }), /* @__PURE__ */ s(d, {
190
206
  className: "space-y-3",
191
- children: x.map((e) => /* @__PURE__ */ c("div", {
207
+ children: C.map((e) => /* @__PURE__ */ c("div", {
192
208
  className: "flex items-center justify-between rounded border p-3",
193
209
  children: [/* @__PURE__ */ c("div", {
194
210
  className: "flex items-center gap-3",
195
- children: [/* @__PURE__ */ s("div", { className: `h-3 w-3 rounded-full ${e.severity === "error" ? "bg-red-500" : e.severity === "warning" ? "bg-yellow-500" : "bg-blue-500"}` }), /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
211
+ children: [/* @__PURE__ */ s("div", { className: `h-3 w-3 rounded-full ${e.severity === "error" ? "bg-status-error-text" : e.severity === "warning" ? "bg-status-warning-text" : "bg-status-info-text"}` }), /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
196
212
  className: "text-sm font-medium",
197
213
  children: e.metric
198
214
  }), /* @__PURE__ */ s("p", {
199
- className: "text-xs text-muted-foreground",
215
+ className: "text-xs text-text-secondary",
200
216
  children: e.detail
201
217
  })] })]
202
218
  }), /* @__PURE__ */ s("span", {
@@ -208,7 +224,7 @@ function g() {
208
224
  }),
209
225
  /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ c(p, { children: [/* @__PURE__ */ s(m, { children: "Diversity & Inclusion Metrics" }), /* @__PURE__ */ s(f, { children: "Gender distribution across organization segments" })] }), /* @__PURE__ */ s(d, { children: /* @__PURE__ */ s("div", {
210
226
  className: "space-y-4",
211
- children: S.map((e) => /* @__PURE__ */ c("div", {
227
+ children: w.map((e) => /* @__PURE__ */ c("div", {
212
228
  className: "space-y-1",
213
229
  children: [/* @__PURE__ */ c("div", {
214
230
  className: "flex justify-between text-sm",
@@ -216,7 +232,7 @@ function g() {
216
232
  className: "font-medium",
217
233
  children: e.category
218
234
  }), /* @__PURE__ */ c("span", {
219
- className: "text-xs text-muted-foreground",
235
+ className: "text-xs text-text-secondary",
220
236
  children: [
221
237
  "M: ",
222
238
  e.male,
@@ -231,15 +247,15 @@ function g() {
231
247
  className: "flex h-3 rounded overflow-hidden",
232
248
  children: [
233
249
  /* @__PURE__ */ s("div", {
234
- className: "bg-blue-500",
250
+ className: "bg-status-info-text",
235
251
  style: { width: `${e.male}%` }
236
252
  }),
237
253
  /* @__PURE__ */ s("div", {
238
- className: "bg-purple-500",
254
+ className: "bg-action-primary-bg",
239
255
  style: { width: `${e.female}%` }
240
256
  }),
241
257
  /* @__PURE__ */ s("div", {
242
- className: "bg-green-500",
258
+ className: "bg-status-success-text",
243
259
  style: { width: `${e.other}%` }
244
260
  })
245
261
  ]
@@ -248,7 +264,7 @@ function g() {
248
264
  }) })] }),
249
265
  /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ c(p, { children: [/* @__PURE__ */ s(m, { children: "Department Budget Status" }), /* @__PURE__ */ s(f, { children: "Annual budget allocation and headcount" })] }), /* @__PURE__ */ c(d, { children: [
250
266
  /* @__PURE__ */ c("div", {
251
- className: "grid grid-cols-5 gap-2 text-xs font-medium text-muted-foreground border-b pb-2 mb-2",
267
+ className: "grid grid-cols-5 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2",
252
268
  children: [
253
269
  /* @__PURE__ */ s("span", { children: "Department" }),
254
270
  /* @__PURE__ */ s("span", { children: "Head" }),
@@ -266,7 +282,7 @@ function g() {
266
282
  })
267
283
  ]
268
284
  }),
269
- _.map((e) => {
285
+ y.map((e) => {
270
286
  let t = e.employeeCount > 0 ? Math.round(e.budget / e.employeeCount) : 0;
271
287
  return /* @__PURE__ */ c("div", {
272
288
  className: "grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm",
@@ -276,7 +292,7 @@ function g() {
276
292
  children: e.name
277
293
  }),
278
294
  /* @__PURE__ */ s("span", {
279
- className: "text-muted-foreground",
295
+ className: "text-text-secondary",
280
296
  children: e.headName
281
297
  }),
282
298
  /* @__PURE__ */ s("span", {
@@ -302,7 +318,7 @@ function g() {
302
318
  ]
303
319
  }, e.id);
304
320
  }),
305
- /* @__PURE__ */ s(h, { className: "my-2" }),
321
+ /* @__PURE__ */ s(_, { className: "my-2" }),
306
322
  /* @__PURE__ */ c("div", {
307
323
  className: "grid grid-cols-5 gap-2 text-sm font-bold",
308
324
  children: [
@@ -310,13 +326,13 @@ function g() {
310
326
  /* @__PURE__ */ s("span", {}),
311
327
  /* @__PURE__ */ s("span", {
312
328
  className: "text-right",
313
- children: _.reduce((e, t) => e + t.employeeCount, 0)
329
+ children: y.reduce((e, t) => e + t.employeeCount, 0)
314
330
  }),
315
331
  /* @__PURE__ */ c("span", {
316
332
  className: "text-right",
317
333
  children: [
318
334
  "$",
319
- (w / 1e6).toFixed(1),
335
+ (E / 1e6).toFixed(1),
320
336
  "M"
321
337
  ]
322
338
  }),
@@ -324,7 +340,7 @@ function g() {
324
340
  className: "text-right",
325
341
  children: [
326
342
  "$",
327
- (w / _.reduce((e, t) => e + t.employeeCount, 0) / 1e3).toFixed(0),
343
+ (E / y.reduce((e, t) => e + t.employeeCount, 0) / 1e3).toFixed(0),
328
344
  "K"
329
345
  ]
330
346
  })
@@ -335,6 +351,6 @@ function g() {
335
351
  });
336
352
  }
337
353
  //#endregion
338
- export { g as DashboardExecutiveDashboardPage };
354
+ export { v as DashboardExecutiveDashboardPage };
339
355
 
340
356
  //# sourceMappingURL=DashboardExecutiveDashboardPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardExecutiveDashboardPage.js","names":[],"sources":["../../../src/crewfoundry/pages/DashboardExecutiveDashboardPage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Separator,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowUp, Building2, DollarSign, Percent, Target } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function DashboardExecutiveDashboardPage() {\n const { employees, departments, projects, jobPostings } = useCrewFoundryStore();\n\n const quarterlyRevenue = useMemo(() => {\n const quarters = ['Q1 2025', 'Q2 2025', 'Q3 2025', 'Q4 2025'];\n const base = projects.reduce((sum, project) => sum + project.budget, 0) || 1000000;\n return quarters.map((quarter, index) => {\n const revenue = Math.round(base * (0.55 + index * 0.08));\n const headcount = Math.max(1, employees.length - (3 - index) * 4);\n return {\n quarter,\n revenue,\n headcount,\n revenuePerHead: Math.round(revenue / headcount),\n };\n });\n }, [employees.length, projects]);\n\n const riskIndicators = useMemo(\n () => [\n {\n metric: 'Flight Risk Employees',\n value: employees.filter((employee) => employee.performanceScore < 3.6).length,\n severity: 'warning' as const,\n detail: `${Math.round((employees.filter((employee) => employee.performanceScore < 3.6).length / Math.max(employees.length, 1)) * 100)}% of workforce`,\n },\n {\n metric: 'Overdue Performance Reviews',\n value: employees.filter((employee) => employee.status === 'on_leave').length,\n severity: 'error' as const,\n detail: 'Review follow-ups required',\n },\n {\n metric: 'Unfilled Critical Roles',\n value: jobPostings.filter(\n (posting) => posting.status === 'active' && posting.experienceLevel === 'lead'\n ).length,\n severity: 'warning' as const,\n detail: 'Open lead-level positions',\n },\n {\n metric: 'Expiring Contracts',\n value: employees.filter((employee) => employee.type === 'contract').length,\n severity: 'info' as const,\n detail: 'Contract renewals in focus',\n },\n ],\n [employees, jobPostings]\n );\n\n const diversityMetrics = useMemo(() => {\n const byDepartment = departments.map((department) => {\n const count = employees.filter((employee) => employee.department === department.name).length;\n const male = Math.min(100, Math.round(45 + (count % 15)));\n const female = Math.min(100 - male, Math.round(40 + (count % 10)));\n const other = Math.max(0, 100 - male - female);\n return { category: department.name, male, female, other };\n });\n return [\n {\n category: 'Company',\n male: 52,\n female: 43,\n other: 5,\n },\n ...byDepartment.slice(0, 3),\n ];\n }, [departments, employees]);\n\n const totalSalaryBudget = employees.reduce((sum, e) => sum + e.salary, 0);\n const totalDeptBudget = departments.reduce((sum, d) => sum + d.budget, 0);\n const totalProjectBudget = projects.reduce((sum, p) => sum + p.budget, 0);\n const totalProjectSpent = projects.reduce((sum, p) => sum + p.spent, 0);\n const budgetUtilization = Math.round((totalProjectSpent / totalProjectBudget) * 100);\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\">Executive Dashboard</h1>\n <p className=\"text-sm text-muted-foreground\">\n Strategic workforce insights for leadership\n </p>\n </div>\n <Badge variant=\"outline\">Q1 2026</Badge>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Revenue per Employee</CardTitle>\n <DollarSign className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">$21,862</div>\n <div className=\"flex items-center text-xs text-green-600\">\n <ArrowUp className=\"h-3 w-3 mr-1\" />\n +2.0% from Q3\n </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\">Total Workforce Cost</CardTitle>\n <Building2 className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">${(totalSalaryBudget / 1000000).toFixed(1)}M</div>\n <p className=\"text-xs text-muted-foreground\">Annual salary expenditure</p>\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\">Budget Utilization</CardTitle>\n <Percent className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{budgetUtilization}%</div>\n <p className=\"text-xs text-muted-foreground\">\n ${(totalProjectSpent / 1000000).toFixed(1)}M of $\n {(totalProjectBudget / 1000000).toFixed(1)}M\n </p>\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\">Retention Rate</CardTitle>\n <Target className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">95.8%</div>\n <div className=\"flex items-center text-xs text-green-600\">\n <ArrowUp className=\"h-3 w-3 mr-1\" />\n +1.1% improvement\n </div>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>Revenue & Headcount Trend</CardTitle>\n <CardDescription>Quarterly performance metrics</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-4 gap-2 text-xs font-medium text-muted-foreground border-b pb-2 mb-2\">\n <span>Quarter</span>\n <span className=\"text-right\">Revenue</span>\n <span className=\"text-right\">Headcount</span>\n <span className=\"text-right\">Rev/Head</span>\n </div>\n {quarterlyRevenue.map((q) => (\n <div\n key={q.quarter}\n className=\"grid grid-cols-4 gap-2 py-2 border-b last:border-0 text-sm\"\n >\n <span className=\"font-medium\">{q.quarter}</span>\n <span className=\"text-right\">${(q.revenue / 1000000).toFixed(1)}M</span>\n <span className=\"text-right\">{q.headcount}</span>\n <span className=\"text-right font-medium\">${q.revenuePerHead.toLocaleString()}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Risk Indicators</CardTitle>\n <CardDescription>Items requiring executive attention</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {riskIndicators.map((risk) => (\n <div\n key={risk.metric}\n className=\"flex items-center justify-between rounded border p-3\"\n >\n <div className=\"flex items-center gap-3\">\n <div\n className={`h-3 w-3 rounded-full ${\n risk.severity === 'error'\n ? 'bg-red-500'\n : risk.severity === 'warning'\n ? 'bg-yellow-500'\n : 'bg-blue-500'\n }`}\n />\n <div>\n <p className=\"text-sm font-medium\">{risk.metric}</p>\n <p className=\"text-xs text-muted-foreground\">{risk.detail}</p>\n </div>\n </div>\n <span className=\"text-lg font-bold\">{risk.value}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Diversity & Inclusion Metrics</CardTitle>\n <CardDescription>Gender distribution across organization segments</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n {diversityMetrics.map((d) => (\n <div key={d.category} className=\"space-y-1\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"font-medium\">{d.category}</span>\n <span className=\"text-xs text-muted-foreground\">\n M: {d.male}% · F: {d.female}% · Other: {d.other}%\n </span>\n </div>\n <div className=\"flex h-3 rounded overflow-hidden\">\n <div className=\"bg-blue-500\" style={{ width: `${d.male}%` }} />\n <div className=\"bg-purple-500\" style={{ width: `${d.female}%` }} />\n <div className=\"bg-green-500\" style={{ width: `${d.other}%` }} />\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Department Budget Status</CardTitle>\n <CardDescription>Annual budget allocation and headcount</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-5 gap-2 text-xs font-medium text-muted-foreground border-b pb-2 mb-2\">\n <span>Department</span>\n <span>Head</span>\n <span className=\"text-right\">Headcount</span>\n <span className=\"text-right\">Budget</span>\n <span className=\"text-right\">Cost/Employee</span>\n </div>\n {departments.map((dept) => {\n const costPerEmp =\n dept.employeeCount > 0 ? Math.round(dept.budget / dept.employeeCount) : 0;\n return (\n <div\n key={dept.id}\n className=\"grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm\"\n >\n <span className=\"font-medium\">{dept.name}</span>\n <span className=\"text-muted-foreground\">{dept.headName}</span>\n <span className=\"text-right\">{dept.employeeCount}</span>\n <span className=\"text-right\">${(dept.budget / 1000000).toFixed(1)}M</span>\n <span className=\"text-right\">${(costPerEmp / 1000).toFixed(0)}K</span>\n </div>\n );\n })}\n <Separator className=\"my-2\" />\n <div className=\"grid grid-cols-5 gap-2 text-sm font-bold\">\n <span>Total</span>\n <span />\n <span className=\"text-right\">\n {departments.reduce((s, d) => s + d.employeeCount, 0)}\n </span>\n <span className=\"text-right\">${(totalDeptBudget / 1000000).toFixed(1)}M</span>\n <span className=\"text-right\">\n $\n {(\n totalDeptBudget /\n departments.reduce((s, d) => s + d.employeeCount, 0) /\n 1000\n ).toFixed(0)}\n K\n </span>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DashboardExecutiveDashboardPage.js","names":[],"sources":["../../../src/crewfoundry/pages/DashboardExecutiveDashboardPage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n Separator,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowUp, Building2, DollarSign, Percent, Target } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function DashboardExecutiveDashboardPage() {\n const { employees, departments, projects, jobPostings } = useCrewFoundryStore();\n\n const quarterlyRevenue = useMemo(() => {\n const quarters = ['Q1 2025', 'Q2 2025', 'Q3 2025', 'Q4 2025'];\n const base = projects.reduce((sum, project) => sum + project.budget, 0) || 1000000;\n return quarters.map((quarter, index) => {\n const revenue = Math.round(base * (0.55 + index * 0.08));\n const headcount = Math.max(1, employees.length - (3 - index) * 4);\n return {\n quarter,\n revenue,\n headcount,\n revenuePerHead: Math.round(revenue / headcount),\n };\n });\n }, [employees.length, projects]);\n\n const riskIndicators = useMemo(\n () => [\n {\n metric: 'Flight Risk Employees',\n value: employees.filter((employee) => employee.performanceScore < 3.6).length,\n severity: 'warning' as const,\n detail: `${Math.round((employees.filter((employee) => employee.performanceScore < 3.6).length / Math.max(employees.length, 1)) * 100)}% of workforce`,\n },\n {\n metric: 'Overdue Performance Reviews',\n value: employees.filter((employee) => employee.status === 'on_leave').length,\n severity: 'error' as const,\n detail: 'Review follow-ups required',\n },\n {\n metric: 'Unfilled Critical Roles',\n value: jobPostings.filter(\n (posting) => posting.status === 'active' && posting.experienceLevel === 'lead'\n ).length,\n severity: 'warning' as const,\n detail: 'Open lead-level positions',\n },\n {\n metric: 'Expiring Contracts',\n value: employees.filter((employee) => employee.type === 'contract').length,\n severity: 'info' as const,\n detail: 'Contract renewals in focus',\n },\n ],\n [employees, jobPostings]\n );\n\n const diversityMetrics = useMemo(() => {\n const byDepartment = departments.map((department) => {\n const count = employees.filter((employee) => employee.department === department.name).length;\n const male = Math.min(100, Math.round(45 + (count % 15)));\n const female = Math.min(100 - male, Math.round(40 + (count % 10)));\n const other = Math.max(0, 100 - male - female);\n return { category: department.name, male, female, other };\n });\n return [\n {\n category: 'Company',\n male: 52,\n female: 43,\n other: 5,\n },\n ...byDepartment.slice(0, 3),\n ];\n }, [departments, employees]);\n\n const totalSalaryBudget = employees.reduce((sum, e) => sum + e.salary, 0);\n const totalDeptBudget = departments.reduce((sum, d) => sum + d.budget, 0);\n const totalProjectBudget = projects.reduce((sum, p) => sum + p.budget, 0);\n const totalProjectSpent = projects.reduce((sum, p) => sum + p.spent, 0);\n const budgetUtilization = Math.round((totalProjectSpent / totalProjectBudget) * 100);\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>Executive Dashboard</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Strategic workforce insights for leadership</p>\n </div>\n <Badge variant=\"outline\">Q1 2026</Badge>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Revenue per Employee</CardTitle>\n <DollarSign className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">$21,862</div>\n <div className=\"flex items-center text-xs text-status-success-text\">\n <ArrowUp className=\"h-3 w-3 mr-1\" />\n +2.0% from Q3\n </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\">Total Workforce Cost</CardTitle>\n <Building2 className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n ${(totalSalaryBudget / 1000000).toFixed(1)}M\n </div>\n <p className=\"text-xs text-text-secondary\">Annual salary expenditure</p>\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\">Budget Utilization</CardTitle>\n <Percent className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{budgetUtilization}%</div>\n <p className=\"text-xs text-text-secondary\">\n ${(totalProjectSpent / 1000000).toFixed(1)}M of $\n {(totalProjectBudget / 1000000).toFixed(1)}M\n </p>\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\">Retention Rate</CardTitle>\n <Target className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">95.8%</div>\n <div className=\"flex items-center text-xs text-status-success-text\">\n <ArrowUp className=\"h-3 w-3 mr-1\" />\n +1.1% improvement\n </div>\n </CardContent>\n </GlassCard>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>Revenue & Headcount Trend</CardTitle>\n <CardDescription>Quarterly performance metrics</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-4 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2\">\n <span>Quarter</span>\n <span className=\"text-right\">Revenue</span>\n <span className=\"text-right\">Headcount</span>\n <span className=\"text-right\">Rev/Head</span>\n </div>\n {quarterlyRevenue.map((q) => (\n <div\n key={q.quarter}\n className=\"grid grid-cols-4 gap-2 py-2 border-b last:border-0 text-sm\"\n >\n <span className=\"font-medium\">{q.quarter}</span>\n <span className=\"text-right\">${(q.revenue / 1000000).toFixed(1)}M</span>\n <span className=\"text-right\">{q.headcount}</span>\n <span className=\"text-right font-medium\">${q.revenuePerHead.toLocaleString()}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Risk Indicators</CardTitle>\n <CardDescription>Items requiring executive attention</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {riskIndicators.map((risk) => (\n <div\n key={risk.metric}\n className=\"flex items-center justify-between rounded border p-3\"\n >\n <div className=\"flex items-center gap-3\">\n <div\n className={`h-3 w-3 rounded-full ${\n risk.severity === 'error'\n ? 'bg-status-error-text'\n : risk.severity === 'warning'\n ? 'bg-status-warning-text'\n : 'bg-status-info-text'\n }`}\n />\n <div>\n <p className=\"text-sm font-medium\">{risk.metric}</p>\n <p className=\"text-xs text-text-secondary\">{risk.detail}</p>\n </div>\n </div>\n <span className=\"text-lg font-bold\">{risk.value}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Diversity & Inclusion Metrics</CardTitle>\n <CardDescription>Gender distribution across organization segments</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n {diversityMetrics.map((d) => (\n <div key={d.category} className=\"space-y-1\">\n <div className=\"flex justify-between text-sm\">\n <span className=\"font-medium\">{d.category}</span>\n <span className=\"text-xs text-text-secondary\">\n M: {d.male}% · F: {d.female}% · Other: {d.other}%\n </span>\n </div>\n <div className=\"flex h-3 rounded overflow-hidden\">\n <div className=\"bg-status-info-text\" style={{ width: `${d.male}%` }} />\n <div className=\"bg-action-primary-bg\" style={{ width: `${d.female}%` }} />\n <div className=\"bg-status-success-text\" style={{ width: `${d.other}%` }} />\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Department Budget Status</CardTitle>\n <CardDescription>Annual budget allocation and headcount</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-5 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2\">\n <span>Department</span>\n <span>Head</span>\n <span className=\"text-right\">Headcount</span>\n <span className=\"text-right\">Budget</span>\n <span className=\"text-right\">Cost/Employee</span>\n </div>\n {departments.map((dept) => {\n const costPerEmp =\n dept.employeeCount > 0 ? Math.round(dept.budget / dept.employeeCount) : 0;\n return (\n <div\n key={dept.id}\n className=\"grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm\"\n >\n <span className=\"font-medium\">{dept.name}</span>\n <span className=\"text-text-secondary\">{dept.headName}</span>\n <span className=\"text-right\">{dept.employeeCount}</span>\n <span className=\"text-right\">${(dept.budget / 1000000).toFixed(1)}M</span>\n <span className=\"text-right\">${(costPerEmp / 1000).toFixed(0)}K</span>\n </div>\n );\n })}\n <Separator className=\"my-2\" />\n <div className=\"grid grid-cols-5 gap-2 text-sm font-bold\">\n <span>Total</span>\n <span />\n <span className=\"text-right\">\n {departments.reduce((s, d) => s + d.employeeCount, 0)}\n </span>\n <span className=\"text-right\">${(totalDeptBudget / 1000000).toFixed(1)}M</span>\n <span className=\"text-right\">\n $\n {(\n totalDeptBudget /\n departments.reduce((s, d) => s + d.employeeCount, 0) /\n 1000\n ).toFixed(0)}\n K\n </span>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}