@burdenoff/microfe-crewfoundry 2026.625.1 → 2026.626.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 +37 -29
  2. package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
  3. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +50 -42
  4. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  5. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +39 -31
  6. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
  7. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +52 -44
  8. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  9. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +46 -38
  10. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
  11. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +28 -15
  12. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  13. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +30 -22
  14. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
  15. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +87 -69
  16. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
  17. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +99 -80
  18. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
  19. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +86 -67
  20. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  21. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +31 -15
  22. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
  23. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +37 -29
  24. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
  25. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +29 -21
  26. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  27. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +25 -17
  28. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
  29. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +42 -35
  30. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
  31. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +80 -62
  32. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  33. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +41 -33
  34. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
  35. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +142 -108
  36. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  37. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +177 -136
  38. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
  39. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +44 -36
  40. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
  41. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +49 -38
  42. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
  43. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +26 -18
  44. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
  45. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +112 -93
  46. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  47. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +53 -46
  48. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  49. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +31 -23
  50. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  51. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +129 -90
  52. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/HiringJobsPagePage.js +96 -85
  54. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  55. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +26 -18
  56. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  57. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +47 -35
  58. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +33 -25
  60. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  61. package/dist/crewfoundry/pages/HrPayrollPagePage.js +36 -28
  62. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  63. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +27 -19
  64. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  65. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +27 -19
  66. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
  67. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +93 -75
  68. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +111 -70
  70. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  71. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +65 -53
  72. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
  73. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +35 -19
  74. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  75. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +33 -25
  76. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
  77. package/dist/crewfoundry/pages/LearningLearningPagePage.js +26 -18
  78. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
  79. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +80 -55
  80. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  81. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +33 -17
  82. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  83. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +31 -23
  84. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  85. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +29 -21
  86. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  87. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +35 -27
  88. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
  89. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +147 -112
  90. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
  91. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +31 -27
  92. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
  93. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +31 -23
  94. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  95. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +104 -85
  96. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
  97. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +75 -56
  98. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
  99. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +78 -60
  100. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  101. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +133 -92
  102. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
  103. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +93 -52
  104. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  105. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +28 -20
  106. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
  107. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +84 -65
  108. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  109. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +25 -17
  110. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  111. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +58 -40
  112. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
  113. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +41 -33
  114. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
  115. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +36 -29
  116. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
  117. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +103 -72
  118. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  119. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +43 -27
  120. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  121. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +28 -20
  122. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
  123. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +103 -62
  124. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
  125. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +83 -64
  126. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
  127. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +185 -144
  128. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  129. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +40 -24
  130. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  131. package/package.json +2 -2
@@ -1,90 +1,118 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
- import { Calendar as t, DollarSign as n, Target as r, Users as i } from "lucide-react";
3
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
4
- import { Badge as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d, GradientText as f, IllustratedEmptyState as p } from "@burdenoff/fe-libs/ui";
2
+ import { Calendar as t, DollarSign as n, FolderKanban as r, Target as i, Users as a } from "lucide-react";
3
+ import { useNavigate as o } from "react-router-dom";
4
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
5
+ import { Badge as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p, EmphasisPanel as m, GradientText as h, IllustratedEmptyState as g, NextSteps as _, PagePurpose as v } from "@burdenoff/fe-libs/ui";
5
6
  //#region src/crewfoundry/pages/ProjectsProjectDetailsPagePage.tsx
