@burdenoff/microfe-crewfoundry 2026.703.2 → 2026.704.2
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/components/forms/FormModal.js.map +1 -1
- package/dist/crewfoundry/pages/AdminAdminPagePage.js +117 -164
- package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +99 -82
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +160 -192
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +238 -231
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +196 -166
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +45 -147
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +20 -11
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +45 -152
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +50 -138
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +149 -67
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +50 -201
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +205 -136
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +25 -31
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +118 -104
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +117 -58
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +90 -94
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +210 -191
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +213 -180
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +133 -264
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +279 -212
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +131 -105
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +167 -148
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +3 -3
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +13 -5
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +151 -152
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +38 -21
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +3 -3
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +134 -127
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +163 -132
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +202 -160
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +104 -91
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +29 -147
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +22 -106
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +74 -74
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +101 -97
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +64 -47
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +111 -121
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js +131 -110
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +65 -64
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +58 -43
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +66 -82
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +38 -88
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +59 -65
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +209 -323
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +175 -220
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +74 -59
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +96 -80
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +28 -100
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +27 -20
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +73 -73
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +62 -56
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +40 -138
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +126 -93
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +99 -77
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +73 -74
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +122 -122
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +130 -113
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +68 -59
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +73 -62
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +82 -58
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +153 -153
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +63 -48
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompanyCompanyDashboardPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CompanyCompanyDashboardPagePage.tsx"],"sourcesContent":["import {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { DollarSign, Globe, TrendingUp, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function CompanyCompanyDashboardPagePage() {\n const { employees, departments, projects, clients } = useCrewFoundryStore();\n const totalRevenue = clients.reduce((s, c) => s + c.revenue, 0);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Company Dashboard</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n Organization overview and key business metrics\n </p>\n <PagePurpose className=\"mt-1\"
|
|
1
|
+
{"version":3,"file":"CompanyCompanyDashboardPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CompanyCompanyDashboardPagePage.tsx"],"sourcesContent":["import {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { DollarSign, Globe, TrendingUp, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function CompanyCompanyDashboardPagePage() {\n const { employees, departments, projects, clients } = useCrewFoundryStore();\n const totalRevenue = clients.reduce((s, c) => s + c.revenue, 0);\n const officeLocations = Array.from(\n new Set(employees.map((e) => e.location).filter((loc) => loc.trim() !== ''))\n );\n const clientIndustries = Array.from(\n new Set(clients.map((c) => c.industry).filter((industry) => industry.trim() !== ''))\n );\n const activeProjects = projects.filter((p) => p.status === 'active').length;\n const activeClients = clients.filter((c) => c.status === 'active').length;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Company Dashboard</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n Organization overview and key business metrics\n </p>\n <PagePurpose className=\"mt-1\">\n A bird's-eye view of your company's health — headcount, revenue, and key\n activity at a glance to guide your next move.\n </PagePurpose>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Employees</CardTitle>\n <Users className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{employees.length}</div>\n <p className=\"text-xs text-text-secondary\">{departments.length} departments</p>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">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 {projects.filter((p) => p.status === 'active').length}\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\">Client Revenue</CardTitle>\n <DollarSign className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n ${(totalRevenue / 1000000).toFixed(1)}M\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 Clients</CardTitle>\n <Globe className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {clients.filter((c) => c.status === 'active').length}\n </div>\n </CardContent>\n </GlassCard>\n </div>\n <Card>\n <CardHeader>\n <CardTitle>Company at a Glance</CardTitle>\n </CardHeader>\n <CardContent className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-3\">\n <div>\n <p className=\"text-xs text-text-secondary\">Headcount</p>\n <p className=\"text-sm font-medium\">{employees.length} employees</p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Departments</p>\n <p className=\"text-sm font-medium\">{departments.length}</p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Active projects</p>\n <p className=\"text-sm font-medium\">\n {activeProjects} of {projects.length}\n </p>\n </div>\n </div>\n <div className=\"space-y-3\">\n <div>\n <p className=\"text-xs text-text-secondary\">Active clients</p>\n <p className=\"text-sm font-medium\">\n {activeClients} of {clients.length}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Client industries served</p>\n <p className=\"text-sm font-medium\">{clientIndustries.length}</p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Office locations</p>\n <p className=\"text-sm font-medium\">\n {officeLocations.length > 0 ? officeLocations.join(', ') : '—'}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,30 +1,22 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
2
|
import { useMemo as t } from "react";
|
|
3
|
-
import {
|
|
4
|
-
import { jsx as
|
|
5
|
-
import { Badge as
|
|
3
|
+
import { BarChart3 as n, Building2 as r, ExternalLink as i, MapPin as a, TrendingUp as o, Users as s } from "lucide-react";
|
|
4
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
5
|
+
import { Badge as u, Button as d, Card as f, CardContent as p, CardDescription as m, CardHeader as h, CardTitle as g, EmphasisPanel as _, GradientText as v, IllustratedEmptyState as y, PagePurpose as b, Separator as x } from "@burdenoff/fe-libs/ui";
|
|
6
6
|
//#region src/crewfoundry/pages/CompanyCompanyProfilePagePage.tsx
|
|
7
|
+
var S = "https://crewfoundry.com", C = (e) => {
|
|
8
|
+
let t = new Date(e);
|
|
9
|
+
return Number.isNaN(t.getTime()) ? "—" : t.toLocaleDateString(void 0, {
|
|
10
|
+
year: "numeric",
|
|
11
|
+
month: "short"
|
|
12
|
+
});
|
|
13
|
+
};
|
|
7
14
|
function w() {
|
|
8
|
-
let { employees: w, departments: T, teams: E, projects: D, announcements: O } = e(), k = t(() => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
year: "2021",
|
|
16
|
-
event: "Core workforce modules launched"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
year: "2022",
|
|
20
|
-
event: "Expanded hiring and payroll capabilities"
|
|
21
|
-
}
|
|
22
|
-
], t = O.slice(0, 4).map((e, t) => ({
|
|
23
|
-
year: String(2023 + t),
|
|
24
|
-
event: e.title
|
|
25
|
-
}));
|
|
26
|
-
return [...e, ...t];
|
|
27
|
-
}, [O]), A = t(() => [
|
|
15
|
+
let { employees: w, departments: T, teams: E, projects: D, announcements: O } = e(), k = t(() => Array.from(new Set(w.map((e) => e.location).filter((e) => e.trim() !== ""))), [w]), A = t(() => [...O].sort((e, t) => (t.createdAt ?? "").localeCompare(e.createdAt ?? "")).slice(0, 6).map((e) => ({
|
|
16
|
+
id: e.id,
|
|
17
|
+
date: e.createdAt,
|
|
18
|
+
title: e.title
|
|
19
|
+
})), [O]), j = t(() => [
|
|
28
20
|
{
|
|
29
21
|
title: "People First",
|
|
30
22
|
description: `Supporting ${w.length} employees with modern workforce tooling.`
|
|
@@ -39,153 +31,171 @@ function w() {
|
|
|
39
31
|
},
|
|
40
32
|
{
|
|
41
33
|
title: "Inclusion",
|
|
42
|
-
description: `Distributed teams across ${
|
|
34
|
+
description: `Distributed teams across ${k.length} location${k.length === 1 ? "" : "s"}.`
|
|
43
35
|
}
|
|
44
36
|
], [
|
|
45
37
|
T.length,
|
|
46
|
-
w,
|
|
38
|
+
w.length,
|
|
39
|
+
k.length,
|
|
47
40
|
D
|
|
48
|
-
]),
|
|
49
|
-
|
|
41
|
+
]), M = t(() => [
|
|
42
|
+
{
|
|
43
|
+
icon: s,
|
|
44
|
+
label: `${w.length} employees`
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
icon: r,
|
|
48
|
+
label: `${T.length} departments`
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
icon: o,
|
|
52
|
+
label: `${E.length} teams`
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
icon: a,
|
|
56
|
+
label: `${k.length} office location${k.length === 1 ? "" : "s"}`
|
|
57
|
+
}
|
|
58
|
+
], [
|
|
59
|
+
T.length,
|
|
60
|
+
w.length,
|
|
61
|
+
k.length,
|
|
62
|
+
E.length
|
|
63
|
+
]);
|
|
64
|
+
return /* @__PURE__ */ l("div", {
|
|
50
65
|
className: "space-y-6 p-6",
|
|
51
66
|
children: [
|
|
52
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ l("div", {
|
|
53
68
|
className: "flex items-center justify-between",
|
|
54
|
-
children: [/* @__PURE__ */
|
|
69
|
+
children: [/* @__PURE__ */ l("div", {
|
|
55
70
|
className: "flex items-center gap-4",
|
|
56
|
-
children: [/* @__PURE__ */
|
|
71
|
+
children: [/* @__PURE__ */ c("div", {
|
|
57
72
|
className: "flex h-14 w-14 items-center justify-center rounded-xl bg-action-primary-bg text-action-primary-text",
|
|
58
|
-
children: /* @__PURE__ */
|
|
59
|
-
}), /* @__PURE__ */
|
|
60
|
-
/* @__PURE__ */
|
|
73
|
+
children: /* @__PURE__ */ c(r, { className: "h-7 w-7" })
|
|
74
|
+
}), /* @__PURE__ */ l("div", { children: [
|
|
75
|
+
/* @__PURE__ */ c("h1", {
|
|
61
76
|
className: "text-2xl font-semibold",
|
|
62
|
-
children: /* @__PURE__ */
|
|
77
|
+
children: /* @__PURE__ */ c(v, { children: "CrewFoundry" })
|
|
63
78
|
}),
|
|
64
|
-
/* @__PURE__ */
|
|
79
|
+
/* @__PURE__ */ c("p", {
|
|
65
80
|
className: "text-sm text-text-secondary",
|
|
66
81
|
children: "Modern workforce management platform"
|
|
67
82
|
}),
|
|
68
|
-
/* @__PURE__ */
|
|
83
|
+
/* @__PURE__ */ c(b, {
|
|
69
84
|
className: "mt-1",
|
|
70
85
|
children: "Maintain your company's public identity — name, branding, and details that appear across CrewFoundry and to external partners."
|
|
71
86
|
})
|
|
72
87
|
] })]
|
|
73
|
-
}), /* @__PURE__ */
|
|
88
|
+
}), /* @__PURE__ */ l(d, {
|
|
74
89
|
variant: "outline",
|
|
75
90
|
size: "sm",
|
|
76
|
-
|
|
91
|
+
"aria-label": "Open crewfoundry.com in a new tab",
|
|
92
|
+
onClick: () => window.open(S, "_blank", "noopener,noreferrer"),
|
|
93
|
+
children: [/* @__PURE__ */ c(i, { className: "h-3 w-3 mr-1" }), "crewfoundry.com"]
|
|
77
94
|
})]
|
|
78
95
|
}),
|
|
79
|
-
/* @__PURE__ */
|
|
96
|
+
/* @__PURE__ */ c("div", {
|
|
80
97
|
className: "grid gap-4 md:grid-cols-4",
|
|
81
98
|
children: [
|
|
82
99
|
{
|
|
83
|
-
icon:
|
|
100
|
+
icon: s,
|
|
84
101
|
label: "Employees",
|
|
85
102
|
value: `${w.length}+`,
|
|
86
103
|
color: "text-status-info-text"
|
|
87
104
|
},
|
|
88
105
|
{
|
|
89
|
-
icon:
|
|
106
|
+
icon: r,
|
|
90
107
|
label: "Departments",
|
|
91
108
|
value: T.length.toString(),
|
|
92
109
|
color: "text-action-primary-bg"
|
|
93
110
|
},
|
|
94
111
|
{
|
|
95
|
-
icon:
|
|
112
|
+
icon: n,
|
|
96
113
|
label: "Active Projects",
|
|
97
114
|
value: D.filter((e) => e.status === "active").length.toString(),
|
|
98
115
|
color: "text-status-success-text"
|
|
99
116
|
},
|
|
100
117
|
{
|
|
101
|
-
icon:
|
|
118
|
+
icon: o,
|
|
102
119
|
label: "Teams",
|
|
103
120
|
value: E.length.toString(),
|
|
104
121
|
color: "text-status-warning-text"
|
|
105
122
|
}
|
|
106
|
-
].map((e) => /* @__PURE__ */
|
|
123
|
+
].map((e) => /* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
107
124
|
className: "flex items-center gap-3 pt-6",
|
|
108
|
-
children: [/* @__PURE__ */
|
|
125
|
+
children: [/* @__PURE__ */ c(e.icon, { className: `h-5 w-5 ${e.color}` }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
|
|
109
126
|
className: "text-xs text-text-secondary",
|
|
110
127
|
children: e.label
|
|
111
|
-
}), /* @__PURE__ */
|
|
128
|
+
}), /* @__PURE__ */ c("p", {
|
|
112
129
|
className: "text-lg font-bold",
|
|
113
130
|
children: e.value
|
|
114
131
|
})] })]
|
|
115
132
|
}) }, e.label))
|
|
116
133
|
}),
|
|
117
|
-
/* @__PURE__ */
|
|
134
|
+
/* @__PURE__ */ l("div", {
|
|
118
135
|
className: "grid gap-6 lg:grid-cols-3",
|
|
119
|
-
children: [/* @__PURE__ */
|
|
136
|
+
children: [/* @__PURE__ */ l("div", {
|
|
120
137
|
className: "lg:col-span-2 space-y-6",
|
|
121
138
|
children: [
|
|
122
|
-
/* @__PURE__ */
|
|
139
|
+
/* @__PURE__ */ l(_, { children: [/* @__PURE__ */ c("div", {
|
|
123
140
|
className: "mb-2 text-base font-semibold",
|
|
124
141
|
children: "About CrewFoundry"
|
|
125
|
-
}), /* @__PURE__ */
|
|
142
|
+
}), /* @__PURE__ */ l("div", {
|
|
126
143
|
className: "space-y-3 text-sm text-text-secondary",
|
|
127
144
|
children: [
|
|
128
|
-
/* @__PURE__ */
|
|
129
|
-
/* @__PURE__ */
|
|
130
|
-
/* @__PURE__ */
|
|
131
|
-
/* @__PURE__ */
|
|
145
|
+
/* @__PURE__ */ c("p", { children: "CrewFoundry is a modern, all-in-one workforce management platform built for growing organizations. It streamlines HR operations, recruitment, payroll processing, and employee development through an intuitive interface powered by automation." }),
|
|
146
|
+
/* @__PURE__ */ c("p", { children: "The platform brings hiring, onboarding, time tracking, learning management, and analytics together in one integrated suite so teams can manage their entire workforce in a single place." }),
|
|
147
|
+
/* @__PURE__ */ c(x, {}),
|
|
148
|
+
/* @__PURE__ */ c("div", {
|
|
132
149
|
className: "grid grid-cols-2 gap-3 text-xs",
|
|
133
|
-
children:
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}),
|
|
138
|
-
/* @__PURE__ */ f("div", {
|
|
139
|
-
className: "flex items-center gap-2",
|
|
140
|
-
children: [/* @__PURE__ */ d(s, { className: "h-3 w-3" }), /* @__PURE__ */ d("span", { children: "6 office locations globally" })]
|
|
141
|
-
}),
|
|
142
|
-
/* @__PURE__ */ f("div", {
|
|
143
|
-
className: "flex items-center gap-2",
|
|
144
|
-
children: [/* @__PURE__ */ d(a, { className: "h-3 w-3" }), /* @__PURE__ */ d("span", { children: "Founded 2020" })]
|
|
145
|
-
}),
|
|
146
|
-
/* @__PURE__ */ f("div", {
|
|
147
|
-
className: "flex items-center gap-2",
|
|
148
|
-
children: [/* @__PURE__ */ d(n, { className: "h-3 w-3" }), /* @__PURE__ */ d("span", { children: "Series B funded" })]
|
|
149
|
-
})
|
|
150
|
-
]
|
|
150
|
+
children: M.map((e) => /* @__PURE__ */ l("div", {
|
|
151
|
+
className: "flex items-center gap-2",
|
|
152
|
+
children: [/* @__PURE__ */ c(e.icon, { className: "h-3 w-3" }), /* @__PURE__ */ c("span", { children: e.label })]
|
|
153
|
+
}, e.label))
|
|
151
154
|
})
|
|
152
155
|
]
|
|
153
156
|
})] }),
|
|
154
|
-
/* @__PURE__ */ f
|
|
157
|
+
/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ l(h, { children: [/* @__PURE__ */ c(g, {
|
|
155
158
|
className: "text-base",
|
|
156
159
|
children: "Our Values"
|
|
157
|
-
}), /* @__PURE__ */
|
|
160
|
+
}), /* @__PURE__ */ c(m, { children: "The principles that guide how we build and work" })] }), /* @__PURE__ */ c(p, {
|
|
158
161
|
className: "grid gap-3 sm:grid-cols-2",
|
|
159
|
-
children:
|
|
162
|
+
children: j.map((e) => /* @__PURE__ */ l("div", {
|
|
160
163
|
className: "rounded-lg border p-3 space-y-1",
|
|
161
|
-
children: [/* @__PURE__ */
|
|
164
|
+
children: [/* @__PURE__ */ c("p", {
|
|
162
165
|
className: "text-sm font-medium",
|
|
163
166
|
children: e.title
|
|
164
|
-
}), /* @__PURE__ */
|
|
167
|
+
}), /* @__PURE__ */ c("p", {
|
|
165
168
|
className: "text-xs text-text-secondary",
|
|
166
169
|
children: e.description
|
|
167
170
|
})]
|
|
168
171
|
}, e.title))
|
|
169
172
|
})] }),
|
|
170
|
-
/* @__PURE__ */ f
|
|
173
|
+
/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(h, { children: /* @__PURE__ */ c(g, {
|
|
171
174
|
className: "text-base",
|
|
172
175
|
children: "Departments"
|
|
173
|
-
}) }), /* @__PURE__ */
|
|
176
|
+
}) }), /* @__PURE__ */ c(p, {
|
|
174
177
|
className: "p-0",
|
|
175
|
-
children: T.
|
|
178
|
+
children: T.length === 0 ? /* @__PURE__ */ c("div", {
|
|
179
|
+
className: "p-6",
|
|
180
|
+
children: /* @__PURE__ */ c(y, {
|
|
181
|
+
illustration: "empty-data",
|
|
182
|
+
title: "No departments yet",
|
|
183
|
+
description: "Departments you create will appear here."
|
|
184
|
+
})
|
|
185
|
+
}) : T.map((e, t) => /* @__PURE__ */ l("div", {
|
|
176
186
|
className: `flex items-center justify-between px-6 py-3 ${t < T.length - 1 ? "border-b" : ""}`,
|
|
177
|
-
children: [/* @__PURE__ */
|
|
187
|
+
children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
|
|
178
188
|
className: "text-sm font-medium",
|
|
179
189
|
children: e.name
|
|
180
|
-
}), /* @__PURE__ */
|
|
190
|
+
}), /* @__PURE__ */ l("p", {
|
|
181
191
|
className: "text-xs text-text-secondary",
|
|
182
192
|
children: ["Led by ", e.headName]
|
|
183
|
-
})] }), /* @__PURE__ */
|
|
193
|
+
})] }), /* @__PURE__ */ l("div", {
|
|
184
194
|
className: "flex items-center gap-3",
|
|
185
|
-
children: [/* @__PURE__ */
|
|
195
|
+
children: [/* @__PURE__ */ l("span", {
|
|
186
196
|
className: "text-xs text-text-secondary",
|
|
187
197
|
children: [e.employeeCount, " employees"]
|
|
188
|
-
}), /* @__PURE__ */
|
|
198
|
+
}), /* @__PURE__ */ c(u, {
|
|
189
199
|
variant: e.status === "active" ? "default" : "secondary",
|
|
190
200
|
className: "text-[10px]",
|
|
191
201
|
children: e.status
|
|
@@ -194,40 +204,44 @@ function w() {
|
|
|
194
204
|
}, e.id))
|
|
195
205
|
})] })
|
|
196
206
|
]
|
|
197
|
-
}), /* @__PURE__ */
|
|
207
|
+
}), /* @__PURE__ */ l("div", {
|
|
198
208
|
className: "space-y-4",
|
|
199
|
-
children: [/* @__PURE__ */ f
|
|
209
|
+
children: [/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ l(h, { children: [/* @__PURE__ */ c(g, {
|
|
200
210
|
className: "text-sm",
|
|
201
211
|
children: "Company Timeline"
|
|
202
|
-
}) }), /* @__PURE__ */
|
|
212
|
+
}), /* @__PURE__ */ c(m, { children: "Recent company announcements" })] }), /* @__PURE__ */ c(p, {
|
|
203
213
|
className: "space-y-0",
|
|
204
|
-
children:
|
|
214
|
+
children: A.length === 0 ? /* @__PURE__ */ c(y, {
|
|
215
|
+
illustration: "empty-data",
|
|
216
|
+
title: "No announcements yet",
|
|
217
|
+
description: "Company milestones from announcements will appear here."
|
|
218
|
+
}) : A.map((e, t) => /* @__PURE__ */ l("div", {
|
|
205
219
|
className: "flex gap-3",
|
|
206
|
-
children: [/* @__PURE__ */
|
|
220
|
+
children: [/* @__PURE__ */ l("div", {
|
|
207
221
|
className: "flex flex-col items-center",
|
|
208
|
-
children: [/* @__PURE__ */
|
|
209
|
-
|
|
210
|
-
children: e.year.slice(2)
|
|
211
|
-
}), t < k.length - 1 && /* @__PURE__ */ d("div", { className: "h-full w-px bg-border my-1" })]
|
|
212
|
-
}), /* @__PURE__ */ f("div", {
|
|
222
|
+
children: [/* @__PURE__ */ c("div", { className: "flex h-2.5 w-2.5 shrink-0 items-center justify-center rounded-full bg-action-primary-bg" }), t < A.length - 1 && /* @__PURE__ */ c("div", { className: "h-full w-px bg-border my-1" })]
|
|
223
|
+
}), /* @__PURE__ */ l("div", {
|
|
213
224
|
className: "pb-4",
|
|
214
|
-
children: [/* @__PURE__ */
|
|
225
|
+
children: [/* @__PURE__ */ c("p", {
|
|
215
226
|
className: "text-xs font-medium",
|
|
216
|
-
children: e.
|
|
217
|
-
}), /* @__PURE__ */
|
|
227
|
+
children: C(e.date)
|
|
228
|
+
}), /* @__PURE__ */ c("p", {
|
|
218
229
|
className: "text-xs text-text-secondary",
|
|
219
|
-
children: e.
|
|
230
|
+
children: e.title
|
|
220
231
|
})]
|
|
221
232
|
})]
|
|
222
|
-
}, e.
|
|
223
|
-
})] }), /* @__PURE__ */ f
|
|
233
|
+
}, e.id))
|
|
234
|
+
})] }), /* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(h, { children: /* @__PURE__ */ c(g, {
|
|
224
235
|
className: "text-sm",
|
|
225
236
|
children: "Office Locations"
|
|
226
|
-
}) }), /* @__PURE__ */
|
|
237
|
+
}) }), /* @__PURE__ */ c(p, {
|
|
227
238
|
className: "space-y-2",
|
|
228
|
-
children:
|
|
239
|
+
children: k.length === 0 ? /* @__PURE__ */ c("p", {
|
|
240
|
+
className: "text-sm text-text-secondary",
|
|
241
|
+
children: "No locations on record yet."
|
|
242
|
+
}) : k.map((e) => /* @__PURE__ */ l("div", {
|
|
229
243
|
className: "flex items-center gap-2 text-sm",
|
|
230
|
-
children: [/* @__PURE__ */
|
|
244
|
+
children: [/* @__PURE__ */ c(a, { className: "h-3 w-3 text-text-secondary" }), /* @__PURE__ */ c("span", { children: e })]
|
|
231
245
|
}, e))
|
|
232
246
|
})] })]
|
|
233
247
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompanyCompanyProfilePagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CompanyCompanyProfilePagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n EmphasisPanel,\n GradientText,\n PagePurpose,\n Separator,\n} from '@burdenoff/fe-libs/ui';\nimport {\n Award,\n BarChart3,\n Building2,\n Calendar,\n ExternalLink,\n Globe,\n MapPin,\n TrendingUp,\n Users,\n} from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function CompanyCompanyProfilePagePage() {\n const { employees, departments, teams, projects, announcements } = useCrewFoundryStore();\n\n const milestones = useMemo(() => {\n const base = [\n { year: '2020', event: 'CrewFoundry founded and team assembled' },\n { year: '2021', event: 'Core workforce modules launched' },\n { year: '2022', event: 'Expanded hiring and payroll capabilities' },\n ];\n const dynamic = announcements.slice(0, 4).map((announcement, index) => ({\n year: String(2023 + index),\n event: announcement.title,\n }));\n return [...base, ...dynamic];\n }, [announcements]);\n\n const values = useMemo(\n () => [\n {\n title: 'People First',\n description: `Supporting ${employees.length} employees with modern workforce tooling.`,\n },\n {\n title: 'Transparency',\n description: `Cross-functional visibility across ${departments.length} departments.`,\n },\n {\n title: 'Innovation',\n description: `${projects.filter((project) => project.status === 'active').length} active initiatives driving product growth.`,\n },\n {\n title: 'Inclusion',\n description: `Distributed teams across ${new Set(employees.map((employee) => employee.location)).size} locations.`,\n },\n ],\n [departments.length, employees, projects]\n );\n\n const officeLocations = useMemo(\n () => Array.from(new Set(employees.map((employee) => employee.location))).slice(0, 8),\n [employees]\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <div className=\"flex h-14 w-14 items-center justify-center rounded-xl bg-action-primary-bg text-action-primary-text\">\n <Building2 className=\"h-7 w-7\" />\n </div>\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>CrewFoundry Inc.</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Modern workforce management platform</p>\n <PagePurpose className=\"mt-1\">Maintain your company's public identity — name, branding, and details that appear across CrewFoundry and to external partners.</PagePurpose>\n </div>\n </div>\n <Button variant=\"outline\" size=\"sm\">\n <ExternalLink className=\"h-3 w-3 mr-1\" />\n crewfoundry.com\n </Button>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n {[\n {\n icon: Users,\n label: 'Employees',\n value: `${employees.length}+`,\n color: 'text-status-info-text',\n },\n {\n icon: Building2,\n label: 'Departments',\n value: departments.length.toString(),\n color: 'text-action-primary-bg',\n },\n {\n icon: BarChart3,\n label: 'Active Projects',\n value: projects.filter((p) => p.status === 'active').length.toString(),\n color: 'text-status-success-text',\n },\n {\n icon: TrendingUp,\n label: 'Teams',\n value: teams.length.toString(),\n color: 'text-status-warning-text',\n },\n ].map((stat) => (\n <Card key={stat.label}>\n <CardContent className=\"flex items-center gap-3 pt-6\">\n <stat.icon className={`h-5 w-5 ${stat.color}`} />\n <div>\n <p className=\"text-xs text-text-secondary\">{stat.label}</p>\n <p className=\"text-lg font-bold\">{stat.value}</p>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-6\">\n <EmphasisPanel>\n <div className=\"mb-2 text-base font-semibold\">About CrewFoundry</div>\n <div className=\"space-y-3 text-sm text-text-secondary\">\n <p>\n CrewFoundry is a modern, all-in-one workforce management platform built for growing\n organizations. Our platform streamlines HR operations, recruitment, payroll\n processing, and employee development through an intuitive interface powered by AI\n and automation.\n </p>\n <p>\n Founded in 2020 in San Francisco, we've grown to serve hundreds of companies\n managing their workforce with our integrated suite of tools spanning hiring,\n onboarding, time tracking, learning management, and analytics.\n </p>\n <Separator />\n <div className=\"grid grid-cols-2 gap-3 text-xs\">\n <div className=\"flex items-center gap-2\">\n <MapPin className=\"h-3 w-3\" />\n <span>San Francisco, CA (HQ)</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Globe className=\"h-3 w-3\" />\n <span>6 office locations globally</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-3 w-3\" />\n <span>Founded 2020</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Award className=\"h-3 w-3\" />\n <span>Series B funded</span>\n </div>\n </div>\n </div>\n </EmphasisPanel>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Our Values</CardTitle>\n <CardDescription>The principles that guide how we build and work</CardDescription>\n </CardHeader>\n <CardContent className=\"grid gap-3 sm:grid-cols-2\">\n {values.map((v) => (\n <div key={v.title} className=\"rounded-lg border p-3 space-y-1\">\n <p className=\"text-sm font-medium\">{v.title}</p>\n <p className=\"text-xs text-text-secondary\">{v.description}</p>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Departments</CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n {departments.map((dept, i) => (\n <div\n key={dept.id}\n className={`flex items-center justify-between px-6 py-3 ${i < departments.length - 1 ? 'border-b' : ''}`}\n >\n <div>\n <p className=\"text-sm font-medium\">{dept.name}</p>\n <p className=\"text-xs text-text-secondary\">Led by {dept.headName}</p>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-xs text-text-secondary\">\n {dept.employeeCount} employees\n </span>\n <Badge\n variant={dept.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {dept.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Company Timeline</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-0\">\n {milestones.map((ms, i) => (\n <div key={ms.year} className=\"flex gap-3\">\n <div className=\"flex flex-col items-center\">\n <div className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-action-primary-bg text-action-primary-text text-[10px] font-medium\">\n {ms.year.slice(2)}\n </div>\n {i < milestones.length - 1 && <div className=\"h-full w-px bg-border my-1\" />}\n </div>\n <div className=\"pb-4\">\n <p className=\"text-xs font-medium\">{ms.year}</p>\n <p className=\"text-xs text-text-secondary\">{ms.event}</p>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Office Locations</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {officeLocations.map((loc) => (\n <div key={loc} className=\"flex items-center gap-2 text-sm\">\n <MapPin className=\"h-3 w-3 text-text-secondary\" />\n <span>{loc}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CompanyCompanyProfilePagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CompanyCompanyProfilePagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n EmphasisPanel,\n GradientText,\n IllustratedEmptyState,\n PagePurpose,\n Separator,\n} from '@burdenoff/fe-libs/ui';\nimport { BarChart3, Building2, ExternalLink, MapPin, TrendingUp, Users } from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nconst COMPANY_WEBSITE = 'https://crewfoundry.com';\n\nconst formatTimelineDate = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return '—';\n }\n return parsed.toLocaleDateString(undefined, { year: 'numeric', month: 'short' });\n};\n\nexport function CompanyCompanyProfilePagePage() {\n const { employees, departments, teams, projects, announcements } = useCrewFoundryStore();\n\n const officeLocations = useMemo(\n () =>\n Array.from(\n new Set(employees.map((employee) => employee.location).filter((loc) => loc.trim() !== ''))\n ),\n [employees]\n );\n\n const timeline = useMemo(\n () =>\n [...announcements]\n .sort((a, b) => (b.createdAt ?? '').localeCompare(a.createdAt ?? ''))\n .slice(0, 6)\n .map((announcement) => ({\n id: announcement.id,\n date: announcement.createdAt,\n title: announcement.title,\n })),\n [announcements]\n );\n\n const values = useMemo(\n () => [\n {\n title: 'People First',\n description: `Supporting ${employees.length} employees with modern workforce tooling.`,\n },\n {\n title: 'Transparency',\n description: `Cross-functional visibility across ${departments.length} departments.`,\n },\n {\n title: 'Innovation',\n description: `${projects.filter((project) => project.status === 'active').length} active initiatives driving product growth.`,\n },\n {\n title: 'Inclusion',\n description: `Distributed teams across ${officeLocations.length} location${officeLocations.length === 1 ? '' : 's'}.`,\n },\n ],\n [departments.length, employees.length, officeLocations.length, projects]\n );\n\n const facts = useMemo(\n () => [\n { icon: Users, label: `${employees.length} employees` },\n { icon: Building2, label: `${departments.length} departments` },\n { icon: TrendingUp, label: `${teams.length} teams` },\n {\n icon: MapPin,\n label: `${officeLocations.length} office location${officeLocations.length === 1 ? '' : 's'}`,\n },\n ],\n [departments.length, employees.length, officeLocations.length, teams.length]\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <div className=\"flex h-14 w-14 items-center justify-center rounded-xl bg-action-primary-bg text-action-primary-text\">\n <Building2 className=\"h-7 w-7\" />\n </div>\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>CrewFoundry</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Modern workforce management platform</p>\n <PagePurpose className=\"mt-1\">\n Maintain your company's public identity — name, branding, and details that appear\n across CrewFoundry and to external partners.\n </PagePurpose>\n </div>\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-label=\"Open crewfoundry.com in a new tab\"\n onClick={() => window.open(COMPANY_WEBSITE, '_blank', 'noopener,noreferrer')}\n >\n <ExternalLink className=\"h-3 w-3 mr-1\" />\n crewfoundry.com\n </Button>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n {[\n {\n icon: Users,\n label: 'Employees',\n value: `${employees.length}+`,\n color: 'text-status-info-text',\n },\n {\n icon: Building2,\n label: 'Departments',\n value: departments.length.toString(),\n color: 'text-action-primary-bg',\n },\n {\n icon: BarChart3,\n label: 'Active Projects',\n value: projects.filter((p) => p.status === 'active').length.toString(),\n color: 'text-status-success-text',\n },\n {\n icon: TrendingUp,\n label: 'Teams',\n value: teams.length.toString(),\n color: 'text-status-warning-text',\n },\n ].map((stat) => (\n <Card key={stat.label}>\n <CardContent className=\"flex items-center gap-3 pt-6\">\n <stat.icon className={`h-5 w-5 ${stat.color}`} />\n <div>\n <p className=\"text-xs text-text-secondary\">{stat.label}</p>\n <p className=\"text-lg font-bold\">{stat.value}</p>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-6\">\n <EmphasisPanel>\n <div className=\"mb-2 text-base font-semibold\">About CrewFoundry</div>\n <div className=\"space-y-3 text-sm text-text-secondary\">\n <p>\n CrewFoundry is a modern, all-in-one workforce management platform built for growing\n organizations. It streamlines HR operations, recruitment, payroll processing, and\n employee development through an intuitive interface powered by automation.\n </p>\n <p>\n The platform brings hiring, onboarding, time tracking, learning management, and\n analytics together in one integrated suite so teams can manage their entire\n workforce in a single place.\n </p>\n <Separator />\n <div className=\"grid grid-cols-2 gap-3 text-xs\">\n {facts.map((fact) => (\n <div key={fact.label} className=\"flex items-center gap-2\">\n <fact.icon className=\"h-3 w-3\" />\n <span>{fact.label}</span>\n </div>\n ))}\n </div>\n </div>\n </EmphasisPanel>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Our Values</CardTitle>\n <CardDescription>The principles that guide how we build and work</CardDescription>\n </CardHeader>\n <CardContent className=\"grid gap-3 sm:grid-cols-2\">\n {values.map((v) => (\n <div key={v.title} className=\"rounded-lg border p-3 space-y-1\">\n <p className=\"text-sm font-medium\">{v.title}</p>\n <p className=\"text-xs text-text-secondary\">{v.description}</p>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Departments</CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n {departments.length === 0 ? (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No departments yet\"\n description=\"Departments you create will appear here.\"\n />\n </div>\n ) : (\n departments.map((dept, i) => (\n <div\n key={dept.id}\n className={`flex items-center justify-between px-6 py-3 ${i < departments.length - 1 ? 'border-b' : ''}`}\n >\n <div>\n <p className=\"text-sm font-medium\">{dept.name}</p>\n <p className=\"text-xs text-text-secondary\">Led by {dept.headName}</p>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-xs text-text-secondary\">\n {dept.employeeCount} employees\n </span>\n <Badge\n variant={dept.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {dept.status}\n </Badge>\n </div>\n </div>\n ))\n )}\n </CardContent>\n </Card>\n </div>\n\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Company Timeline</CardTitle>\n <CardDescription>Recent company announcements</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-0\">\n {timeline.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No announcements yet\"\n description=\"Company milestones from announcements will appear here.\"\n />\n ) : (\n timeline.map((entry, i) => (\n <div key={entry.id} className=\"flex gap-3\">\n <div className=\"flex flex-col items-center\">\n <div className=\"flex h-2.5 w-2.5 shrink-0 items-center justify-center rounded-full bg-action-primary-bg\" />\n {i < timeline.length - 1 && <div className=\"h-full w-px bg-border my-1\" />}\n </div>\n <div className=\"pb-4\">\n <p className=\"text-xs font-medium\">{formatTimelineDate(entry.date)}</p>\n <p className=\"text-xs text-text-secondary\">{entry.title}</p>\n </div>\n </div>\n ))\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Office Locations</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {officeLocations.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">No locations on record yet.</p>\n ) : (\n officeLocations.map((loc) => (\n <div key={loc} className=\"flex items-center gap-2 text-sm\">\n <MapPin className=\"h-3 w-3 text-text-secondary\" />\n <span>{loc}</span>\n </div>\n ))\n )}\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|