@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.
- package/dist/crewfoundry/pages/AdminAdminPagePage.js +94 -78
- package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +112 -96
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +101 -85
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +131 -115
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +116 -100
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +15 -15
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +63 -51
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +16 -16
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +26 -26
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +28 -28
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +10 -10
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +71 -59
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +59 -47
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +77 -61
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +40 -40
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +13 -13
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +102 -86
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +173 -139
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +59 -59
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +113 -97
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +45 -45
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +85 -69
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +23 -23
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +40 -40
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +59 -47
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +52 -48
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +31 -26
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +61 -49
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +83 -67
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +90 -74
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +90 -74
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +83 -67
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +54 -42
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +16 -16
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +39 -35
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +24 -24
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +14 -14
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +81 -65
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js +73 -57
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +28 -28
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +12 -12
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +75 -59
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +57 -45
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +71 -59
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +48 -48
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +44 -43
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +58 -46
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +16 -16
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +23 -23
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +9 -9
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +43 -39
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +31 -27
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +59 -47
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +13 -13
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +66 -50
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +18 -18
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +74 -62
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +21 -21
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +47 -43
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +20 -20
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +58 -46
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +38 -34
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +14 -14
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +67 -67
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +16 -16
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,66 +1,78 @@
|
|
|
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 } 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 } from "@burdenoff/fe-libs/ui";
|
|
5
5
|
//#region src/crewfoundry/pages/TeamsTeamAnalyticsPagePage.tsx
|
|
6
|
-
function
|
|
7
|
-
let { teams:
|
|
8
|
-
let t =
|
|
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;
|
|
9
9
|
return {
|
|
10
10
|
...e,
|
|
11
11
|
avgPerf: n,
|
|
12
12
|
activeProjects: i,
|
|
13
13
|
totalProjects: r.length
|
|
14
14
|
};
|
|
15
|
-
}),
|
|
15
|
+
}), _ = Math.max(...p.map((e) => e.memberCount));
|
|
16
16
|
return /* @__PURE__ */ a("div", {
|
|
17
17
|
className: "space-y-6 p-6",
|
|
18
18
|
children: [
|
|
19
19
|
/* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("h1", {
|
|
20
20
|
className: "text-2xl font-semibold",
|
|
21
|
-
children: "Team Analytics"
|
|
21
|
+
children: /* @__PURE__ */ i(f, { children: "Team Analytics" })
|
|
22
22
|
}), /* @__PURE__ */ i("p", {
|
|
23
|
-
className: "text-sm text-
|
|
23
|
+
className: "text-sm text-text-secondary",
|
|
24
24
|
children: "Performance and productivity metrics across teams"
|
|
25
25
|
})] }),
|
|
26
26
|
/* @__PURE__ */ a("div", {
|
|
27
27
|
className: "grid gap-4 md:grid-cols-3",
|
|
28
28
|
children: [
|
|
29
|
-
/* @__PURE__ */ a(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
29
|
+
/* @__PURE__ */ a(d, {
|
|
30
|
+
treatment: "metric",
|
|
31
|
+
className: "border-border-seam",
|
|
32
|
+
children: [/* @__PURE__ */ a(l, {
|
|
33
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
34
|
+
children: [/* @__PURE__ */ i(u, {
|
|
35
|
+
className: "text-sm font-medium",
|
|
36
|
+
children: "Total Teams"
|
|
37
|
+
}), /* @__PURE__ */ i(r, { className: "h-4 w-4 text-text-secondary" })]
|
|
38
|
+
}), /* @__PURE__ */ i(c, { children: /* @__PURE__ */ i("div", {
|
|
39
|
+
className: "text-2xl font-bold tabular-nums",
|
|
40
|
+
children: p.length
|
|
41
|
+
}) })]
|
|
42
|
+
}),
|
|
43
|
+
/* @__PURE__ */ a(d, {
|
|
44
|
+
treatment: "metric",
|
|
45
|
+
className: "border-border-seam",
|
|
46
|
+
children: [/* @__PURE__ */ a(l, {
|
|
47
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
48
|
+
children: [/* @__PURE__ */ i(u, {
|
|
49
|
+
className: "text-sm font-medium",
|
|
50
|
+
children: "Total Members"
|
|
51
|
+
}), /* @__PURE__ */ i(r, { className: "h-4 w-4 text-text-secondary" })]
|
|
52
|
+
}), /* @__PURE__ */ i(c, { children: /* @__PURE__ */ i("div", {
|
|
53
|
+
className: "text-2xl font-bold tabular-nums",
|
|
54
|
+
children: p.reduce((e, t) => e + t.memberCount, 0)
|
|
55
|
+
}) })]
|
|
56
|
+
}),
|
|
57
|
+
/* @__PURE__ */ a(d, {
|
|
58
|
+
treatment: "metric",
|
|
59
|
+
className: "border-border-seam",
|
|
60
|
+
children: [/* @__PURE__ */ a(l, {
|
|
61
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
62
|
+
children: [/* @__PURE__ */ i(u, {
|
|
63
|
+
className: "text-sm font-medium",
|
|
64
|
+
children: "Active Projects"
|
|
65
|
+
}), /* @__PURE__ */ i(n, { className: "h-4 w-4 text-text-secondary" })]
|
|
66
|
+
}), /* @__PURE__ */ i(c, { children: /* @__PURE__ */ i("div", {
|
|
67
|
+
className: "text-2xl font-bold tabular-nums",
|
|
68
|
+
children: g.reduce((e, t) => e + t.activeProjects, 0)
|
|
69
|
+
}) })]
|
|
70
|
+
})
|
|
59
71
|
]
|
|
60
72
|
}),
|
|
61
73
|
/* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i(l, { children: /* @__PURE__ */ i(u, { children: "Team Size Comparison" }) }), /* @__PURE__ */ i(c, {
|
|
62
74
|
className: "space-y-3",
|
|
63
|
-
children:
|
|
75
|
+
children: p.sort((e, t) => t.memberCount - e.memberCount).map((e) => /* @__PURE__ */ a("div", {
|
|
64
76
|
className: "flex items-center gap-3",
|
|
65
77
|
children: [
|
|
66
78
|
/* @__PURE__ */ i("span", {
|
|
@@ -68,10 +80,10 @@ function d() {
|
|
|
68
80
|
children: e.name
|
|
69
81
|
}),
|
|
70
82
|
/* @__PURE__ */ i("div", {
|
|
71
|
-
className: "flex-1 h-4 bg-
|
|
83
|
+
className: "flex-1 h-4 bg-bg-sunken rounded overflow-hidden",
|
|
72
84
|
children: /* @__PURE__ */ i("div", {
|
|
73
|
-
className: "h-4 bg-primary rounded",
|
|
74
|
-
style: { width: `${Math.round(e.memberCount /
|
|
85
|
+
className: "h-4 bg-action-primary-bg rounded",
|
|
86
|
+
style: { width: `${Math.round(e.memberCount / _ * 100)}%` }
|
|
75
87
|
})
|
|
76
88
|
}),
|
|
77
89
|
/* @__PURE__ */ i("span", {
|
|
@@ -82,7 +94,7 @@ function d() {
|
|
|
82
94
|
}, e.id))
|
|
83
95
|
})] }),
|
|
84
96
|
/* @__PURE__ */ a(s, { children: [/* @__PURE__ */ i(l, { children: /* @__PURE__ */ i(u, { children: "Team Performance Overview" }) }), /* @__PURE__ */ a(c, { children: [/* @__PURE__ */ a("div", {
|
|
85
|
-
className: "grid grid-cols-5 gap-2 text-xs font-medium text-
|
|
97
|
+
className: "grid grid-cols-5 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2",
|
|
86
98
|
children: [
|
|
87
99
|
/* @__PURE__ */ i("span", { children: "Team" }),
|
|
88
100
|
/* @__PURE__ */ i("span", { children: "Department" }),
|
|
@@ -99,7 +111,7 @@ function d() {
|
|
|
99
111
|
children: "Status"
|
|
100
112
|
})
|
|
101
113
|
]
|
|
102
|
-
}),
|
|
114
|
+
}), g.map((e) => /* @__PURE__ */ a("div", {
|
|
103
115
|
className: "grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm",
|
|
104
116
|
children: [
|
|
105
117
|
/* @__PURE__ */ i("span", {
|
|
@@ -107,12 +119,12 @@ function d() {
|
|
|
107
119
|
children: e.name
|
|
108
120
|
}),
|
|
109
121
|
/* @__PURE__ */ i("span", {
|
|
110
|
-
className: "text-
|
|
122
|
+
className: "text-text-secondary",
|
|
111
123
|
children: e.department
|
|
112
124
|
}),
|
|
113
125
|
/* @__PURE__ */ a("div", {
|
|
114
126
|
className: "flex items-center justify-center gap-1",
|
|
115
|
-
children: [/* @__PURE__ */ i(t, { className: "h-3 w-3 text-
|
|
127
|
+
children: [/* @__PURE__ */ i(t, { className: "h-3 w-3 text-status-warning-text" }), e.avgPerf]
|
|
116
128
|
}),
|
|
117
129
|
/* @__PURE__ */ a("span", {
|
|
118
130
|
className: "text-right",
|
|
@@ -136,6 +148,6 @@ function d() {
|
|
|
136
148
|
});
|
|
137
149
|
}
|
|
138
150
|
//#endregion
|
|
139
|
-
export {
|
|
151
|
+
export { p as TeamsTeamAnalyticsPagePage };
|
|
140
152
|
|
|
141
153
|
//# sourceMappingURL=TeamsTeamAnalyticsPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TeamsTeamAnalyticsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/TeamsTeamAnalyticsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { BarChart3, Star, TrendingUp, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function TeamsTeamAnalyticsPagePage() {\n const { teams, employees, projects } = useCrewFoundryStore();\n\n const teamMetrics = teams.map((t) => {\n const members = employees.filter((e) => t.members.includes(e.id));\n const avgPerf =\n members.length > 0\n ? (members.reduce((s, m) => s + m.performanceScore, 0) / members.length).toFixed(1)\n : '0';\n const teamProjects = projects.filter((p) => p.teamId === t.id);\n const activeProj = teamProjects.filter((p) => p.status === 'active').length;\n return { ...t, avgPerf, activeProjects: activeProj, totalProjects: teamProjects.length };\n });\n\n const maxMembers = Math.max(...teams.map((t) => t.memberCount));\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Team Analytics</h1>\n <p className=\"text-sm text-
|
|
1
|
+
{"version":3,"file":"TeamsTeamAnalyticsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/TeamsTeamAnalyticsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { BarChart3, Star, TrendingUp, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function TeamsTeamAnalyticsPagePage() {\n const { teams, employees, projects } = useCrewFoundryStore();\n\n const teamMetrics = teams.map((t) => {\n const members = employees.filter((e) => t.members.includes(e.id));\n const avgPerf =\n members.length > 0\n ? (members.reduce((s, m) => s + m.performanceScore, 0) / members.length).toFixed(1)\n : '0';\n const teamProjects = projects.filter((p) => p.teamId === t.id);\n const activeProj = teamProjects.filter((p) => p.status === 'active').length;\n return { ...t, avgPerf, activeProjects: activeProj, totalProjects: teamProjects.length };\n });\n\n const maxMembers = Math.max(...teams.map((t) => t.memberCount));\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Team Analytics</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n Performance and productivity metrics across teams\n </p>\n </div>\n <div className=\"grid gap-4 md:grid-cols-3\">\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 Teams</CardTitle>\n <Users className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{teams.length}</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 Members</CardTitle>\n <Users className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {teams.reduce((s, t) => s + t.memberCount, 0)}\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\">Active Projects</CardTitle>\n <TrendingUp className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {teamMetrics.reduce((s, t) => s + t.activeProjects, 0)}\n </div>\n </CardContent>\n </GlassCard>\n </div>\n <Card>\n <CardHeader>\n <CardTitle>Team Size Comparison</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {teams\n .sort((a, b) => b.memberCount - a.memberCount)\n .map((t) => (\n <div key={t.id} className=\"flex items-center gap-3\">\n <span className=\"w-40 text-sm font-medium truncate\">{t.name}</span>\n <div className=\"flex-1 h-4 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-4 bg-action-primary-bg rounded\"\n style={{ width: `${Math.round((t.memberCount / maxMembers) * 100)}%` }}\n />\n </div>\n <span className=\"text-sm font-medium w-8 text-right\">{t.memberCount}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Team Performance Overview</CardTitle>\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>Team</span>\n <span>Department</span>\n <span className=\"text-center\">Avg Performance</span>\n <span className=\"text-right\">Active Projects</span>\n <span className=\"text-center\">Status</span>\n </div>\n {teamMetrics.map((t) => (\n <div key={t.id} className=\"grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm\">\n <span className=\"font-medium\">{t.name}</span>\n <span className=\"text-text-secondary\">{t.department}</span>\n <div className=\"flex items-center justify-center gap-1\">\n <Star className=\"h-3 w-3 text-status-warning-text\" />\n {t.avgPerf}\n </div>\n <span className=\"text-right\">\n {t.activeProjects}/{t.totalProjects}\n </span>\n <div className=\"text-center\">\n <Badge\n variant={t.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {t.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
2
|
import { Calendar as t, FolderKanban as n, Star as r, Users as i } from "lucide-react";
|
|
3
3
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
4
|
-
import { Badge as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d } from "@burdenoff/fe-libs/ui";
|
|
4
|
+
import { Badge as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d, GradientText as f, IllustratedEmptyState as p } from "@burdenoff/fe-libs/ui";
|
|
5
5
|
//#region src/crewfoundry/pages/TeamsTeamDetailPagePage.tsx
|
|
6
|
-
function
|
|
7
|
-
let { teams:
|
|
8
|
-
if (!
|
|
9
|
-
className: "p-6
|
|
10
|
-
children:
|
|
6
|
+
function m() {
|
|
7
|
+
let { teams: m, employees: h, projects: g } = e(), _ = m[0];
|
|
8
|
+
if (!_) return /* @__PURE__ */ a("div", {
|
|
9
|
+
className: "p-6",
|
|
10
|
+
children: /* @__PURE__ */ a(p, {
|
|
11
|
+
illustration: "empty-search",
|
|
12
|
+
title: "Team not found",
|
|
13
|
+
description: "This team is no longer available."
|
|
14
|
+
})
|
|
11
15
|
});
|
|
12
|
-
let
|
|
16
|
+
let v = h.filter((e) => _.members.includes(e.id)), y = g.filter((e) => e.teamId === _.id);
|
|
13
17
|
return /* @__PURE__ */ o("div", {
|
|
14
18
|
className: "space-y-6 p-6 max-w-4xl",
|
|
15
19
|
children: [
|
|
@@ -17,13 +21,13 @@ function f() {
|
|
|
17
21
|
className: "flex items-center justify-between",
|
|
18
22
|
children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
|
|
19
23
|
className: "text-2xl font-semibold",
|
|
20
|
-
children:
|
|
24
|
+
children: /* @__PURE__ */ a(f, { children: _.name })
|
|
21
25
|
}), /* @__PURE__ */ a("p", {
|
|
22
|
-
className: "text-sm text-
|
|
23
|
-
children:
|
|
26
|
+
className: "text-sm text-text-secondary",
|
|
27
|
+
children: _.description
|
|
24
28
|
})] }), /* @__PURE__ */ a(s, {
|
|
25
|
-
variant:
|
|
26
|
-
children:
|
|
29
|
+
variant: _.status === "active" ? "default" : "secondary",
|
|
30
|
+
children: _.status
|
|
27
31
|
})]
|
|
28
32
|
}),
|
|
29
33
|
/* @__PURE__ */ o("div", {
|
|
@@ -32,13 +36,13 @@ function f() {
|
|
|
32
36
|
/* @__PURE__ */ a(c, { children: /* @__PURE__ */ o(l, {
|
|
33
37
|
className: "p-4 text-center",
|
|
34
38
|
children: [
|
|
35
|
-
/* @__PURE__ */ a(i, { className: "h-5 w-5 mx-auto text-
|
|
39
|
+
/* @__PURE__ */ a(i, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
36
40
|
/* @__PURE__ */ a("p", {
|
|
37
41
|
className: "text-lg font-bold",
|
|
38
|
-
children:
|
|
42
|
+
children: _.memberCount
|
|
39
43
|
}),
|
|
40
44
|
/* @__PURE__ */ a("p", {
|
|
41
|
-
className: "text-xs text-
|
|
45
|
+
className: "text-xs text-text-secondary",
|
|
42
46
|
children: "Members"
|
|
43
47
|
})
|
|
44
48
|
]
|
|
@@ -46,13 +50,13 @@ function f() {
|
|
|
46
50
|
/* @__PURE__ */ a(c, { children: /* @__PURE__ */ o(l, {
|
|
47
51
|
className: "p-4 text-center",
|
|
48
52
|
children: [
|
|
49
|
-
/* @__PURE__ */ a(n, { className: "h-5 w-5 mx-auto text-
|
|
53
|
+
/* @__PURE__ */ a(n, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
50
54
|
/* @__PURE__ */ a("p", {
|
|
51
55
|
className: "text-lg font-bold",
|
|
52
|
-
children:
|
|
56
|
+
children: _.projectCount
|
|
53
57
|
}),
|
|
54
58
|
/* @__PURE__ */ a("p", {
|
|
55
|
-
className: "text-xs text-
|
|
59
|
+
className: "text-xs text-text-secondary",
|
|
56
60
|
children: "Projects"
|
|
57
61
|
})
|
|
58
62
|
]
|
|
@@ -60,13 +64,13 @@ function f() {
|
|
|
60
64
|
/* @__PURE__ */ a(c, { children: /* @__PURE__ */ o(l, {
|
|
61
65
|
className: "p-4 text-center",
|
|
62
66
|
children: [
|
|
63
|
-
/* @__PURE__ */ a(r, { className: "h-5 w-5 mx-auto text-
|
|
67
|
+
/* @__PURE__ */ a(r, { className: "h-5 w-5 mx-auto text-status-warning-text mb-1" }),
|
|
64
68
|
/* @__PURE__ */ a("p", {
|
|
65
69
|
className: "text-lg font-bold",
|
|
66
|
-
children:
|
|
70
|
+
children: _.leadName
|
|
67
71
|
}),
|
|
68
72
|
/* @__PURE__ */ a("p", {
|
|
69
|
-
className: "text-xs text-
|
|
73
|
+
className: "text-xs text-text-secondary",
|
|
70
74
|
children: "Lead"
|
|
71
75
|
})
|
|
72
76
|
]
|
|
@@ -74,13 +78,13 @@ function f() {
|
|
|
74
78
|
/* @__PURE__ */ a(c, { children: /* @__PURE__ */ o(l, {
|
|
75
79
|
className: "p-4 text-center",
|
|
76
80
|
children: [
|
|
77
|
-
/* @__PURE__ */ a(t, { className: "h-5 w-5 mx-auto text-
|
|
81
|
+
/* @__PURE__ */ a(t, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
78
82
|
/* @__PURE__ */ a("p", {
|
|
79
83
|
className: "text-lg font-bold",
|
|
80
|
-
children:
|
|
84
|
+
children: _.createdAt
|
|
81
85
|
}),
|
|
82
86
|
/* @__PURE__ */ a("p", {
|
|
83
|
-
className: "text-xs text-
|
|
87
|
+
className: "text-xs text-text-secondary",
|
|
84
88
|
children: "Created"
|
|
85
89
|
})
|
|
86
90
|
]
|
|
@@ -88,7 +92,7 @@ function f() {
|
|
|
88
92
|
]
|
|
89
93
|
}),
|
|
90
94
|
/* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, { children: "Team Members" }) }), /* @__PURE__ */ o(l, { children: [/* @__PURE__ */ o("div", {
|
|
91
|
-
className: "grid grid-cols-4 gap-2 text-xs font-medium text-
|
|
95
|
+
className: "grid grid-cols-4 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2",
|
|
92
96
|
children: [
|
|
93
97
|
/* @__PURE__ */ a("span", { children: "Name" }),
|
|
94
98
|
/* @__PURE__ */ a("span", { children: "Position" }),
|
|
@@ -101,7 +105,7 @@ function f() {
|
|
|
101
105
|
children: "Status"
|
|
102
106
|
})
|
|
103
107
|
]
|
|
104
|
-
}),
|
|
108
|
+
}), v.map((e) => /* @__PURE__ */ o("div", {
|
|
105
109
|
className: "grid grid-cols-4 gap-2 py-2 border-b last:border-0 text-sm",
|
|
106
110
|
children: [
|
|
107
111
|
/* @__PURE__ */ o("span", {
|
|
@@ -113,12 +117,12 @@ function f() {
|
|
|
113
117
|
]
|
|
114
118
|
}),
|
|
115
119
|
/* @__PURE__ */ a("span", {
|
|
116
|
-
className: "text-
|
|
120
|
+
className: "text-text-secondary",
|
|
117
121
|
children: e.position
|
|
118
122
|
}),
|
|
119
123
|
/* @__PURE__ */ o("div", {
|
|
120
124
|
className: "text-center flex items-center justify-center gap-1",
|
|
121
|
-
children: [/* @__PURE__ */ a(r, { className: "h-3 w-3 text-
|
|
125
|
+
children: [/* @__PURE__ */ a(r, { className: "h-3 w-3 text-status-warning-text" }), e.performanceScore]
|
|
122
126
|
}),
|
|
123
127
|
/* @__PURE__ */ a("div", {
|
|
124
128
|
className: "text-center",
|
|
@@ -130,15 +134,15 @@ function f() {
|
|
|
130
134
|
})
|
|
131
135
|
]
|
|
132
136
|
}, e.id))] })] }),
|
|
133
|
-
|
|
137
|
+
y.length > 0 && /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, { children: "Team Projects" }) }), /* @__PURE__ */ a(l, {
|
|
134
138
|
className: "space-y-3",
|
|
135
|
-
children:
|
|
139
|
+
children: y.map((e) => /* @__PURE__ */ o("div", {
|
|
136
140
|
className: "flex items-center justify-between rounded border p-3",
|
|
137
141
|
children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
|
|
138
142
|
className: "text-sm font-medium",
|
|
139
143
|
children: e.name
|
|
140
144
|
}), /* @__PURE__ */ o("p", {
|
|
141
|
-
className: "text-xs text-
|
|
145
|
+
className: "text-xs text-text-secondary",
|
|
142
146
|
children: [
|
|
143
147
|
e.startDate,
|
|
144
148
|
" — ",
|
|
@@ -148,9 +152,9 @@ function f() {
|
|
|
148
152
|
className: "flex items-center gap-2",
|
|
149
153
|
children: [
|
|
150
154
|
/* @__PURE__ */ a("div", {
|
|
151
|
-
className: "w-24 h-2 bg-
|
|
155
|
+
className: "w-24 h-2 bg-bg-sunken rounded overflow-hidden",
|
|
152
156
|
children: /* @__PURE__ */ a("div", {
|
|
153
|
-
className: "h-2 bg-primary rounded",
|
|
157
|
+
className: "h-2 bg-action-primary-bg rounded",
|
|
154
158
|
style: { width: `${e.progress}%` }
|
|
155
159
|
})
|
|
156
160
|
}),
|
|
@@ -171,6 +175,6 @@ function f() {
|
|
|
171
175
|
});
|
|
172
176
|
}
|
|
173
177
|
//#endregion
|
|
174
|
-
export {
|
|
178
|
+
export { m as TeamsTeamDetailPagePage };
|
|
175
179
|
|
|
176
180
|
//# sourceMappingURL=TeamsTeamDetailPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TeamsTeamDetailPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/TeamsTeamDetailPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { Calendar, FolderKanban, Star, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function TeamsTeamDetailPagePage() {\n const { teams, employees, projects } = useCrewFoundryStore();\n const team = teams[0];\n if (!team)
|
|
1
|
+
{"version":3,"file":"TeamsTeamDetailPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/TeamsTeamDetailPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GradientText,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { Calendar, FolderKanban, Star, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function TeamsTeamDetailPagePage() {\n const { teams, employees, projects } = useCrewFoundryStore();\n const team = teams[0];\n if (!team)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Team not found\"\n description=\"This team is no longer available.\"\n />\n </div>\n );\n const teamMembers = employees.filter((e) => team.members.includes(e.id));\n const teamProjects = projects.filter((p) => p.teamId === team.id);\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>{team.name}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{team.description}</p>\n </div>\n <Badge variant={team.status === 'active' ? 'default' : 'secondary'}>{team.status}</Badge>\n </div>\n <div className=\"grid gap-4 md:grid-cols-4\">\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\">{team.memberCount}</p>\n <p className=\"text-xs text-text-secondary\">Members</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <FolderKanban className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{team.projectCount}</p>\n <p className=\"text-xs text-text-secondary\">Projects</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Star className=\"h-5 w-5 mx-auto text-status-warning-text mb-1\" />\n <p className=\"text-lg font-bold\">{team.leadName}</p>\n <p className=\"text-xs text-text-secondary\">Lead</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\">{team.createdAt}</p>\n <p className=\"text-xs text-text-secondary\">Created</p>\n </CardContent>\n </Card>\n </div>\n <Card>\n <CardHeader>\n <CardTitle>Team Members</CardTitle>\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>Name</span>\n <span>Position</span>\n <span className=\"text-center\">Performance</span>\n <span className=\"text-center\">Status</span>\n </div>\n {teamMembers.map((emp) => (\n <div\n key={emp.id}\n className=\"grid grid-cols-4 gap-2 py-2 border-b last:border-0 text-sm\"\n >\n <span className=\"font-medium\">\n {emp.firstName} {emp.lastName}\n </span>\n <span className=\"text-text-secondary\">{emp.position}</span>\n <div className=\"text-center flex items-center justify-center gap-1\">\n <Star className=\"h-3 w-3 text-status-warning-text\" />\n {emp.performanceScore}\n </div>\n <div className=\"text-center\">\n <Badge\n variant={emp.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {emp.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n {teamProjects.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Team Projects</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {teamProjects.map((p) => (\n <div key={p.id} className=\"flex items-center justify-between rounded border p-3\">\n <div>\n <p className=\"text-sm font-medium\">{p.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {p.startDate} — {p.endDate}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"w-24 h-2 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-2 bg-action-primary-bg rounded\"\n style={{ width: `${p.progress}%` }}\n />\n </div>\n <span className=\"text-xs\">{p.progress}%</span>\n <Badge\n variant={p.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {p.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -2,33 +2,33 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
|
2
2
|
import { useState as t } from "react";
|
|
3
3
|
import { Search as n, Users as r } from "lucide-react";
|
|
4
4
|
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
-
import { Badge as o, Card as s, CardContent as c,
|
|
5
|
+
import { Badge as o, Card as s, CardContent as c, GradientText as l, Input as u } from "@burdenoff/fe-libs/ui";
|
|
6
6
|
//#region src/crewfoundry/pages/TeamsTeamDirectoryPagePage.tsx
|
|
7
|
-
function
|
|
8
|
-
let { teams:
|
|
7
|
+
function d() {
|
|
8
|
+
let { teams: d } = e(), [f, p] = t(""), m = d.filter((e) => `${e.name} ${e.department} ${e.leadName}`.toLowerCase().includes(f.toLowerCase()));
|
|
9
9
|
return /* @__PURE__ */ a("div", {
|
|
10
10
|
className: "space-y-6 p-6",
|
|
11
11
|
children: [
|
|
12
12
|
/* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("h1", {
|
|
13
13
|
className: "text-2xl font-semibold",
|
|
14
|
-
children: "Team Directory"
|
|
14
|
+
children: /* @__PURE__ */ i(l, { children: "Team Directory" })
|
|
15
15
|
}), /* @__PURE__ */ i("p", {
|
|
16
|
-
className: "text-sm text-
|
|
16
|
+
className: "text-sm text-text-secondary",
|
|
17
17
|
children: "Browse all teams in the organization"
|
|
18
18
|
})] }),
|
|
19
19
|
/* @__PURE__ */ a("div", {
|
|
20
20
|
className: "relative max-w-sm",
|
|
21
|
-
children: [/* @__PURE__ */ i(n, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-
|
|
21
|
+
children: [/* @__PURE__ */ i(n, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ i(u, {
|
|
22
22
|
placeholder: "Search teams...",
|
|
23
23
|
className: "pl-9",
|
|
24
|
-
value:
|
|
25
|
-
onChange: (e) =>
|
|
24
|
+
value: f,
|
|
25
|
+
onChange: (e) => p(e.target.value)
|
|
26
26
|
})]
|
|
27
27
|
}),
|
|
28
28
|
/* @__PURE__ */ i(s, { children: /* @__PURE__ */ a(c, {
|
|
29
29
|
className: "p-0",
|
|
30
30
|
children: [/* @__PURE__ */ a("div", {
|
|
31
|
-
className: "grid grid-cols-6 gap-2 text-xs font-medium text-
|
|
31
|
+
className: "grid grid-cols-6 gap-2 text-xs font-medium text-text-secondary p-4 border-b",
|
|
32
32
|
children: [
|
|
33
33
|
/* @__PURE__ */ i("span", { children: "Team" }),
|
|
34
34
|
/* @__PURE__ */ i("span", { children: "Description" }),
|
|
@@ -43,20 +43,20 @@ function u() {
|
|
|
43
43
|
children: "Status"
|
|
44
44
|
})
|
|
45
45
|
]
|
|
46
|
-
}),
|
|
47
|
-
className: "grid grid-cols-6 gap-2 py-3 px-4 border-b last:border-0 text-sm hover:bg-
|
|
46
|
+
}), m.map((e) => /* @__PURE__ */ a("div", {
|
|
47
|
+
className: "grid grid-cols-6 gap-2 py-3 px-4 border-b last:border-0 text-sm hover:bg-bg-sunken/50",
|
|
48
48
|
children: [
|
|
49
49
|
/* @__PURE__ */ i("span", {
|
|
50
50
|
className: "font-medium",
|
|
51
51
|
children: e.name
|
|
52
52
|
}),
|
|
53
53
|
/* @__PURE__ */ i("span", {
|
|
54
|
-
className: "text-
|
|
54
|
+
className: "text-text-secondary truncate",
|
|
55
55
|
children: e.description
|
|
56
56
|
}),
|
|
57
57
|
/* @__PURE__ */ i("span", { children: e.department }),
|
|
58
58
|
/* @__PURE__ */ i("span", {
|
|
59
|
-
className: "text-
|
|
59
|
+
className: "text-text-secondary",
|
|
60
60
|
children: e.leadName
|
|
61
61
|
}),
|
|
62
62
|
/* @__PURE__ */ a("span", {
|
|
@@ -78,6 +78,6 @@ function u() {
|
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
//#endregion
|
|
81
|
-
export {
|
|
81
|
+
export { d as TeamsTeamDirectoryPagePage };
|
|
82
82
|
|
|
83
83
|
//# sourceMappingURL=TeamsTeamDirectoryPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TeamsTeamDirectoryPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/TeamsTeamDirectoryPagePage.tsx"],"sourcesContent":["import { Badge, Card, CardContent, Input } from '@burdenoff/fe-libs/ui';\nimport { Search, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\nimport { useState } from 'react';\n\nexport function TeamsTeamDirectoryPagePage() {\n const { teams } = useCrewFoundryStore();\n const [search, setSearch] = useState('');\n const filtered = teams.filter((t) =>\n `${t.name} ${t.department} ${t.leadName}`.toLowerCase().includes(search.toLowerCase())\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Team Directory</h1>\n <p className=\"text-sm text-
|
|
1
|
+
{"version":3,"file":"TeamsTeamDirectoryPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/TeamsTeamDirectoryPagePage.tsx"],"sourcesContent":["import { Badge, Card, CardContent, GradientText, Input } from '@burdenoff/fe-libs/ui';\nimport { Search, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\nimport { useState } from 'react';\n\nexport function TeamsTeamDirectoryPagePage() {\n const { teams } = useCrewFoundryStore();\n const [search, setSearch] = useState('');\n const filtered = teams.filter((t) =>\n `${t.name} ${t.department} ${t.leadName}`.toLowerCase().includes(search.toLowerCase())\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Team Directory</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Browse all teams in the organization</p>\n </div>\n <div className=\"relative max-w-sm\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder=\"Search teams...\"\n className=\"pl-9\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n <Card>\n <CardContent className=\"p-0\">\n <div className=\"grid grid-cols-6 gap-2 text-xs font-medium text-text-secondary p-4 border-b\">\n <span>Team</span>\n <span>Description</span>\n <span>Department</span>\n <span>Lead</span>\n <span className=\"text-right\">Members</span>\n <span className=\"text-center\">Status</span>\n </div>\n {filtered.map((team) => (\n <div\n key={team.id}\n className=\"grid grid-cols-6 gap-2 py-3 px-4 border-b last:border-0 text-sm hover:bg-bg-sunken/50\"\n >\n <span className=\"font-medium\">{team.name}</span>\n <span className=\"text-text-secondary truncate\">{team.description}</span>\n <span>{team.department}</span>\n <span className=\"text-text-secondary\">{team.leadName}</span>\n <span className=\"text-right flex items-center justify-end gap-1\">\n <Users className=\"h-3 w-3\" />\n {team.memberCount}\n </span>\n <div className=\"text-center\">\n <Badge\n variant={team.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {team.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;;AAKA,SAAgB,IAA6B;CAC3C,IAAM,EAAE,aAAU,GAAqB,EACjC,CAAC,GAAQ,KAAa,EAAS,GAAG,EAClC,IAAW,EAAM,QAAQ,MAC7B,GAAG,EAAE,KAAK,GAAG,EAAE,WAAW,GAAG,EAAE,WAAW,aAAa,CAAC,SAAS,EAAO,aAAa,CAAC,CACvF;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UAAc,kBAA6B,CAAA;IACxC,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cAA8B;IAAwC,CAAA,CAC/E,EAAA,CAAA;GACN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAQ,WAAU,wEAAyE,CAAA,EAC3F,kBAAC,GAAD;KACE,aAAY;KACZ,WAAU;KACV,OAAO;KACP,WAAW,MAAM,EAAU,EAAE,OAAO,MAAM;KAC1C,CAAA,CACE;;GACN,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IAAa,WAAU;cAAvB,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,QAAD,EAAA,UAAM,QAAW,CAAA;MACjB,kBAAC,QAAD,EAAA,UAAM,eAAkB,CAAA;MACxB,kBAAC,QAAD,EAAA,UAAM,cAAiB,CAAA;MACvB,kBAAC,QAAD,EAAA,UAAM,QAAW,CAAA;MACjB,kBAAC,QAAD;OAAM,WAAU;iBAAa;OAAc,CAAA;MAC3C,kBAAC,QAAD;OAAM,WAAU;iBAAc;OAAa,CAAA;MACvC;QACL,EAAS,KAAK,MACb,kBAAC,OAAD;KAEE,WAAU;eAFZ;MAIE,kBAAC,QAAD;OAAM,WAAU;iBAAe,EAAK;OAAY,CAAA;MAChD,kBAAC,QAAD;OAAM,WAAU;iBAAgC,EAAK;OAAmB,CAAA;MACxE,kBAAC,QAAD,EAAA,UAAO,EAAK,YAAkB,CAAA;MAC9B,kBAAC,QAAD;OAAM,WAAU;iBAAuB,EAAK;OAAgB,CAAA;MAC5D,kBAAC,QAAD;OAAM,WAAU;iBAAhB,CACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,EAC5B,EAAK,YACD;;MACP,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,GAAD;QACE,SAAS,EAAK,WAAW,WAAW,YAAY;QAChD,WAAU;kBAET,EAAK;QACA,CAAA;OACJ,CAAA;MACF;OAnBC,EAAK,GAmBN,CACN,CACU;OACT,CAAA;GACH"}
|