6
- function m() {
7
- let { projects: m } = e(), h = m[1];
8
- return h ? /* @__PURE__ */ o("div", {
7
+ function y() {
8
+ let y = o(), { projects: b } = e(), x = b[1];
9
+ return x ? /* @__PURE__ */ c("div", {
9
10
  className: "space-y-6 p-6 max-w-4xl",
10
11
  children: [
11
- /* @__PURE__ */ o("div", {
12
+ /* @__PURE__ */ c("div", {
12
13
  className: "flex items-center justify-between",
13
- children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
14
+ children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
14
15
  className: "text-2xl font-semibold",
15
- children: /* @__PURE__ */ a(f, { children: h.name })
16
- }), /* @__PURE__ */ a("p", {
16
+ children: /* @__PURE__ */ s(h, { children: x.name })
17
+ }), /* @__PURE__ */ s("p", {
17
18
  className: "text-sm text-text-secondary",
18
- children: h.description
19
- })] }), /* @__PURE__ */ o("div", {
19
+ children: x.description
20
+ })] }), /* @__PURE__ */ c("div", {
20
21
  className: "flex gap-1",
21
- children: [/* @__PURE__ */ a(s, {
22
- variant: h.priority === "critical" ? "destructive" : "default",
23
- children: h.priority
24
- }), /* @__PURE__ */ a(s, {
25
- variant: h.status === "active" ? "default" : "secondary",
26
- children: h.status
22
+ children: [/* @__PURE__ */ s(l, {
23
+ variant: x.priority === "critical" ? "destructive" : "default",
24
+ children: x.priority
25
+ }), /* @__PURE__ */ s(l, {
26
+ variant: x.status === "active" ? "default" : "secondary",
27
+ children: x.status
27
28
  })]
28
29
  })]
29
30
  }),
30
- /* @__PURE__ */ o("div", {
31
+ /* @__PURE__ */ s(v, { children: "Track a single project end-to-end — progress, budget, team, and timeline in one place — so you can spot risks early and keep delivery on schedule and on budget." }),
32
+ /* @__PURE__ */ s(_, {
33
+ storageKey: "crewfoundry-project-details",
34
+ steps: [
35
+ {
36
+ id: "all-projects",
37
+ label: "View all projects",
38
+ description: "See how this project compares across your portfolio.",
39
+ icon: /* @__PURE__ */ s(r, { className: "h-4 w-4" }),
40
+ onClick: () => y("../../projects/projects-page")
41
+ },
42
+ {
43
+ id: "team",
44
+ label: "Check the team",
45
+ description: "Review who is working on this and their workload.",
46
+ icon: /* @__PURE__ */ s(a, { className: "h-4 w-4" }),
47
+ onClick: () => y("../../teams/teams-page")
48
+ },
49
+ {
50
+ id: "new-project",
51
+ label: "Start a new project",
52
+ description: "Kick off the next piece of work.",
53
+ icon: /* @__PURE__ */ s(i, { className: "h-4 w-4" }),
54
+ onClick: () => y("../../projects/create-project-page")
55
+ }
56
+ ]
57
+ }),
58
+ /* @__PURE__ */ c("div", {
31
59
  className: "grid gap-4 md:grid-cols-4",
32
60
  children: [
33
- /* @__PURE__ */ a(c, { children: /* @__PURE__ */ o(l, {
61
+ /* @__PURE__ */ s(u, { children: /* @__PURE__ */ c(d, {
34
62
  className: "p-4 text-center",
35
63
  children: [
36
- /* @__PURE__ */ a(r, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
37
- /* @__PURE__ */ o("p", {
64
+ /* @__PURE__ */ s(i, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
65
+ /* @__PURE__ */ c("p", {
38
66
  className: "text-lg font-bold",
39
- children: [h.progress, "%"]
67
+ children: [x.progress, "%"]
40
68
  }),
41
- /* @__PURE__ */ a("p", {
69
+ /* @__PURE__ */ s("p", {
42
70
  className: "text-xs text-text-secondary",
43
71
  children: "Progress"
44
72
  })
45
73
  ]
46
74
  }) }),
47
- /* @__PURE__ */ a(c, { children: /* @__PURE__ */ o(l, {
75
+ /* @__PURE__ */ s(u, { children: /* @__PURE__ */ c(d, {
48
76
  className: "p-4 text-center",
49
77
  children: [
50
- /* @__PURE__ */ a(n, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
51
- /* @__PURE__ */ o("p", {
78
+ /* @__PURE__ */ s(n, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
79
+ /* @__PURE__ */ c("p", {
52
80
  className: "text-lg font-bold",
53
81
  children: [
54
82
  "$",
55
- (h.budget / 1e3).toFixed(0),
83
+ (x.budget / 1e3).toFixed(0),
56
84
  "K"
57
85
  ]
58
86
  }),
59
- /* @__PURE__ */ a("p", {
87
+ /* @__PURE__ */ s("p", {
60
88
  className: "text-xs text-text-secondary",
61
89
  children: "Budget"
62
90
  })
63
91
  ]
64
92
  }) }),
65
- /* @__PURE__ */ a(c, { children: /* @__PURE__ */ o(l, {
93
+ /* @__PURE__ */ s(u, { children: /* @__PURE__ */ c(d, {
66
94
  className: "p-4 text-center",
67
95
  children: [
68
- /* @__PURE__ */ a(i, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
69
- /* @__PURE__ */ a("p", {
96
+ /* @__PURE__ */ s(a, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
97
+ /* @__PURE__ */ s("p", {
70
98
  className: "text-lg font-bold",
71
- children: h.teamName
99
+ children: x.teamName
72
100
  }),
73
- /* @__PURE__ */ a("p", {
101
+ /* @__PURE__ */ s("p", {
74
102
  className: "text-xs text-text-secondary",
75
103
  children: "Team"
76
104
  })
77
105
  ]
78
106
  }) }),
79
- /* @__PURE__ */ a(c, { children: /* @__PURE__ */ o(l, {
107
+ /* @__PURE__ */ s(u, { children: /* @__PURE__ */ c(d, {
80
108
  className: "p-4 text-center",
81
109
  children: [
82
- /* @__PURE__ */ a(t, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
83
- /* @__PURE__ */ a("p", {
110
+ /* @__PURE__ */ s(t, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
111
+ /* @__PURE__ */ s("p", {
84
112
  className: "text-lg font-bold",
85
- children: h.endDate
113
+ children: x.endDate
86
114
  }),
87
- /* @__PURE__ */ a("p", {
115
+ /* @__PURE__ */ s("p", {
88
116
  className: "text-xs text-text-secondary",
89
117
  children: "Deadline"
90
118
  })
@@ -92,69 +120,72 @@ function m() {
92
120
  }) })
93
121
  ]
94
122
  }),
95
- /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, { children: "Task Progress" }) }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o("div", {
123
+ /* @__PURE__ */ c(m, { children: [/* @__PURE__ */ s("div", {
124
+ className: "mb-2 text-lg font-semibold",
125
+ children: "Task Progress"
126
+ }), /* @__PURE__ */ c("div", {
96
127
  className: "space-y-2",
97
- children: [/* @__PURE__ */ o("div", {
128
+ children: [/* @__PURE__ */ c("div", {
98
129
  className: "flex justify-between text-sm",
99
- children: [/* @__PURE__ */ o("span", { children: [
100
- h.completedTasks,
130
+ children: [/* @__PURE__ */ c("span", { children: [
131
+ x.completedTasks,
101
132
  " of ",
102
- h.tasks,
133
+ x.tasks,
103
134
  " tasks completed"
104
- ] }), /* @__PURE__ */ o("span", {
135
+ ] }), /* @__PURE__ */ c("span", {
105
136
  className: "font-medium",
106
- children: [h.progress, "%"]
137
+ children: [x.progress, "%"]
107
138
  })]
108
- }), /* @__PURE__ */ a("div", {
139
+ }), /* @__PURE__ */ s("div", {
109
140
  className: "h-3 bg-bg-sunken rounded overflow-hidden",
110
- children: /* @__PURE__ */ a("div", {
141
+ children: /* @__PURE__ */ s("div", {
111
142
  className: "h-3 bg-action-primary-bg rounded",
112
- style: { width: `${h.progress}%` }
143
+ style: { width: `${x.progress}%` }
113
144
  })
114
145
  })]
115
- }) })] }),
116
- /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, { children: "Budget Tracking" }) }), /* @__PURE__ */ o(l, { children: [/* @__PURE__ */ o("div", {
146
+ })] }),
147
+ /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ s(f, { children: /* @__PURE__ */ s(p, { children: "Budget Tracking" }) }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c("div", {
117
148
  className: "space-y-2",
118
- children: [/* @__PURE__ */ o("div", {
149
+ children: [/* @__PURE__ */ c("div", {
119
150
  className: "flex justify-between text-sm",
120
- children: [/* @__PURE__ */ o("span", { children: [
151
+ children: [/* @__PURE__ */ c("span", { children: [
121
152
  "Spent $",
122
- (h.spent / 1e3).toFixed(0),
153
+ (x.spent / 1e3).toFixed(0),
123
154
  "K of $",
124
- (h.budget / 1e3).toFixed(0),
155
+ (x.budget / 1e3).toFixed(0),
125
156
  "K"
126
- ] }), /* @__PURE__ */ o("span", {
157
+ ] }), /* @__PURE__ */ c("span", {
127
158
  className: "font-medium",
128
- children: [Math.round(h.spent / h.budget * 100), "%"]
159
+ children: [Math.round(x.spent / x.budget * 100), "%"]
129
160
  })]
130
- }), /* @__PURE__ */ a("div", {
161
+ }), /* @__PURE__ */ s("div", {
131
162
  className: "h-3 bg-bg-sunken rounded overflow-hidden",
132
- children: /* @__PURE__ */ a("div", {
133
- className: `h-3 rounded ${h.spent / h.budget > .9 ? "bg-status-error-text" : "bg-status-success-text"}`,
134
- style: { width: `${Math.round(h.spent / h.budget * 100)}%` }
163
+ children: /* @__PURE__ */ s("div", {
164
+ className: `h-3 rounded ${x.spent / x.budget > .9 ? "bg-status-error-text" : "bg-status-success-text"}`,
165
+ style: { width: `${Math.round(x.spent / x.budget * 100)}%` }
135
166
  })
136
167
  })]
137
- }), /* @__PURE__ */ o("div", {
168
+ }), /* @__PURE__ */ c("div", {
138
169
  className: "grid grid-cols-2 gap-4 mt-4 text-sm",
139
- children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
170
+ children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
140
171
  className: "text-xs text-text-secondary",
141
172
  children: "Manager"
142
- }), /* @__PURE__ */ a("p", {
173
+ }), /* @__PURE__ */ s("p", {
143
174
  className: "font-medium",
144
- children: h.managerName
145
- })] }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
175
+ children: x.managerName
176
+ })] }), /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
146
177
  className: "text-xs text-text-secondary",
147
178
  children: "Timeline"
148
- }), /* @__PURE__ */ o("p", { children: [
149
- h.startDate,
179
+ }), /* @__PURE__ */ c("p", { children: [
180
+ x.startDate,
150
181
  " — ",
151
- h.endDate
182
+ x.endDate
152
183
  ] })] })]
153
184
  })] })] })
154
185
  ]
155
- }) : /* @__PURE__ */ a("div", {
186
+ }) : /* @__PURE__ */ s("div", {
156
187
  className: "p-6",
157
- children: /* @__PURE__ */ a(p, {
188
+ children: /* @__PURE__ */ s(g, {
158
189
  illustration: "empty-search",
159
190
  title: "Project not found",
160
191
  description: "This project is no longer available."
@@ -162,6 +193,6 @@ function m() {
162
193
  });
163
194
  }
164
195
  //#endregion
165
- export { m as ProjectsProjectDetailsPagePage };
196
+ export { y as ProjectsProjectDetailsPagePage };
166
197
 
167
198
  //# sourceMappingURL=ProjectsProjectDetailsPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectsProjectDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/ProjectsProjectDetailsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GradientText,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { Calendar, DollarSign, Target, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function ProjectsProjectDetailsPagePage() {\n const { projects } = useCrewFoundryStore();\n const project = projects[1]; // Show second project for variety\n if (!project)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Project not found\"\n description=\"This project is no longer available.\"\n />\n </div>\n );\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{project.name}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{project.description}</p>\n </div>\n <div className=\"flex gap-1\">\n <Badge variant={project.priority === 'critical' ? 'destructive' : 'default'}>\n {project.priority}\n </Badge>\n <Badge variant={project.status === 'active' ? 'default' : 'secondary'}>\n {project.status}\n </Badge>\n </div>\n </div>\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Target className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{project.progress}%</p>\n <p className=\"text-xs text-text-secondary\">Progress</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <DollarSign className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">${(project.budget / 1000).toFixed(0)}K</p>\n <p className=\"text-xs text-text-secondary\">Budget</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{project.teamName}</p>\n <p className=\"text-xs text-text-secondary\">Team</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Calendar className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{project.endDate}</p>\n <p className=\"text-xs text-text-secondary\">Deadline</p>\n </CardContent>\n </Card>\n </div>\n <Card>\n <CardHeader>\n <CardTitle>Task Progress</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span>\n {project.completedTasks} of {project.tasks} tasks completed\n </span>\n <span className=\"font-medium\">{project.progress}%</span>\n </div>\n <div className=\"h-3 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-3 bg-action-primary-bg rounded\"\n style={{ width: `${project.progress}%` }}\n />\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Budget Tracking</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span>\n Spent ${(project.spent / 1000).toFixed(0)}K of ${(project.budget / 1000).toFixed(0)}\n K\n </span>\n <span className=\"font-medium\">\n {Math.round((project.spent / project.budget) * 100)}%\n </span>\n </div>\n <div className=\"h-3 bg-bg-sunken rounded overflow-hidden\">\n <div\n className={`h-3 rounded ${project.spent / project.budget > 0.9 ? 'bg-status-error-text' : 'bg-status-success-text'}`}\n style={{ width: `${Math.round((project.spent / project.budget) * 100)}%` }}\n />\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-4 mt-4 text-sm\">\n <div>\n <p className=\"text-xs text-text-secondary\">Manager</p>\n <p className=\"font-medium\">{project.managerName}</p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Timeline</p>\n <p>\n {project.startDate} — {project.endDate}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ProjectsProjectDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/ProjectsProjectDetailsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n EmphasisPanel,\n GradientText,\n IllustratedEmptyState,\n NextSteps,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { Calendar, DollarSign, FolderKanban, Target, Users } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function ProjectsProjectDetailsPagePage() {\n const navigate = useNavigate();\n const { projects } = useCrewFoundryStore();\n const project = projects[1]; // Show second project for variety\n if (!project)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Project not found\"\n description=\"This project is no longer available.\"\n />\n </div>\n );\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{project.name}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{project.description}</p>\n </div>\n <div className=\"flex gap-1\">\n <Badge variant={project.priority === 'critical' ? 'destructive' : 'default'}>\n {project.priority}\n </Badge>\n <Badge variant={project.status === 'active' ? 'default' : 'secondary'}>\n {project.status}\n </Badge>\n </div>\n </div>\n <PagePurpose>\n Track a single project end-to-end — progress, budget, team, and timeline in one place — so\n you can spot risks early and keep delivery on schedule and on budget.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"crewfoundry-project-details\"\n steps={[\n {\n id: 'all-projects',\n label: 'View all projects',\n description: 'See how this project compares across your portfolio.',\n icon: <FolderKanban className=\"h-4 w-4\" />,\n onClick: () => navigate('../../projects/projects-page'),\n },\n {\n id: 'team',\n label: 'Check the team',\n description: 'Review who is working on this and their workload.',\n icon: <Users className=\"h-4 w-4\" />,\n onClick: () => navigate('../../teams/teams-page'),\n },\n {\n id: 'new-project',\n label: 'Start a new project',\n description: 'Kick off the next piece of work.',\n icon: <Target className=\"h-4 w-4\" />,\n onClick: () => navigate('../../projects/create-project-page'),\n },\n ]}\n />\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Target className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{project.progress}%</p>\n <p className=\"text-xs text-text-secondary\">Progress</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <DollarSign className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">${(project.budget / 1000).toFixed(0)}K</p>\n <p className=\"text-xs text-text-secondary\">Budget</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{project.teamName}</p>\n <p className=\"text-xs text-text-secondary\">Team</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Calendar className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{project.endDate}</p>\n <p className=\"text-xs text-text-secondary\">Deadline</p>\n </CardContent>\n </Card>\n </div>\n <EmphasisPanel>\n <div className=\"mb-2 text-lg font-semibold\">Task Progress</div>\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span>\n {project.completedTasks} of {project.tasks} tasks completed\n </span>\n <span className=\"font-medium\">{project.progress}%</span>\n </div>\n <div className=\"h-3 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-3 bg-action-primary-bg rounded\"\n style={{ width: `${project.progress}%` }}\n />\n </div>\n </div>\n </EmphasisPanel>\n <Card>\n <CardHeader>\n <CardTitle>Budget Tracking</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span>\n Spent ${(project.spent / 1000).toFixed(0)}K of ${(project.budget / 1000).toFixed(0)}\n K\n </span>\n <span className=\"font-medium\">\n {Math.round((project.spent / project.budget) * 100)}%\n </span>\n </div>\n <div className=\"h-3 bg-bg-sunken rounded overflow-hidden\">\n <div\n className={`h-3 rounded ${project.spent / project.budget > 0.9 ? 'bg-status-error-text' : 'bg-status-success-text'}`}\n style={{ width: `${Math.round((project.spent / project.budget) * 100)}%` }}\n />\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-4 mt-4 text-sm\">\n <div>\n <p className=\"text-xs text-text-secondary\">Manager</p>\n <p className=\"font-medium\">{project.managerName}</p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Timeline</p>\n <p>\n {project.startDate} — {project.endDate}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,39 +1,55 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { Plus as t } from "lucide-react";
3
3
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
- import { Badge as i, Button as a, Card as o, CardContent as s, CardDescription as c, CardHeader as l, CardTitle as u, GradientText as d } from "@burdenoff/fe-libs/ui";
5
- import { useI18n as f } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
4
+ import { Badge as i, Button as a, CardContent as o, CardDescription as s, CardHeader as c, CardTitle as l, GlassCard as u, GradientText as d, IllustratedEmptyState as f, PagePurpose as p } from "@burdenoff/fe-libs/ui";
5
+ import { useI18n as m } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
6
6
  //#region src/crewfoundry/pages/ProjectsProjectsPagePage.tsx
7
- function p() {
8
- let { t: p } = f(), { projects: m } = e(), h = m.filter((e) => e.status === "active"), g = (e, t) => {
9
- let n = p(e);
7
+ function h() {
8
+ let { t: h } = m(), { projects: g } = e(), _ = g.filter((e) => e.status === "active"), v = (e, t) => {
9
+ let n = h(e);
10
10
  return n === e ? t : n;
11
11
  };
12
12
  return /* @__PURE__ */ r("div", {
13
13
  className: "space-y-6 p-6",
14
14
  children: [/* @__PURE__ */ r("div", {
15
15
  className: "flex items-center justify-between",
16
- children: [/* @__PURE__ */ r("div", { children: [/* @__PURE__ */ n("h1", {
17
- className: "text-2xl font-semibold",
18
- children: /* @__PURE__ */ n(d, { children: g("crewfoundry.projects.title", "Projects") })
19
- }), /* @__PURE__ */ r("p", {
20
- className: "text-sm text-text-secondary",
21
- children: [
22
- h.length,
23
- " ",
24
- g("crewfoundry.projects.summary.activeProjects", "active projects")
25
- ]
26
- })] }), /* @__PURE__ */ r(a, {
16
+ children: [/* @__PURE__ */ r("div", { children: [
17
+ /* @__PURE__ */ n("h1", {
18
+ className: "text-2xl font-semibold",
19
+ children: /* @__PURE__ */ n(d, { children: v("crewfoundry.projects.title", "Projects") })
20
+ }),
21
+ /* @__PURE__ */ r("p", {
22
+ className: "text-sm text-text-secondary",
23
+ children: [
24
+ _.length,
25
+ " ",
26
+ v("crewfoundry.projects.summary.activeProjects", "active projects")
27
+ ]
28
+ }),
29
+ /* @__PURE__ */ n(p, {
30
+ className: "mt-1",
31
+ children: "All your projects in one view — track status, progress, and budgets so nothing stalls and everything ships on time."
32
+ })
33
+ ] }), /* @__PURE__ */ r(a, {
27
34
  size: "sm",
28
- children: [/* @__PURE__ */ n(t, { className: "h-4 w-4 mr-1" }), g("crewfoundry.projects.actions.newProject", "New Project")]
35
+ children: [/* @__PURE__ */ n(t, { className: "h-4 w-4 mr-1" }), v("crewfoundry.projects.actions.newProject", "New Project")]
29
36
  })]
30
37
  }), /* @__PURE__ */ n("div", {
31
38
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
32
- children: m.map((e) => /* @__PURE__ */ r(o, {
39
+ children: g.length === 0 ? /* @__PURE__ */ n("div", {
40
+ className: "col-span-full",
41
+ children: /* @__PURE__ */ n(f, {
42
+ illustration: "empty-data",
43
+ title: "No projects yet",
44
+ description: "Create your first project to start tracking work."
45
+ })
46
+ }) : g.map((e, t) => /* @__PURE__ */ r(u, {
47
+ treatment: t === 0 ? "glass" : "plain",
48
+ glow: t === 0,
33
49
  className: "hover:shadow-md transition-shadow cursor-pointer",
34
- children: [/* @__PURE__ */ r(l, { children: [/* @__PURE__ */ r("div", {
50
+ children: [/* @__PURE__ */ r(c, { children: [/* @__PURE__ */ r("div", {
35
51
  className: "flex items-center justify-between",
36
- children: [/* @__PURE__ */ n(u, {
52
+ children: [/* @__PURE__ */ n(l, {
37
53
  className: "text-base",
38
54
  children: e.name
39
55
  }), /* @__PURE__ */ n(i, {
@@ -41,7 +57,7 @@ function p() {
41
57
  className: "text-[10px]",
42
58
  children: e.status
43
59
  })]
44
- }), /* @__PURE__ */ n(c, { children: e.description })] }), /* @__PURE__ */ r(s, { children: [
60
+ }), /* @__PURE__ */ n(s, { children: e.description })] }), /* @__PURE__ */ r(o, { children: [
45
61
  /* @__PURE__ */ r("div", {
46
62
  className: "space-y-2 mb-3",
47
63
  children: [/* @__PURE__ */ r("div", {
@@ -51,7 +67,7 @@ function p() {
51
67
  "/",
52
68
  e.tasks,
53
69
  " ",
54
- g("crewfoundry.projects.card.tasks", "tasks")
70
+ v("crewfoundry.projects.card.tasks", "tasks")
55
71
  ] }), /* @__PURE__ */ r("span", { children: [e.progress, "%"] })]
56
72
  }), /* @__PURE__ */ n("div", {
57
73
  className: "h-2 bg-bg-sunken rounded overflow-hidden",
@@ -65,23 +81,23 @@ function p() {
65
81
  className: "grid grid-cols-2 gap-2 text-xs text-text-secondary",
66
82
  children: [
67
83
  /* @__PURE__ */ r("span", { children: [
68
- g("crewfoundry.projects.card.team", "Team"),
84
+ v("crewfoundry.projects.card.team", "Team"),
69
85
  ": ",
70
86
  e.teamName
71
87
  ] }),
72
88
  /* @__PURE__ */ r("span", { children: [
73
- g("crewfoundry.projects.card.manager", "Manager"),
89
+ v("crewfoundry.projects.card.manager", "Manager"),
74
90
  ": ",
75
91
  e.managerName
76
92
  ] }),
77
93
  /* @__PURE__ */ r("span", { children: [
78
- g("crewfoundry.projects.card.budget", "Budget"),
94
+ v("crewfoundry.projects.card.budget", "Budget"),
79
95
  ": $",
80
96
  (e.budget / 1e3).toFixed(0),
81
97
  "K"
82
98
  ] }),
83
99
  /* @__PURE__ */ r("span", { children: [
84
- g("crewfoundry.projects.card.spent", "Spent"),
100
+ v("crewfoundry.projects.card.spent", "Spent"),
85
101
  ": $",
86
102
  (e.spent / 1e3).toFixed(0),
87
103
  "K"
@@ -110,6 +126,6 @@ function p() {
110
126
  });
111
127
  }
112
128
  //#endregion
113
- export { p as ProjectsProjectsPagePage };
129
+ export { h as ProjectsProjectsPagePage };
114
130
 
115
131
  //# sourceMappingURL=ProjectsProjectsPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectsProjectsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/ProjectsProjectsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { DollarSign, FolderKanban, Plus } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function ProjectsProjectsPagePage() {\n const { t: translate } = useI18n();\n const { projects } = useCrewFoundryStore();\n const activeProjects = projects.filter((p) => p.status === 'active');\n const t = (key: string, fallback: string) => {\n const value = translate(key);\n return value === key ? fallback : value;\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>{t('crewfoundry.projects.title', 'Projects')}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n {activeProjects.length}{' '}\n {t('crewfoundry.projects.summary.activeProjects', 'active projects')}\n </p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('crewfoundry.projects.actions.newProject', 'New Project')}\n </Button>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {projects.map((project) => (\n <Card key={project.id} className=\"hover:shadow-md transition-shadow cursor-pointer\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{project.name}</CardTitle>\n <Badge\n variant={\n project.status === 'active'\n ? 'default'\n : project.status === 'completed'\n ? 'secondary'\n : 'outline'\n }\n className=\"text-[10px]\"\n >\n {project.status}\n </Badge>\n </div>\n <CardDescription>{project.description}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2 mb-3\">\n <div className=\"flex justify-between text-xs\">\n <span>\n {project.completedTasks}/{project.tasks}{' '}\n {t('crewfoundry.projects.card.tasks', 'tasks')}\n </span>\n <span>{project.progress}%</span>\n </div>\n <div className=\"h-2 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-2 bg-action-primary-bg rounded\"\n style={{ width: `${project.progress}%` }}\n />\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-2 text-xs text-text-secondary\">\n <span>\n {t('crewfoundry.projects.card.team', 'Team')}: {project.teamName}\n </span>\n <span>\n {t('crewfoundry.projects.card.manager', 'Manager')}: {project.managerName}\n </span>\n <span>\n {t('crewfoundry.projects.card.budget', 'Budget')}: $\n {(project.budget / 1000).toFixed(0)}K\n </span>\n <span>\n {t('crewfoundry.projects.card.spent', 'Spent')}: $\n {(project.spent / 1000).toFixed(0)}K\n </span>\n </div>\n <div className=\"flex gap-1 mt-2\">\n <Badge\n variant={\n project.priority === 'critical'\n ? 'destructive'\n : project.priority === 'high'\n ? 'default'\n : 'secondary'\n }\n className=\"text-[10px]\"\n >\n {project.priority}\n </Badge>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {project.startDate} — {project.endDate}\n </Badge>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAcA,SAAgB,IAA2B;CACzC,IAAM,EAAE,GAAG,MAAc,GAAS,EAC5B,EAAE,gBAAa,GAAqB,EACpC,IAAiB,EAAS,QAAQ,MAAM,EAAE,WAAW,SAAS,EAC9D,KAAK,GAAa,MAAqB;EAC3C,IAAM,IAAQ,EAAU,EAAI;AAC5B,SAAO,MAAU,IAAM,IAAW;;AAGpC,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UAAe,EAAE,8BAA8B,WAAW,EAAgB,CAAA;IACvE,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cAAb;KACG,EAAe;KAAQ;KACvB,EAAE,+CAA+C,kBAAkB;KAClE;MACA,EAAA,CAAA,EACN,kBAAC,GAAD;IAAQ,MAAK;cAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAChC,EAAE,2CAA2C,cAAc,CACrD;MACL;MACN,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAS,KAAK,MACb,kBAAC,GAAD;IAAuB,WAAU;cAAjC,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MAAW,WAAU;gBAAa,EAAQ;MAAiB,CAAA,EAC3D,kBAAC,GAAD;MACE,SACE,EAAQ,WAAW,WACf,YACA,EAAQ,WAAW,cACjB,cACA;MAER,WAAU;gBAET,EAAQ;MACH,CAAA,CACJ;QACN,kBAAC,GAAD,EAAA,UAAkB,EAAQ,aAA8B,CAAA,CAC7C,EAAA,CAAA,EACb,kBAAC,GAAD,EAAA,UAAA;KACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD,EAAA,UAAA;QACG,EAAQ;QAAe;QAAE,EAAQ;QAAO;QACxC,EAAE,mCAAmC,QAAQ;QACzC,EAAA,CAAA,EACP,kBAAC,QAAD,EAAA,UAAA,CAAO,EAAQ,UAAS,IAAQ,EAAA,CAAA,CAC5B;UACN,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,OAAD;QACE,WAAU;QACV,OAAO,EAAE,OAAO,GAAG,EAAQ,SAAS,IAAI;QACxC,CAAA;OACE,CAAA,CACF;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,QAAD,EAAA,UAAA;QACG,EAAE,kCAAkC,OAAO;QAAC;QAAG,EAAQ;QACnD,EAAA,CAAA;OACP,kBAAC,QAAD,EAAA,UAAA;QACG,EAAE,qCAAqC,UAAU;QAAC;QAAG,EAAQ;QACzD,EAAA,CAAA;OACP,kBAAC,QAAD,EAAA,UAAA;QACG,EAAE,oCAAoC,SAAS;QAAC;SAC/C,EAAQ,SAAS,KAAM,QAAQ,EAAE;QAAC;QAC/B,EAAA,CAAA;OACP,kBAAC,QAAD,EAAA,UAAA;QACG,EAAE,mCAAmC,QAAQ;QAAC;SAC7C,EAAQ,QAAQ,KAAM,QAAQ,EAAE;QAAC;QAC9B,EAAA,CAAA;OACH;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD;OACE,SACE,EAAQ,aAAa,aACjB,gBACA,EAAQ,aAAa,SACnB,YACA;OAER,WAAU;iBAET,EAAQ;OACH,CAAA,EACR,kBAAC,GAAD;OAAO,SAAQ;OAAU,WAAU;iBAAnC;QACG,EAAQ;QAAU;QAAI,EAAQ;QACzB;SACJ;;KACM,EAAA,CAAA,CACT;MArEI,EAAQ,GAqEZ,CACP;GACE,CAAA,CACF"}
1
+ {"version":3,"file":"ProjectsProjectsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/ProjectsProjectsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { DollarSign, FolderKanban, Plus } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function ProjectsProjectsPagePage() {\n const { t: translate } = useI18n();\n const { projects } = useCrewFoundryStore();\n const activeProjects = projects.filter((p) => p.status === 'active');\n const t = (key: string, fallback: string) => {\n const value = translate(key);\n return value === key ? fallback : value;\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>{t('crewfoundry.projects.title', 'Projects')}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n {activeProjects.length}{' '}\n {t('crewfoundry.projects.summary.activeProjects', 'active projects')}\n </p>\n <PagePurpose className=\"mt-1\">All your projects in one view — track status, progress, and budgets so nothing stalls and everything ships on time.</PagePurpose>\n </div>\n <Button size=\"sm\">\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('crewfoundry.projects.actions.newProject', 'New Project')}\n </Button>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {projects.length === 0 ? (\n <div className=\"col-span-full\">\n <IllustratedEmptyState illustration=\"empty-data\" title=\"No projects yet\" description=\"Create your first project to start tracking work.\" />\n </div>\n ) : (\n projects.map((project, _idx) => (\n <GlassCard key={project.id} treatment={_idx === 0 ? 'glass' : 'plain'} glow={_idx === 0} className=\"hover:shadow-md transition-shadow cursor-pointer\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{project.name}</CardTitle>\n <Badge\n variant={\n project.status === 'active'\n ? 'default'\n : project.status === 'completed'\n ? 'secondary'\n : 'outline'\n }\n className=\"text-[10px]\"\n >\n {project.status}\n </Badge>\n </div>\n <CardDescription>{project.description}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2 mb-3\">\n <div className=\"flex justify-between text-xs\">\n <span>\n {project.completedTasks}/{project.tasks}{' '}\n {t('crewfoundry.projects.card.tasks', 'tasks')}\n </span>\n <span>{project.progress}%</span>\n </div>\n <div className=\"h-2 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-2 bg-action-primary-bg rounded\"\n style={{ width: `${project.progress}%` }}\n />\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-2 text-xs text-text-secondary\">\n <span>\n {t('crewfoundry.projects.card.team', 'Team')}: {project.teamName}\n </span>\n <span>\n {t('crewfoundry.projects.card.manager', 'Manager')}: {project.managerName}\n </span>\n <span>\n {t('crewfoundry.projects.card.budget', 'Budget')}: $\n {(project.budget / 1000).toFixed(0)}K\n </span>\n <span>\n {t('crewfoundry.projects.card.spent', 'Spent')}: $\n {(project.spent / 1000).toFixed(0)}K\n </span>\n </div>\n <div className=\"flex gap-1 mt-2\">\n <Badge\n variant={\n project.priority === 'critical'\n ? 'destructive'\n : project.priority === 'high'\n ? 'default'\n : 'secondary'\n }\n className=\"text-[10px]\"\n >\n {project.priority}\n </Badge>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {project.startDate} — {project.endDate}\n </Badge>\n </div>\n </CardContent>\n </GlassCard>\n )))}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,33 +1,41 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { Star as t, TrendingUp as n, Users as r } from "lucide-react";
3
3
  import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
- import { Badge as o, Card as s, CardContent as c, CardHeader as l, CardTitle as u, GlassCard as d, GradientText as f } from "@burdenoff/fe-libs/ui";
4
+ import { Badge as o, Card as s, CardContent as c, CardHeader as l, CardTitle as u, GlassCard as d, GradientText as f, PagePurpose as p } from "@burdenoff/fe-libs/ui";
5
5
  //#region src/crewfoundry/pages/TeamsTeamAnalyticsPagePage.tsx
6
- function p() {
7
- let { teams: p, employees: m, projects: h } = e(), g = p.map((e) => {
8
- let t = m.filter((t) => e.members.includes(t.id)), n = t.length > 0 ? (t.reduce((e, t) => e + t.performanceScore, 0) / t.length).toFixed(1) : "0", r = h.filter((t) => t.teamId === e.id), i = r.filter((e) => e.status === "active").length;
6
+ function m() {
7
+ let { teams: m, employees: h, projects: g } = e(), _ = m.map((e) => {
8
+ let t = h.filter((t) => e.members.includes(t.id)), n = t.length > 0 ? (t.reduce((e, t) => e + t.performanceScore, 0) / t.length).toFixed(1) : "0", r = g.filter((t) => t.teamId === e.id), i = r.filter((e) => e.status === "active").length;
9
9
  return {
10
10
  ...e,
11
11
  avgPerf: n,
12
12
  activeProjects: i,
13
13
  totalProjects: r.length
14
14
  };
15
- }), _ = Math.max(...p.map((e) => e.memberCount));
15
+ }), v = Math.max(...m.map((e) => e.memberCount));
16
16
  return /* @__PURE__ */ a("div", {
17
17
  className: "space-y-6 p-6",
18
18
  children: [
19
- /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("h1", {
20
- className: "text-2xl font-semibold",
21
- children: /* @__PURE__ */ i(f, { children: "Team Analytics" })
22
- }), /* @__PURE__ */ i("p", {
23
- className: "text-sm text-text-secondary",
24
- children: "Performance and productivity metrics across teams"
25
- })] }),
19
+ /* @__PURE__ */ a("div", { children: [
20
+ /* @__PURE__ */ i("h1", {
21
+ className: "text-2xl font-semibold",
22
+ children: /* @__PURE__ */ i(f, { children: "Team Analytics" })
23
+ }),
24
+ /* @__PURE__ */ i("p", {
25
+ className: "text-sm text-text-secondary",
26
+ children: "Performance and productivity metrics across teams"
27
+ }),
28
+ /* @__PURE__ */ i(p, {
29
+ className: "mt-1",
30
+ children: "Understand how your teams are performing — productivity, workload, and trends that help you balance and support your groups."
31
+ })
32
+ ] }),
26
33
  /* @__PURE__ */ a("div", {
27
34
  className: "grid gap-4 md:grid-cols-3",
28
35
  children: [
29
36
  /* @__PURE__ */ a(d, {
30
- treatment: "metric",
37
+ treatment: "glass",
38
+ glow: !0,
31
39
  className: "border-border-seam",
32
40
  children: [/* @__PURE__ */ a(l, {
33
41
  className: "flex flex-row items-center justify-between space-y-0 pb-2",
@@ -37,7 +45,7 @@ function p() {
37
45
  }), /* @__PURE__ */ i(r, { className: "h-4 w-4 text-text-secondary" })]
38
46
  }), /* @__PURE__ */ i(c, { children: /* @__PURE__ */ i("div", {
39
47
  className: "text-2xl font-bold tabular-nums",
40
- children: p.length
48
+ children: m.length
41
49
  }) })]
42
50
  }),
43
51
  /* @__PURE__ */ a(d, {
@@ -51,7 +59,7 @@ function p() {
51
59
  }), /* @__PURE__ */ i(r, { className: "h-4 w-4 text-text-secondary" })]
52
60
  }), /* @__PURE__ */ i(c, { children: /* @__PURE__ */ i("div", {
53
61
  className: "text-2xl font-bold tabular-nums",
54
- children: p.reduce((e, t) => e + t.memberCount, 0)
62
+ children: m.reduce((e, t) => e + t.memberCount, 0)
55
63
  }) })]
56
64
  }),
57
65
  /* @__PURE__ */ a(d, {
@@ -65,14 +73,14 @@ function p() {
65
73
  }), /* @__PURE__ */ i(n, { className: "h-4 w-4 text-text-secondary" })]
66
74
  }), /* @__PURE__ */ i(c, { children: /* @__PURE__ */ i("div", {
67
75
  className: "text-2xl font-bold tabular-nums",
68
- children: g.reduce((e, t) => e + t.activeProjects, 0)
76
+ children: _.reduce((e, t) => e + t.activeProjects, 0)
69
77
  }) })]
70
78
  })
71
79
  ]
72
80
  }),
73
81
  /* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i(l, { children: /* @__PURE__ */ i(u, { children: "Team Size Comparison" }) }), /* @__PURE__ */ i(c, {
74
82
  className: "space-y-3",
75
- children: p.sort((e, t) => t.memberCount - e.memberCount).map((e) => /* @__PURE__ */ a("div", {
83
+ children: m.sort((e, t) => t.memberCount - e.memberCount).map((e) => /* @__PURE__ */ a("div", {
76
84
  className: "flex items-center gap-3",
77
85
  children: [
78
86
  /* @__PURE__ */ i("span", {
@@ -83,7 +91,7 @@ function p() {
83
91
  className: "flex-1 h-4 bg-bg-sunken rounded overflow-hidden",
84
92
  children: /* @__PURE__ */ i("div", {
85
93
  className: "h-4 bg-action-primary-bg rounded",
86
- style: { width: `${Math.round(e.memberCount / _ * 100)}%` }
94
+ style: { width: `${Math.round(e.memberCount / v * 100)}%` }
87
95
  })
88
96
  }),
89
97
  /* @__PURE__ */ i("span", {
@@ -111,7 +119,7 @@ function p() {
111
119
  children: "Status"
112
120
  })
113
121
  ]
114
- }), g.map((e) => /* @__PURE__ */ a("div", {
122
+ }), _.map((e) => /* @__PURE__ */ a("div", {
115
123
  className: "grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm",
116
124
  children: [
117
125
  /* @__PURE__ */ i("span", {
@@ -148,6 +156,6 @@ function p() {
148
156
  });
149
157
  }
150
158
  //#endregion
151
- export { p as TeamsTeamAnalyticsPagePage };
159
+ export { m as TeamsTeamAnalyticsPagePage };
152
160
 
153
161
  //# sourceMappingURL=TeamsTeamAnalyticsPagePage.js.map