@burdenoff/microfe-crewfoundry 2026.529.1 → 2026.624.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 +15 -15
  2. package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
  3. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +15 -15
  4. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  5. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +17 -17
  6. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
  7. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +19 -19
  8. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  9. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +16 -16
  10. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
  11. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +5 -5
  12. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  13. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +7 -7
  14. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
  15. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +7 -7
  16. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
  17. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +7 -7
  18. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
  19. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +7 -7
  20. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  21. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +3 -3
  22. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
  23. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +8 -8
  24. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
  25. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +8 -8
  26. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  27. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +14 -14
  28. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
  29. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +10 -10
  30. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
  31. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +4 -4
  32. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  33. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +17 -17
  34. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
  35. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +19 -19
  36. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  37. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +17 -17
  38. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
  39. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +12 -12
  40. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
  41. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +12 -12
  42. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
  43. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +11 -11
  44. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
  45. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +7 -7
  46. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  47. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +1 -1
  48. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  49. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +7 -7
  50. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  51. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +13 -13
  52. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/HiringJobsPagePage.js +7 -7
  54. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  55. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +10 -10
  56. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  57. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +9 -9
  58. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +13 -13
  60. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  61. package/dist/crewfoundry/pages/HrPayrollPagePage.js +10 -10
  62. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  63. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +9 -9
  64. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  65. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +3 -3
  66. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
  67. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +2 -2
  68. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +11 -11
  70. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  71. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +7 -7
  72. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
  73. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +4 -4
  74. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  75. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +9 -9
  76. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
  77. package/dist/crewfoundry/pages/LearningLearningPagePage.js +10 -10
  78. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
  79. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +11 -11
  80. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  81. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +5 -5
  82. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  83. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +7 -7
  84. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  85. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +3 -3
  86. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  87. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +7 -7
  88. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
  89. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +11 -11
  90. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
  91. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +11 -11
  92. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
  93. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +6 -6
  94. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  95. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +6 -6
  96. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
  97. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +7 -7
  98. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
  99. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +2 -2
  100. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  101. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +15 -15
  102. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
  103. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +10 -10
  104. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  105. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +5 -5
  106. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
  107. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +6 -6
  108. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  109. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +6 -6
  110. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  111. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +4 -4
  112. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
  113. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +4 -4
  114. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
  115. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +1 -1
  116. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
  117. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +15 -15
  118. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  119. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +4 -4
  120. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  121. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +8 -8
  122. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
  123. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +14 -14
  124. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
  125. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +6 -6
  126. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
  127. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +20 -20
  128. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  129. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +3 -3
  130. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  131. package/package.json +1 -1
@@ -14,7 +14,7 @@ function f() {
14
14
  className: "text-2xl font-semibold",
15
15
  children: "Announcements"
16
16
  }), /* @__PURE__ */ a("p", {
17
- className: "text-sm text-muted-foreground",
17
+ className: "text-sm text-text-secondary",
18
18
  children: [f.length, " company announcements"]
19
19
  })] }), /* @__PURE__ */ a(s, {
20
20
  size: "sm",
@@ -46,10 +46,10 @@ function f() {
46
46
  })]
47
47
  })]
48
48
  }) }), /* @__PURE__ */ a(l, { children: [/* @__PURE__ */ i("p", {
49
- className: "text-sm text-muted-foreground",
49
+ className: "text-sm text-text-secondary",
50
50
  children: e.content
51
51
  }), /* @__PURE__ */ a("div", {
52
- className: "flex items-center justify-between mt-3 text-xs text-muted-foreground",
52
+ className: "flex items-center justify-between mt-3 text-xs text-text-secondary",
53
53
  children: [/* @__PURE__ */ a("span", { children: [
54
54
  e.author,
55
55
  " · ",
@@ -85,11 +85,11 @@ function f() {
85
85
  })]
86
86
  }) }), /* @__PURE__ */ a(l, { children: [
87
87
  /* @__PURE__ */ i("p", {
88
- className: "text-sm text-muted-foreground",
88
+ className: "text-sm text-text-secondary",
89
89
  children: e.content
90
90
  }),
91
91
  /* @__PURE__ */ a("div", {
92
- className: "flex items-center justify-between mt-3 text-xs text-muted-foreground",
92
+ className: "flex items-center justify-between mt-3 text-xs text-text-secondary",
93
93
  children: [/* @__PURE__ */ a("span", { children: [
94
94
  e.author,
95
95
  " · ",
@@ -1 +1 @@
1
- {"version":3,"file":"CommunicationsAnnouncementsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CommunicationsAnnouncementsPagePage.tsx"],"sourcesContent":["import { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Eye, Megaphone, Pin, Plus } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function CommunicationsAnnouncementsPagePage() {\n const { announcements } = useCrewFoundryStore();\n const pinned = announcements.filter((a) => a.isPinned);\n const regular = announcements.filter((a) => !a.isPinned);\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\">Announcements</h1>\n <p className=\"text-sm text-muted-foreground\">\n {announcements.length} company announcements\n </p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"h-4 w-4 mr-1\" />\n New Announcement\n </Button>\n </div>\n {pinned.length > 0 && (\n <div className=\"space-y-3\">\n <h2 className=\"text-sm font-medium flex items-center gap-1\">\n <Pin className=\"h-4 w-4\" />\n Pinned\n </h2>\n {pinned.map((ann) => (\n <Card key={ann.id} className=\"border-yellow-200 bg-yellow-50/30\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{ann.title}</CardTitle>\n <div className=\"flex gap-1\">\n <Badge\n variant={\n ann.priority === 'urgent'\n ? 'destructive'\n : ann.priority === 'high'\n ? 'default'\n : 'secondary'\n }\n className=\"text-[10px]\"\n >\n {ann.priority}\n </Badge>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {ann.category}\n </Badge>\n </div>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-muted-foreground\">{ann.content}</p>\n <div className=\"flex items-center justify-between mt-3 text-xs text-muted-foreground\">\n <span>\n {ann.author} · {ann.authorRole}\n </span>\n <div className=\"flex items-center gap-3\">\n <span className=\"flex items-center gap-1\">\n <Eye className=\"h-3 w-3\" />\n {ann.viewCount}\n </span>\n <span>{ann.createdAt}</span>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n <div className=\"space-y-3\">\n {regular.map((ann) => (\n <Card key={ann.id}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{ann.title}</CardTitle>\n <div className=\"flex gap-1\">\n <Badge\n variant={\n ann.priority === 'urgent'\n ? 'destructive'\n : ann.priority === 'high'\n ? 'default'\n : 'secondary'\n }\n className=\"text-[10px]\"\n >\n {ann.priority}\n </Badge>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {ann.category}\n </Badge>\n </div>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-muted-foreground\">{ann.content}</p>\n <div className=\"flex items-center justify-between mt-3 text-xs text-muted-foreground\">\n <span>\n {ann.author} · {ann.authorRole}\n </span>\n <div className=\"flex items-center gap-3\">\n <span className=\"flex items-center gap-1\">\n <Eye className=\"h-3 w-3\" />\n {ann.viewCount}\n </span>\n <span>{ann.createdAt}</span>\n </div>\n </div>\n <div className=\"flex gap-1 mt-2\">\n {ann.tags.map((t) => (\n <Badge key={t} variant=\"outline\" className=\"text-[9px]\">\n {t}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CommunicationsAnnouncementsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CommunicationsAnnouncementsPagePage.tsx"],"sourcesContent":["import { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Eye, Megaphone, Pin, Plus } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function CommunicationsAnnouncementsPagePage() {\n const { announcements } = useCrewFoundryStore();\n const pinned = announcements.filter((a) => a.isPinned);\n const regular = announcements.filter((a) => !a.isPinned);\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\">Announcements</h1>\n <p className=\"text-sm text-text-secondary\">\n {announcements.length} company announcements\n </p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"h-4 w-4 mr-1\" />\n New Announcement\n </Button>\n </div>\n {pinned.length > 0 && (\n <div className=\"space-y-3\">\n <h2 className=\"text-sm font-medium flex items-center gap-1\">\n <Pin className=\"h-4 w-4\" />\n Pinned\n </h2>\n {pinned.map((ann) => (\n <Card key={ann.id} className=\"border-yellow-200 bg-yellow-50/30\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{ann.title}</CardTitle>\n <div className=\"flex gap-1\">\n <Badge\n variant={\n ann.priority === 'urgent'\n ? 'destructive'\n : ann.priority === 'high'\n ? 'default'\n : 'secondary'\n }\n className=\"text-[10px]\"\n >\n {ann.priority}\n </Badge>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {ann.category}\n </Badge>\n </div>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary\">{ann.content}</p>\n <div className=\"flex items-center justify-between mt-3 text-xs text-text-secondary\">\n <span>\n {ann.author} · {ann.authorRole}\n </span>\n <div className=\"flex items-center gap-3\">\n <span className=\"flex items-center gap-1\">\n <Eye className=\"h-3 w-3\" />\n {ann.viewCount}\n </span>\n <span>{ann.createdAt}</span>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n <div className=\"space-y-3\">\n {regular.map((ann) => (\n <Card key={ann.id}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{ann.title}</CardTitle>\n <div className=\"flex gap-1\">\n <Badge\n variant={\n ann.priority === 'urgent'\n ? 'destructive'\n : ann.priority === 'high'\n ? 'default'\n : 'secondary'\n }\n className=\"text-[10px]\"\n >\n {ann.priority}\n </Badge>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {ann.category}\n </Badge>\n </div>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary\">{ann.content}</p>\n <div className=\"flex items-center justify-between mt-3 text-xs text-text-secondary\">\n <span>\n {ann.author} · {ann.authorRole}\n </span>\n <div className=\"flex items-center gap-3\">\n <span className=\"flex items-center gap-1\">\n <Eye className=\"h-3 w-3\" />\n {ann.viewCount}\n </span>\n <span>{ann.createdAt}</span>\n </div>\n </div>\n <div className=\"flex gap-1 mt-2\">\n {ann.tags.map((t) => (\n <Badge key={t} variant=\"outline\" className=\"text-[9px]\">\n {t}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AAIA,SAAgB,IAAsC;CACpD,IAAM,EAAE,qBAAkB,GAAqB,EACzC,IAAS,EAAc,QAAQ,MAAM,EAAE,SAAS,EAChD,IAAU,EAAc,QAAQ,MAAM,CAAC,EAAE,SAAS;AAExD,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAyB;KAAkB,CAAA,EACzD,kBAAC,KAAD;KAAG,WAAU;eAAb,CACG,EAAc,QAAO,yBACpB;OACA,EAAA,CAAA,EACN,kBAAC,GAAD;KAAQ,MAAK;eAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,mBAE1B;OACL;;GACL,EAAO,SAAS,KACf,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,MAAD;KAAI,WAAU;eAAd,CACE,kBAAC,GAAD,EAAK,WAAU,WAAY,CAAA,EAAA,SAExB;QACJ,EAAO,KAAK,MACX,kBAAC,GAAD;KAAmB,WAAU;eAA7B,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAa,EAAI;OAAkB,CAAA,EACxD,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD;QACE,SACE,EAAI,aAAa,WACb,gBACA,EAAI,aAAa,SACf,YACA;QAER,WAAU;kBAET,EAAI;QACC,CAAA,EACR,kBAAC,GAAD;QAAO,SAAQ;QAAU,WAAU;kBAChC,EAAI;QACC,CAAA,CACJ;SACF;SACK,CAAA,EACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBAA+B,EAAI;MAAY,CAAA,EAC5D,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,QAAD,EAAA,UAAA;OACG,EAAI;OAAO;OAAI,EAAI;OACf,EAAA,CAAA,EACP,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAhB,CACE,kBAAC,GAAD,EAAK,WAAU,WAAY,CAAA,EAC1B,EAAI,UACA;WACP,kBAAC,QAAD,EAAA,UAAO,EAAI,WAAiB,CAAA,CACxB;SACF;QACM,EAAA,CAAA,CACT;OAtCI,EAAI,GAsCR,CACP,CACE;;GAER,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAQ,KAAK,MACZ,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MAAW,WAAU;gBAAa,EAAI;MAAkB,CAAA,EACxD,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD;OACE,SACE,EAAI,aAAa,WACb,gBACA,EAAI,aAAa,SACf,YACA;OAER,WAAU;iBAET,EAAI;OACC,CAAA,EACR,kBAAC,GAAD;OAAO,SAAQ;OAAU,WAAU;iBAChC,EAAI;OACC,CAAA,CACJ;QACF;QACK,CAAA,EACb,kBAAC,GAAD,EAAA,UAAA;KACE,kBAAC,KAAD;MAAG,WAAU;gBAA+B,EAAI;MAAY,CAAA;KAC5D,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,QAAD,EAAA,UAAA;OACG,EAAI;OAAO;OAAI,EAAI;OACf,EAAA,CAAA,EACP,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAhB,CACE,kBAAC,GAAD,EAAK,WAAU,WAAY,CAAA,EAC1B,EAAI,UACA;WACP,kBAAC,QAAD,EAAA,UAAO,EAAI,WAAiB,CAAA,CACxB;SACF;;KACN,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAI,KAAK,KAAK,MACb,kBAAC,GAAD;OAAe,SAAQ;OAAU,WAAU;iBACxC;OACK,EAFI,EAEJ,CACR;MACE,CAAA;KACM,EAAA,CAAA,CACT,EAAA,EA7CI,EAAI,GA6CR,CACP;IACE,CAAA;GACF"}
@@ -32,7 +32,7 @@ function _() {
32
32
  className: "text-2xl font-semibold",
33
33
  children: "Calls"
34
34
  }), /* @__PURE__ */ s("p", {
35
- className: "text-sm text-muted-foreground",
35
+ className: "text-sm text-text-secondary",
36
36
  children: "Voice call history and quick dial"
37
37
  })] }), /* @__PURE__ */ c(u, {
38
38
  size: "sm",
@@ -47,12 +47,12 @@ function _() {
47
47
  children: [/* @__PURE__ */ s(m, {
48
48
  className: "text-sm font-medium",
49
49
  children: "Total Calls"
50
- }), /* @__PURE__ */ s(r, { className: "h-4 w-4 text-muted-foreground" })]
50
+ }), /* @__PURE__ */ s(r, { className: "h-4 w-4 text-text-secondary" })]
51
51
  }), /* @__PURE__ */ c(f, { children: [/* @__PURE__ */ s("div", {
52
52
  className: "text-2xl font-bold",
53
53
  children: _.length
54
54
  }), /* @__PURE__ */ s("p", {
55
- className: "text-xs text-muted-foreground",
55
+ className: "text-xs text-text-secondary",
56
56
  children: "Live call activity"
57
57
  })] })] }),
58
58
  /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c(p, {
@@ -70,12 +70,12 @@ function _() {
70
70
  children: [/* @__PURE__ */ s(m, {
71
71
  className: "text-sm font-medium",
72
72
  children: "Avg Duration"
73
- }), /* @__PURE__ */ s(n, { className: "h-4 w-4 text-muted-foreground" })]
73
+ }), /* @__PURE__ */ s(n, { className: "h-4 w-4 text-text-secondary" })]
74
74
  }), /* @__PURE__ */ c(f, { children: [/* @__PURE__ */ s("div", {
75
75
  className: "text-2xl font-bold",
76
76
  children: h(y)
77
77
  }), /* @__PURE__ */ s("p", {
78
- className: "text-xs text-muted-foreground",
78
+ className: "text-xs text-text-secondary",
79
79
  children: "minutes"
80
80
  })] })] })
81
81
  ]
@@ -90,14 +90,14 @@ function _() {
90
90
  className: "text-sm font-medium",
91
91
  children: e.name
92
92
  }), /* @__PURE__ */ s("p", {
93
- className: "text-xs text-muted-foreground",
93
+ className: "text-xs text-text-secondary",
94
94
  children: e.topic
95
95
  })] })]
96
96
  }), /* @__PURE__ */ c("div", {
97
97
  className: "flex items-center gap-3",
98
98
  children: [
99
99
  /* @__PURE__ */ s("span", {
100
- className: "text-xs text-muted-foreground",
100
+ className: "text-xs text-text-secondary",
101
101
  children: e.time
102
102
  }),
103
103
  /* @__PURE__ */ s(l, {
@@ -1 +1 @@
1
- {"version":3,"file":"CommunicationsCallsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CommunicationsCallsPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Clock, Phone, PhoneIncoming, PhoneMissed, PhoneOutgoing } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype CallType = 'incoming' | 'outgoing' | 'missed';\n\ntype CallRecord = {\n id: string;\n name: string;\n type: CallType;\n duration: string;\n time: string;\n topic: string;\n};\n\nconst formatDuration = (minutes: number): string => {\n const safeMinutes = Math.max(minutes, 0);\n const hours = Math.floor(safeMinutes / 60);\n const mins = safeMinutes % 60;\n if (hours > 0) {\n return `${String(hours).padStart(2, '0')}:${String(mins).padStart(2, '0')}`;\n }\n return `00:${String(mins).padStart(2, '0')}`;\n};\n\nconst CallIcon = ({ type }: { type: CallType }) => {\n if (type === 'incoming') return <PhoneIncoming className=\"h-4 w-4 text-green-500\" />;\n if (type === 'outgoing') return <PhoneOutgoing className=\"h-4 w-4 text-blue-500\" />;\n return <PhoneMissed className=\"h-4 w-4 text-red-500\" />;\n};\n\nexport function CommunicationsCallsPagePage() {\n const { employees, teams } = useCrewFoundryStore();\n\n const callHistory = useMemo<CallRecord[]>(() => {\n const seed = employees.slice(0, 10);\n return seed.map((employee, index) => {\n const callType: CallType =\n index % 5 === 0 ? 'missed' : index % 2 === 0 ? 'outgoing' : 'incoming';\n const topicSource = teams[index % Math.max(teams.length, 1)];\n const durationMinutes = Math.round((employee.performanceScore + index) * 3);\n return {\n id: `call-${employee.id}`,\n name: `${employee.firstName} ${employee.lastName}`.trim(),\n type: callType,\n duration: callType === 'missed' ? '-' : formatDuration(durationMinutes),\n time: new Date(employee.startDate).toLocaleDateString(),\n topic: topicSource\n ? `${topicSource.name} check-in`\n : `${employee.department} operations update`,\n };\n });\n }, [employees, teams]);\n\n const connectedCalls = callHistory.filter((call) => call.duration !== '-');\n const averageMinutes = connectedCalls.length\n ? Math.round(\n connectedCalls\n .map((call) => {\n const [hours, minutes] = call.duration.split(':').map(Number);\n return hours * 60 + minutes;\n })\n .reduce((total, value) => total + value, 0) / connectedCalls.length\n )\n : 0;\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\">Calls</h1>\n <p className=\"text-sm text-muted-foreground\">Voice call history and quick dial</p>\n </div>\n <Button size=\"sm\">\n <Phone className=\"mr-1 h-4 w-4\" />\n New Call\n </Button>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Calls</CardTitle>\n <Phone className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{callHistory.length}</div>\n <p className=\"text-xs text-muted-foreground\">Live call activity</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Missed</CardTitle>\n <PhoneMissed className=\"h-4 w-4 text-red-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {callHistory.filter((call) => call.type === 'missed').length}\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Avg Duration</CardTitle>\n <Clock className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{formatDuration(averageMinutes)}</div>\n <p className=\"text-xs text-muted-foreground\">minutes</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Call History</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {callHistory.map((call) => (\n <div key={call.id} className=\"flex items-center justify-between rounded border p-3\">\n <div className=\"flex items-center gap-3\">\n <CallIcon type={call.type} />\n <div>\n <p className=\"text-sm font-medium\">{call.name}</p>\n <p className=\"text-xs text-muted-foreground\">{call.topic}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-xs text-muted-foreground\">{call.time}</span>\n <Badge\n variant={call.type === 'missed' ? 'destructive' : 'outline'}\n className=\"text-[10px]\"\n >\n {call.duration === '-' ? 'missed' : call.duration}\n </Badge>\n <Button variant=\"outline\" size=\"sm\" className=\"h-7\">\n <Phone className=\"h-3 w-3\" />\n </Button>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CommunicationsCallsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CommunicationsCallsPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Clock, Phone, PhoneIncoming, PhoneMissed, PhoneOutgoing } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype CallType = 'incoming' | 'outgoing' | 'missed';\n\ntype CallRecord = {\n id: string;\n name: string;\n type: CallType;\n duration: string;\n time: string;\n topic: string;\n};\n\nconst formatDuration = (minutes: number): string => {\n const safeMinutes = Math.max(minutes, 0);\n const hours = Math.floor(safeMinutes / 60);\n const mins = safeMinutes % 60;\n if (hours > 0) {\n return `${String(hours).padStart(2, '0')}:${String(mins).padStart(2, '0')}`;\n }\n return `00:${String(mins).padStart(2, '0')}`;\n};\n\nconst CallIcon = ({ type }: { type: CallType }) => {\n if (type === 'incoming') return <PhoneIncoming className=\"h-4 w-4 text-green-500\" />;\n if (type === 'outgoing') return <PhoneOutgoing className=\"h-4 w-4 text-blue-500\" />;\n return <PhoneMissed className=\"h-4 w-4 text-red-500\" />;\n};\n\nexport function CommunicationsCallsPagePage() {\n const { employees, teams } = useCrewFoundryStore();\n\n const callHistory = useMemo<CallRecord[]>(() => {\n const seed = employees.slice(0, 10);\n return seed.map((employee, index) => {\n const callType: CallType =\n index % 5 === 0 ? 'missed' : index % 2 === 0 ? 'outgoing' : 'incoming';\n const topicSource = teams[index % Math.max(teams.length, 1)];\n const durationMinutes = Math.round((employee.performanceScore + index) * 3);\n return {\n id: `call-${employee.id}`,\n name: `${employee.firstName} ${employee.lastName}`.trim(),\n type: callType,\n duration: callType === 'missed' ? '-' : formatDuration(durationMinutes),\n time: new Date(employee.startDate).toLocaleDateString(),\n topic: topicSource\n ? `${topicSource.name} check-in`\n : `${employee.department} operations update`,\n };\n });\n }, [employees, teams]);\n\n const connectedCalls = callHistory.filter((call) => call.duration !== '-');\n const averageMinutes = connectedCalls.length\n ? Math.round(\n connectedCalls\n .map((call) => {\n const [hours, minutes] = call.duration.split(':').map(Number);\n return hours * 60 + minutes;\n })\n .reduce((total, value) => total + value, 0) / connectedCalls.length\n )\n : 0;\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\">Calls</h1>\n <p className=\"text-sm text-text-secondary\">Voice call history and quick dial</p>\n </div>\n <Button size=\"sm\">\n <Phone className=\"mr-1 h-4 w-4\" />\n New Call\n </Button>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Calls</CardTitle>\n <Phone className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{callHistory.length}</div>\n <p className=\"text-xs text-text-secondary\">Live call activity</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Missed</CardTitle>\n <PhoneMissed className=\"h-4 w-4 text-red-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {callHistory.filter((call) => call.type === 'missed').length}\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Avg Duration</CardTitle>\n <Clock className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{formatDuration(averageMinutes)}</div>\n <p className=\"text-xs text-text-secondary\">minutes</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Call History</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {callHistory.map((call) => (\n <div key={call.id} className=\"flex items-center justify-between rounded border p-3\">\n <div className=\"flex items-center gap-3\">\n <CallIcon type={call.type} />\n <div>\n <p className=\"text-sm font-medium\">{call.name}</p>\n <p className=\"text-xs text-text-secondary\">{call.topic}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-xs text-text-secondary\">{call.time}</span>\n <Badge\n variant={call.type === 'missed' ? 'destructive' : 'outline'}\n className=\"text-[10px]\"\n >\n {call.duration === '-' ? 'missed' : call.duration}\n </Badge>\n <Button variant=\"outline\" size=\"sm\" className=\"h-7\">\n <Phone className=\"h-3 w-3\" />\n </Button>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -13,12 +13,12 @@ function f() {
13
13
  className: "text-2xl font-semibold",
14
14
  children: "Company Directory"
15
15
  }), /* @__PURE__ */ s("p", {
16
- className: "text-sm text-muted-foreground",
16
+ className: "text-sm text-text-secondary",
17
17
  children: [f.length, " team members"]
18
18
  })] }),
19
19
  /* @__PURE__ */ s("div", {
20
20
  className: "relative max-w-sm",
21
- children: [/* @__PURE__ */ o(a, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ o(d, {
21
+ children: [/* @__PURE__ */ o(a, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ o(d, {
22
22
  placeholder: "Search by name, role, department...",
23
23
  className: "pl-9",
24
24
  value: p,
@@ -33,7 +33,7 @@ function f() {
33
33
  className: "flex items-start gap-3",
34
34
  children: [
35
35
  /* @__PURE__ */ s("div", {
36
- className: "h-10 w-10 rounded-full bg-primary/10 flex items-center justify-center text-sm font-bold flex-shrink-0",
36
+ className: "h-10 w-10 rounded-full bg-action-primary-bg/10 flex items-center justify-center text-sm font-bold flex-shrink-0",
37
37
  children: [e.firstName[0], e.lastName[0]]
38
38
  }),
39
39
  /* @__PURE__ */ s("div", {
@@ -48,7 +48,7 @@ function f() {
48
48
  ]
49
49
  }),
50
50
  /* @__PURE__ */ o("p", {
51
- className: "text-xs text-muted-foreground",
51
+ className: "text-xs text-text-secondary",
52
52
  children: e.position
53
53
  }),
54
54
  /* @__PURE__ */ o(c, {
@@ -60,15 +60,15 @@ function f() {
60
60
  className: "mt-2 space-y-1",
61
61
  children: [
62
62
  /* @__PURE__ */ s("p", {
63
- className: "text-xs text-muted-foreground flex items-center gap-1",
63
+ className: "text-xs text-text-secondary flex items-center gap-1",
64
64
  children: [/* @__PURE__ */ o(n, { className: "h-3 w-3" }), e.email]
65
65
  }),
66
66
  /* @__PURE__ */ s("p", {
67
- className: "text-xs text-muted-foreground flex items-center gap-1",
67
+ className: "text-xs text-text-secondary flex items-center gap-1",
68
68
  children: [/* @__PURE__ */ o(i, { className: "h-3 w-3" }), e.phone]
69
69
  }),
70
70
  /* @__PURE__ */ s("p", {
71
- className: "text-xs text-muted-foreground flex items-center gap-1",
71
+ className: "text-xs text-text-secondary flex items-center gap-1",
72
72
  children: [/* @__PURE__ */ o(r, { className: "h-3 w-3" }), e.location]
73
73
  })
74
74
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"CommunicationsDirectoryPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CommunicationsDirectoryPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Badge, Card, CardContent, Input } from '@burdenoff/fe-libs/ui';\nimport { Mail, MapPin, Phone, Search } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function CommunicationsDirectoryPagePage() {\n const { employees } = useCrewFoundryStore();\n const [search, setSearch] = useState('');\n\n const filtered = employees.filter((e) =>\n `${e.firstName} ${e.lastName} ${e.department} ${e.position} ${e.email}`\n .toLowerCase()\n .includes(search.toLowerCase())\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Company Directory</h1>\n <p className=\"text-sm text-muted-foreground\">{employees.length} team members</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-muted-foreground\" />\n <Input\n placeholder=\"Search by name, role, department...\"\n className=\"pl-9\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n <div className=\"grid gap-3 md:grid-cols-2 lg:grid-cols-3\">\n {filtered.map((emp) => (\n <Card key={emp.id}>\n <CardContent className=\"p-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"h-10 w-10 rounded-full bg-primary/10 flex items-center justify-center text-sm font-bold flex-shrink-0\">\n {emp.firstName[0]}\n {emp.lastName[0]}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium\">\n {emp.firstName} {emp.lastName}\n </p>\n <p className=\"text-xs text-muted-foreground\">{emp.position}</p>\n <Badge variant=\"outline\" className=\"mt-1 text-[10px]\">\n {emp.department}\n </Badge>\n <div className=\"mt-2 space-y-1\">\n <p className=\"text-xs text-muted-foreground flex items-center gap-1\">\n <Mail className=\"h-3 w-3\" />\n {emp.email}\n </p>\n <p className=\"text-xs text-muted-foreground flex items-center gap-1\">\n <Phone className=\"h-3 w-3\" />\n {emp.phone}\n </p>\n <p className=\"text-xs text-muted-foreground flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {emp.location}\n </p>\n </div>\n </div>\n <Badge\n variant={emp.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {emp.status.replace('_', ' ')}\n </Badge>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAKA,SAAgB,IAAkC;CAChD,IAAM,EAAE,iBAAc,GAAqB,EACrC,CAAC,GAAQ,KAAa,EAAS,GAAG,EAElC,IAAW,EAAU,QAAQ,MACjC,GAAG,EAAE,UAAU,GAAG,EAAE,SAAS,GAAG,EAAE,WAAW,GAAG,EAAE,SAAS,GAAG,EAAE,QAC7D,aAAa,CACb,SAAS,EAAO,aAAa,CAAC,CAClC;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAyB;IAAsB,CAAA,EAC7D,kBAAC,KAAD;IAAG,WAAU;cAAb,CAA8C,EAAU,QAAO,gBAAiB;MAC5E,EAAA,CAAA;GACN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAQ,WAAU,0EAA2E,CAAA,EAC7F,kBAAC,GAAD;KACE,aAAY;KACZ,WAAU;KACV,OAAO;KACP,WAAW,MAAM,EAAU,EAAE,OAAO,MAAM;KAC1C,CAAA,CACE;;GACN,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAS,KAAK,MACb,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;KAAa,WAAU;eACrB,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACG,EAAI,UAAU,IACd,EAAI,SAAS,GACV;;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,KAAD;UAAG,WAAU;oBAAb;WACG,EAAI;WAAU;WAAE,EAAI;WACnB;;SACJ,kBAAC,KAAD;UAAG,WAAU;oBAAiC,EAAI;UAAa,CAAA;SAC/D,kBAAC,GAAD;UAAO,SAAQ;UAAU,WAAU;oBAChC,EAAI;UACC,CAAA;SACR,kBAAC,OAAD;UAAK,WAAU;oBAAf;WACE,kBAAC,KAAD;YAAG,WAAU;sBAAb,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAC3B,EAAI,MACH;;WACJ,kBAAC,KAAD;YAAG,WAAU;sBAAb,CACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,EAC5B,EAAI,MACH;;WACJ,kBAAC,KAAD;YAAG,WAAU;sBAAb,CACE,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA,EAC7B,EAAI,SACH;;WACA;;SACF;;OACN,kBAAC,GAAD;QACE,SAAS,EAAI,WAAW,WAAW,YAAY;QAC/C,WAAU;kBAET,EAAI,OAAO,QAAQ,KAAK,IAAI;QACvB,CAAA;OACJ;;KACM,CAAA,EACT,EAtCI,EAAI,GAsCR,CACP;IACE,CAAA;GACF"}
1
+ {"version":3,"file":"CommunicationsDirectoryPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CommunicationsDirectoryPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Badge, Card, CardContent, Input } from '@burdenoff/fe-libs/ui';\nimport { Mail, MapPin, Phone, Search } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function CommunicationsDirectoryPagePage() {\n const { employees } = useCrewFoundryStore();\n const [search, setSearch] = useState('');\n\n const filtered = employees.filter((e) =>\n `${e.firstName} ${e.lastName} ${e.department} ${e.position} ${e.email}`\n .toLowerCase()\n .includes(search.toLowerCase())\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Company Directory</h1>\n <p className=\"text-sm text-text-secondary\">{employees.length} team members</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 by name, role, department...\"\n className=\"pl-9\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n <div className=\"grid gap-3 md:grid-cols-2 lg:grid-cols-3\">\n {filtered.map((emp) => (\n <Card key={emp.id}>\n <CardContent className=\"p-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"h-10 w-10 rounded-full bg-action-primary-bg/10 flex items-center justify-center text-sm font-bold flex-shrink-0\">\n {emp.firstName[0]}\n {emp.lastName[0]}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium\">\n {emp.firstName} {emp.lastName}\n </p>\n <p className=\"text-xs text-text-secondary\">{emp.position}</p>\n <Badge variant=\"outline\" className=\"mt-1 text-[10px]\">\n {emp.department}\n </Badge>\n <div className=\"mt-2 space-y-1\">\n <p className=\"text-xs text-text-secondary flex items-center gap-1\">\n <Mail className=\"h-3 w-3\" />\n {emp.email}\n </p>\n <p className=\"text-xs text-text-secondary flex items-center gap-1\">\n <Phone className=\"h-3 w-3\" />\n {emp.phone}\n </p>\n <p className=\"text-xs text-text-secondary flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {emp.location}\n </p>\n </div>\n </div>\n <Badge\n variant={emp.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {emp.status.replace('_', ' ')}\n </Badge>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAKA,SAAgB,IAAkC;CAChD,IAAM,EAAE,iBAAc,GAAqB,EACrC,CAAC,GAAQ,KAAa,EAAS,GAAG,EAElC,IAAW,EAAU,QAAQ,MACjC,GAAG,EAAE,UAAU,GAAG,EAAE,SAAS,GAAG,EAAE,WAAW,GAAG,EAAE,SAAS,GAAG,EAAE,QAC7D,aAAa,CACb,SAAS,EAAO,aAAa,CAAC,CAClC;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAyB;IAAsB,CAAA,EAC7D,kBAAC,KAAD;IAAG,WAAU;cAAb,CAA4C,EAAU,QAAO,gBAAiB;MAC1E,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,OAAD;IAAK,WAAU;cACZ,EAAS,KAAK,MACb,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;KAAa,WAAU;eACrB,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACG,EAAI,UAAU,IACd,EAAI,SAAS,GACV;;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,KAAD;UAAG,WAAU;oBAAb;WACG,EAAI;WAAU;WAAE,EAAI;WACnB;;SACJ,kBAAC,KAAD;UAAG,WAAU;oBAA+B,EAAI;UAAa,CAAA;SAC7D,kBAAC,GAAD;UAAO,SAAQ;UAAU,WAAU;oBAChC,EAAI;UACC,CAAA;SACR,kBAAC,OAAD;UAAK,WAAU;oBAAf;WACE,kBAAC,KAAD;YAAG,WAAU;sBAAb,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAC3B,EAAI,MACH;;WACJ,kBAAC,KAAD;YAAG,WAAU;sBAAb,CACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,EAC5B,EAAI,MACH;;WACJ,kBAAC,KAAD;YAAG,WAAU;sBAAb,CACE,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA,EAC7B,EAAI,SACH;;WACA;;SACF;;OACN,kBAAC,GAAD;QACE,SAAS,EAAI,WAAW,WAAW,YAAY;QAC/C,WAAU;kBAET,EAAI,OAAO,QAAQ,KAAK,IAAI;QACvB,CAAA;OACJ;;KACM,CAAA,EACT,EAtCI,EAAI,GAsCR,CACP;IACE,CAAA;GACF"}
@@ -58,7 +58,7 @@ function b() {
58
58
  className: "text-2xl font-semibold",
59
59
  children: "Shared Files"
60
60
  }), /* @__PURE__ */ u("p", {
61
- className: "text-sm text-muted-foreground",
61
+ className: "text-sm text-text-secondary",
62
62
  children: [C.length, " files shared across teams"]
63
63
  })] }), /* @__PURE__ */ u(f, {
64
64
  size: "sm",
@@ -67,7 +67,7 @@ function b() {
67
67
  }),
68
68
  /* @__PURE__ */ u("div", {
69
69
  className: "relative max-w-sm",
70
- children: [/* @__PURE__ */ l(s, { className: "absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), /* @__PURE__ */ l(_, {
70
+ children: [/* @__PURE__ */ l(s, { className: "absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ l(_, {
71
71
  placeholder: "Search files...",
72
72
  className: "pl-9",
73
73
  value: i,
@@ -77,7 +77,7 @@ function b() {
77
77
  /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ l(h, { children: /* @__PURE__ */ l(g, { children: "Workspace Files" }) }), /* @__PURE__ */ u(m, {
78
78
  className: "p-0",
79
79
  children: [/* @__PURE__ */ u("div", {
80
- className: "grid grid-cols-6 gap-2 border-b p-4 text-xs font-medium text-muted-foreground",
80
+ className: "grid grid-cols-6 gap-2 border-b p-4 text-xs font-medium text-text-secondary",
81
81
  children: [
82
82
  /* @__PURE__ */ l("span", {
83
83
  className: "col-span-2",
@@ -92,7 +92,7 @@ function b() {
92
92
  })
93
93
  ]
94
94
  }), w.map((e) => /* @__PURE__ */ u("div", {
95
- className: "grid grid-cols-6 items-center gap-2 border-b px-4 py-3 text-sm last:border-0 hover:bg-muted/50",
95
+ className: "grid grid-cols-6 items-center gap-2 border-b px-4 py-3 text-sm last:border-0 hover:bg-bg-sunken/50",
96
96
  children: [
97
97
  /* @__PURE__ */ u("div", {
98
98
  className: "col-span-2 flex items-center gap-2",
@@ -102,7 +102,7 @@ function b() {
102
102
  })]
103
103
  }),
104
104
  /* @__PURE__ */ l("span", {
105
- className: "text-muted-foreground",
105
+ className: "text-text-secondary",
106
106
  children: e.uploadedBy
107
107
  }),
108
108
  /* @__PURE__ */ l(d, {
@@ -111,13 +111,13 @@ function b() {
111
111
  children: e.department
112
112
  }),
113
113
  /* @__PURE__ */ l("span", {
114
- className: "text-muted-foreground",
114
+ className: "text-text-secondary",
115
115
  children: e.date
116
116
  }),
117
117
  /* @__PURE__ */ u("div", {
118
118
  className: "flex items-center justify-end gap-2",
119
119
  children: [/* @__PURE__ */ l("span", {
120
- className: "text-muted-foreground",
120
+ className: "text-text-secondary",
121
121
  children: e.size
122
122
  }), /* @__PURE__ */ l(f, {
123
123
  variant: "outline",
@@ -1 +1 @@
1
- {"version":3,"file":"CommunicationsFilesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CommunicationsFilesPagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { Download, File, FileText, Image, Search, Upload } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype SharedFile = {\n id: string;\n name: string;\n type: 'pdf' | 'spreadsheet' | 'image' | 'doc';\n size: string;\n uploadedBy: string;\n date: string;\n department: string;\n};\n\nconst fileIcon = (type: SharedFile['type']) => {\n if (type === 'image') return <Image className=\"h-5 w-5 text-purple-500\" />;\n if (type === 'pdf') return <FileText className=\"h-5 w-5 text-red-500\" />;\n return <File className=\"h-5 w-5 text-blue-500\" />;\n};\n\nconst formatDate = (input: string): string => {\n const parsed = new Date(input);\n if (Number.isNaN(parsed.getTime())) {\n return 'Unknown';\n }\n return parsed.toISOString().split('T')[0];\n};\n\nexport function CommunicationsFilesPagePage() {\n const [search, setSearch] = useState('');\n const { announcements, invoices, projects, employees } = useCrewFoundryStore();\n\n const sharedFiles = useMemo<SharedFile[]>(() => {\n const announcementFiles = announcements.slice(0, 8).map((announcement, index) => {\n const uploader = employees[index % Math.max(employees.length, 1)];\n return {\n id: `announcement-${announcement.id}`,\n name: `${announcement.title}.pdf`,\n type: 'pdf' as const,\n size: `${Math.max(1, Math.round(announcement.content.length / 300))}.${index % 9} MB`,\n uploadedBy: uploader\n ? `${uploader.firstName} ${uploader.lastName}`.trim()\n : announcement.author,\n date: formatDate(announcement.createdAt),\n department: uploader?.department || 'Operations',\n };\n });\n\n const financeFiles = invoices.slice(0, 6).map((invoice, index) => ({\n id: `invoice-${invoice.id}`,\n name: `${invoice.number}-invoice.xlsx`,\n type: 'spreadsheet' as const,\n size: `${(invoice.amount / 1000).toFixed(1)} MB`,\n uploadedBy: invoice.clientName,\n date: formatDate(invoice.issueDate),\n department: index % 2 === 0 ? 'Finance' : 'Billing',\n }));\n\n const projectFiles = projects.slice(0, 6).map((project, index) => ({\n id: `project-${project.id}`,\n name: `${project.name}-brief.docx`,\n type: index % 2 === 0 ? ('doc' as const) : ('image' as const),\n size: `${(Math.max(project.tasks, 1) / 10).toFixed(1)} MB`,\n uploadedBy: project.managerName,\n date: formatDate(project.startDate),\n department: 'Projects',\n }));\n\n return [...announcementFiles, ...financeFiles, ...projectFiles];\n }, [announcements, employees, invoices, projects]);\n\n const filteredFiles = sharedFiles.filter((file) =>\n file.name.toLowerCase().includes(search.toLowerCase())\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\">Shared Files</h1>\n <p className=\"text-sm text-muted-foreground\">\n {sharedFiles.length} files shared across teams\n </p>\n </div>\n <Button size=\"sm\">\n <Upload className=\"mr-1 h-4 w-4\" />\n Upload File\n </Button>\n </div>\n\n <div className=\"relative max-w-sm\">\n <Search className=\"absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n placeholder=\"Search files...\"\n className=\"pl-9\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n />\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Workspace Files</CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n <div className=\"grid grid-cols-6 gap-2 border-b p-4 text-xs font-medium text-muted-foreground\">\n <span className=\"col-span-2\">Name</span>\n <span>Uploaded By</span>\n <span>Department</span>\n <span>Date</span>\n <span className=\"text-right\">Size</span>\n </div>\n {filteredFiles.map((file) => (\n <div\n key={file.id}\n className=\"grid grid-cols-6 items-center gap-2 border-b px-4 py-3 text-sm last:border-0 hover:bg-muted/50\"\n >\n <div className=\"col-span-2 flex items-center gap-2\">\n {fileIcon(file.type)}\n <span className=\"truncate font-medium\">{file.name}</span>\n </div>\n <span className=\"text-muted-foreground\">{file.uploadedBy}</span>\n <Badge variant=\"outline\" className=\"w-fit text-[10px]\">\n {file.department}\n </Badge>\n <span className=\"text-muted-foreground\">{file.date}</span>\n <div className=\"flex items-center justify-end gap-2\">\n <span className=\"text-muted-foreground\">{file.size}</span>\n <Button variant=\"outline\" size=\"sm\" className=\"h-7\">\n <Download className=\"h-3 w-3\" />\n </Button>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CommunicationsFilesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CommunicationsFilesPagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { Download, File, FileText, Image, Search, Upload } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype SharedFile = {\n id: string;\n name: string;\n type: 'pdf' | 'spreadsheet' | 'image' | 'doc';\n size: string;\n uploadedBy: string;\n date: string;\n department: string;\n};\n\nconst fileIcon = (type: SharedFile['type']) => {\n if (type === 'image') return <Image className=\"h-5 w-5 text-purple-500\" />;\n if (type === 'pdf') return <FileText className=\"h-5 w-5 text-red-500\" />;\n return <File className=\"h-5 w-5 text-blue-500\" />;\n};\n\nconst formatDate = (input: string): string => {\n const parsed = new Date(input);\n if (Number.isNaN(parsed.getTime())) {\n return 'Unknown';\n }\n return parsed.toISOString().split('T')[0];\n};\n\nexport function CommunicationsFilesPagePage() {\n const [search, setSearch] = useState('');\n const { announcements, invoices, projects, employees } = useCrewFoundryStore();\n\n const sharedFiles = useMemo<SharedFile[]>(() => {\n const announcementFiles = announcements.slice(0, 8).map((announcement, index) => {\n const uploader = employees[index % Math.max(employees.length, 1)];\n return {\n id: `announcement-${announcement.id}`,\n name: `${announcement.title}.pdf`,\n type: 'pdf' as const,\n size: `${Math.max(1, Math.round(announcement.content.length / 300))}.${index % 9} MB`,\n uploadedBy: uploader\n ? `${uploader.firstName} ${uploader.lastName}`.trim()\n : announcement.author,\n date: formatDate(announcement.createdAt),\n department: uploader?.department || 'Operations',\n };\n });\n\n const financeFiles = invoices.slice(0, 6).map((invoice, index) => ({\n id: `invoice-${invoice.id}`,\n name: `${invoice.number}-invoice.xlsx`,\n type: 'spreadsheet' as const,\n size: `${(invoice.amount / 1000).toFixed(1)} MB`,\n uploadedBy: invoice.clientName,\n date: formatDate(invoice.issueDate),\n department: index % 2 === 0 ? 'Finance' : 'Billing',\n }));\n\n const projectFiles = projects.slice(0, 6).map((project, index) => ({\n id: `project-${project.id}`,\n name: `${project.name}-brief.docx`,\n type: index % 2 === 0 ? ('doc' as const) : ('image' as const),\n size: `${(Math.max(project.tasks, 1) / 10).toFixed(1)} MB`,\n uploadedBy: project.managerName,\n date: formatDate(project.startDate),\n department: 'Projects',\n }));\n\n return [...announcementFiles, ...financeFiles, ...projectFiles];\n }, [announcements, employees, invoices, projects]);\n\n const filteredFiles = sharedFiles.filter((file) =>\n file.name.toLowerCase().includes(search.toLowerCase())\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\">Shared Files</h1>\n <p className=\"text-sm text-text-secondary\">\n {sharedFiles.length} files shared across teams\n </p>\n </div>\n <Button size=\"sm\">\n <Upload className=\"mr-1 h-4 w-4\" />\n Upload File\n </Button>\n </div>\n\n <div className=\"relative max-w-sm\">\n <Search className=\"absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <Input\n placeholder=\"Search files...\"\n className=\"pl-9\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n />\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Workspace Files</CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n <div className=\"grid grid-cols-6 gap-2 border-b p-4 text-xs font-medium text-text-secondary\">\n <span className=\"col-span-2\">Name</span>\n <span>Uploaded By</span>\n <span>Department</span>\n <span>Date</span>\n <span className=\"text-right\">Size</span>\n </div>\n {filteredFiles.map((file) => (\n <div\n key={file.id}\n className=\"grid grid-cols-6 items-center gap-2 border-b px-4 py-3 text-sm last:border-0 hover:bg-bg-sunken/50\"\n >\n <div className=\"col-span-2 flex items-center gap-2\">\n {fileIcon(file.type)}\n <span className=\"truncate font-medium\">{file.name}</span>\n </div>\n <span className=\"text-text-secondary\">{file.uploadedBy}</span>\n <Badge variant=\"outline\" className=\"w-fit text-[10px]\">\n {file.department}\n </Badge>\n <span className=\"text-text-secondary\">{file.date}</span>\n <div className=\"flex items-center justify-end gap-2\">\n <span className=\"text-text-secondary\">{file.size}</span>\n <Button variant=\"outline\" size=\"sm\" className=\"h-7\">\n <Download className=\"h-3 w-3\" />\n </Button>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -51,7 +51,7 @@ function h() {
51
51
  className: "text-2xl font-semibold",
52
52
  children: "Messages"
53
53
  }), /* @__PURE__ */ a("p", {
54
- className: "text-sm text-muted-foreground",
54
+ className: "text-sm text-text-secondary",
55
55
  children: "Team conversations and channels"
56
56
  })] }), /* @__PURE__ */ o(c, {
57
57
  size: "sm",
@@ -60,7 +60,7 @@ function h() {
60
60
  }),
61
61
  /* @__PURE__ */ o("div", {
62
62
  className: "relative max-w-sm",
63
- children: [/* @__PURE__ */ a(i, { className: "absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), /* @__PURE__ */ a(p, {
63
+ children: [/* @__PURE__ */ a(i, { className: "absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ a(p, {
64
64
  placeholder: "Search conversations...",
65
65
  className: "pl-9",
66
66
  value: h,
@@ -70,12 +70,12 @@ function h() {
70
70
  /* @__PURE__ */ o(l, { children: [/* @__PURE__ */ a(d, { children: /* @__PURE__ */ a(f, { children: "Conversation Inbox" }) }), /* @__PURE__ */ a(u, {
71
71
  className: "p-0",
72
72
  children: x.map((e) => /* @__PURE__ */ o("div", {
73
- className: "flex cursor-pointer items-center gap-3 border-b p-4 last:border-0 hover:bg-muted/50",
73
+ className: "flex cursor-pointer items-center gap-3 border-b p-4 last:border-0 hover:bg-bg-sunken/50",
74
74
  children: [
75
75
  /* @__PURE__ */ o("div", {
76
76
  className: "relative",
77
77
  children: [/* @__PURE__ */ a("div", {
78
- className: "flex h-10 w-10 items-center justify-center rounded-full bg-primary/10 text-sm font-medium",
78
+ className: "flex h-10 w-10 items-center justify-center rounded-full bg-action-primary-bg/10 text-sm font-medium",
79
79
  children: e.name.startsWith("#") ? "#" : e.name.split(" ").map((e) => e[0]).join("")
80
80
  }), e.online && /* @__PURE__ */ a("div", { className: "absolute right-0 bottom-0 h-3 w-3 rounded-full border-2 border-background bg-green-500" })]
81
81
  }),
@@ -88,16 +88,16 @@ function h() {
88
88
  className: "text-sm font-medium",
89
89
  children: e.name
90
90
  }), /* @__PURE__ */ a("span", {
91
- className: "text-xs text-muted-foreground",
91
+ className: "text-xs text-text-secondary",
92
92
  children: e.time
93
93
  })]
94
94
  }),
95
95
  /* @__PURE__ */ a("p", {
96
- className: "text-xs text-muted-foreground",
96
+ className: "text-xs text-text-secondary",
97
97
  children: e.role
98
98
  }),
99
99
  /* @__PURE__ */ a("p", {
100
- className: "mt-0.5 truncate text-xs text-muted-foreground",
100
+ className: "mt-0.5 truncate text-xs text-text-secondary",
101
101
  children: e.lastMessage
102
102
  })
103
103
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"CommunicationsMessagesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CommunicationsMessagesPagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { MessageSquare, Search } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype Conversation = {\n id: string;\n name: string;\n role: string;\n lastMessage: string;\n time: string;\n unread: number;\n online: boolean;\n};\n\nconst formatRelativeDate = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'Recently';\n }\n const diffMs = Date.now() - parsed.getTime();\n const diffHours = Math.max(0, Math.floor(diffMs / (1000 * 60 * 60)));\n if (diffHours < 1) return 'Just now';\n if (diffHours < 24) return `${diffHours}h ago`;\n const diffDays = Math.floor(diffHours / 24);\n return `${diffDays}d ago`;\n};\n\nexport function CommunicationsMessagesPagePage() {\n const [search, setSearch] = useState('');\n const { teams, employees, announcements, notifications } = useCrewFoundryStore();\n\n const conversations = useMemo<Conversation[]>(() => {\n const peopleConversations = employees.slice(0, 8).map((employee, index) => {\n const announcement = announcements[index % Math.max(announcements.length, 1)];\n const message =\n announcement?.content || `Status update for ${employee.department} initiatives.`;\n return {\n id: `person-${employee.id}`,\n name: `${employee.firstName} ${employee.lastName}`.trim(),\n role: employee.position,\n lastMessage: message,\n time: formatRelativeDate(announcement?.createdAt || employee.startDate),\n unread: Math.min(3, Math.round(employee.performanceScore) % 4),\n online: employee.status === 'active' && index % 2 === 0,\n };\n });\n\n const teamConversations = teams.slice(0, 5).map((team, index) => {\n const unread = notifications\n .slice(index, index + 3)\n .filter((notification) => !notification.read).length;\n return {\n id: `team-${team.id}`,\n name: `#${team.name.toLowerCase().replaceAll(' ', '-')}`,\n role: `Channel · ${team.memberCount} members`,\n lastMessage:\n announcements[index % Math.max(announcements.length, 1)]?.title ||\n `${team.leadName} posted an update in ${team.name}.`,\n time: formatRelativeDate(team.createdAt),\n unread,\n online: false,\n };\n });\n\n return [...peopleConversations, ...teamConversations];\n }, [announcements, employees, notifications, teams]);\n\n const filteredConversations = conversations.filter((conversation) =>\n conversation.name.toLowerCase().includes(search.toLowerCase())\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\">Messages</h1>\n <p className=\"text-sm text-muted-foreground\">Team conversations and channels</p>\n </div>\n <Button size=\"sm\">\n <MessageSquare className=\"mr-1 h-4 w-4\" />\n New Message\n </Button>\n </div>\n\n <div className=\"relative max-w-sm\">\n <Search className=\"absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n placeholder=\"Search conversations...\"\n className=\"pl-9\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n />\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Conversation Inbox</CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n {filteredConversations.map((conversation) => (\n <div\n key={conversation.id}\n className=\"flex cursor-pointer items-center gap-3 border-b p-4 last:border-0 hover:bg-muted/50\"\n >\n <div className=\"relative\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-primary/10 text-sm font-medium\">\n {conversation.name.startsWith('#')\n ? '#'\n : conversation.name\n .split(' ')\n .map((part) => part[0])\n .join('')}\n </div>\n {conversation.online && (\n <div className=\"absolute right-0 bottom-0 h-3 w-3 rounded-full border-2 border-background bg-green-500\" />\n )}\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm font-medium\">{conversation.name}</p>\n <span className=\"text-xs text-muted-foreground\">{conversation.time}</span>\n </div>\n <p className=\"text-xs text-muted-foreground\">{conversation.role}</p>\n <p className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {conversation.lastMessage}\n </p>\n </div>\n\n {conversation.unread > 0 && (\n <Badge className=\"flex h-5 w-5 items-center justify-center rounded-full p-0 text-[10px]\">\n {conversation.unread}\n </Badge>\n )}\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CommunicationsMessagesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CommunicationsMessagesPagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { MessageSquare, Search } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype Conversation = {\n id: string;\n name: string;\n role: string;\n lastMessage: string;\n time: string;\n unread: number;\n online: boolean;\n};\n\nconst formatRelativeDate = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'Recently';\n }\n const diffMs = Date.now() - parsed.getTime();\n const diffHours = Math.max(0, Math.floor(diffMs / (1000 * 60 * 60)));\n if (diffHours < 1) return 'Just now';\n if (diffHours < 24) return `${diffHours}h ago`;\n const diffDays = Math.floor(diffHours / 24);\n return `${diffDays}d ago`;\n};\n\nexport function CommunicationsMessagesPagePage() {\n const [search, setSearch] = useState('');\n const { teams, employees, announcements, notifications } = useCrewFoundryStore();\n\n const conversations = useMemo<Conversation[]>(() => {\n const peopleConversations = employees.slice(0, 8).map((employee, index) => {\n const announcement = announcements[index % Math.max(announcements.length, 1)];\n const message =\n announcement?.content || `Status update for ${employee.department} initiatives.`;\n return {\n id: `person-${employee.id}`,\n name: `${employee.firstName} ${employee.lastName}`.trim(),\n role: employee.position,\n lastMessage: message,\n time: formatRelativeDate(announcement?.createdAt || employee.startDate),\n unread: Math.min(3, Math.round(employee.performanceScore) % 4),\n online: employee.status === 'active' && index % 2 === 0,\n };\n });\n\n const teamConversations = teams.slice(0, 5).map((team, index) => {\n const unread = notifications\n .slice(index, index + 3)\n .filter((notification) => !notification.read).length;\n return {\n id: `team-${team.id}`,\n name: `#${team.name.toLowerCase().replaceAll(' ', '-')}`,\n role: `Channel · ${team.memberCount} members`,\n lastMessage:\n announcements[index % Math.max(announcements.length, 1)]?.title ||\n `${team.leadName} posted an update in ${team.name}.`,\n time: formatRelativeDate(team.createdAt),\n unread,\n online: false,\n };\n });\n\n return [...peopleConversations, ...teamConversations];\n }, [announcements, employees, notifications, teams]);\n\n const filteredConversations = conversations.filter((conversation) =>\n conversation.name.toLowerCase().includes(search.toLowerCase())\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\">Messages</h1>\n <p className=\"text-sm text-text-secondary\">Team conversations and channels</p>\n </div>\n <Button size=\"sm\">\n <MessageSquare className=\"mr-1 h-4 w-4\" />\n New Message\n </Button>\n </div>\n\n <div className=\"relative max-w-sm\">\n <Search className=\"absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <Input\n placeholder=\"Search conversations...\"\n className=\"pl-9\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n />\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Conversation Inbox</CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n {filteredConversations.map((conversation) => (\n <div\n key={conversation.id}\n className=\"flex cursor-pointer items-center gap-3 border-b p-4 last:border-0 hover:bg-bg-sunken/50\"\n >\n <div className=\"relative\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-action-primary-bg/10 text-sm font-medium\">\n {conversation.name.startsWith('#')\n ? '#'\n : conversation.name\n .split(' ')\n .map((part) => part[0])\n .join('')}\n </div>\n {conversation.online && (\n <div className=\"absolute right-0 bottom-0 h-3 w-3 rounded-full border-2 border-background bg-green-500\" />\n )}\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm font-medium\">{conversation.name}</p>\n <span className=\"text-xs text-text-secondary\">{conversation.time}</span>\n </div>\n <p className=\"text-xs text-text-secondary\">{conversation.role}</p>\n <p className=\"mt-0.5 truncate text-xs text-text-secondary\">\n {conversation.lastMessage}\n </p>\n </div>\n\n {conversation.unread > 0 && (\n <Badge className=\"flex h-5 w-5 items-center justify-center rounded-full p-0 text-[10px]\">\n {conversation.unread}\n </Badge>\n )}\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -11,7 +11,7 @@ function d() {
11
11
  className: "text-2xl font-semibold",
12
12
  children: "Team Channels"
13
13
  }), /* @__PURE__ */ i("p", {
14
- className: "text-sm text-muted-foreground",
14
+ className: "text-sm text-text-secondary",
15
15
  children: [d.length, " active team channels"]
16
16
  })] }), /* @__PURE__ */ r("div", {
17
17
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
@@ -28,7 +28,7 @@ function d() {
28
28
  children: e.status
29
29
  })]
30
30
  }), /* @__PURE__ */ r(c, { children: e.description })] }), /* @__PURE__ */ i(s, { children: [/* @__PURE__ */ i("div", {
31
- className: "flex items-center justify-between text-sm text-muted-foreground",
31
+ className: "flex items-center justify-between text-sm text-text-secondary",
32
32
  children: [/* @__PURE__ */ i("span", {
33
33
  className: "flex items-center gap-1",
34
34
  children: [
@@ -45,7 +45,7 @@ function d() {
45
45
  ]
46
46
  })]
47
47
  }), /* @__PURE__ */ i("div", {
48
- className: "mt-2 text-xs text-muted-foreground",
48
+ className: "mt-2 text-xs text-text-secondary",
49
49
  children: [
50
50
  /* @__PURE__ */ i("span", { children: ["Lead: ", e.leadName] }),
51
51
  " · ",
@@ -1 +1 @@
1
- {"version":3,"file":"CommunicationsTeamsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CommunicationsTeamsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { FolderKanban, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function CommunicationsTeamsPagePage() {\n const { teams } = useCrewFoundryStore();\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Team Channels</h1>\n <p className=\"text-sm text-muted-foreground\">{teams.length} active team channels</p>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {teams.map((team) => (\n <Card key={team.id} className=\"cursor-pointer hover:shadow-md transition-shadow\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{team.name}</CardTitle>\n <Badge\n variant={team.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {team.status}\n </Badge>\n </div>\n <CardDescription>{team.description}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center justify-between text-sm text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {team.memberCount} members\n </span>\n <span className=\"flex items-center gap-1\">\n <FolderKanban className=\"h-3 w-3\" />\n {team.projectCount} projects\n </span>\n </div>\n <div className=\"mt-2 text-xs text-muted-foreground\">\n <span>Lead: {team.leadName}</span> · <span>{team.department}</span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AAWA,SAAgB,IAA8B;CAC5C,IAAM,EAAE,aAAU,GAAqB;AAEvC,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;GAAI,WAAU;aAAyB;GAAkB,CAAA,EACzD,kBAAC,KAAD;GAAG,WAAU;aAAb,CAA8C,EAAM,QAAO,wBAAyB;KAChF,EAAA,CAAA,EACN,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAM,KAAK,MACV,kBAAC,GAAD;IAAoB,WAAU;cAA9B,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MAAW,WAAU;gBAAa,EAAK;MAAiB,CAAA,EACxD,kBAAC,GAAD;MACE,SAAS,EAAK,WAAW,WAAW,YAAY;MAChD,WAAU;gBAET,EAAK;MACA,CAAA,CACJ;QACN,kBAAC,GAAD,EAAA,UAAkB,EAAK,aAA8B,CAAA,CAC1C,EAAA,CAAA,EACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;OAC5B,EAAK;OAAY;OACb;SACP,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACE,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA;OACnC,EAAK;OAAa;OACd;QACH;QACN,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,QAAD,EAAA,UAAA,CAAM,UAAO,EAAK,SAAgB,EAAA,CAAA;;MAAG,kBAAC,QAAD,EAAA,UAAO,EAAK,YAAkB,CAAA;MAC/D;OACM,EAAA,CAAA,CACT;MA5BI,EAAK,GA4BT,CACP;GACE,CAAA,CACF"}
1
+ {"version":3,"file":"CommunicationsTeamsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/CommunicationsTeamsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { FolderKanban, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function CommunicationsTeamsPagePage() {\n const { teams } = useCrewFoundryStore();\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Team Channels</h1>\n <p className=\"text-sm text-text-secondary\">{teams.length} active team channels</p>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {teams.map((team) => (\n <Card key={team.id} className=\"cursor-pointer hover:shadow-md transition-shadow\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{team.name}</CardTitle>\n <Badge\n variant={team.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {team.status}\n </Badge>\n </div>\n <CardDescription>{team.description}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center justify-between text-sm text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {team.memberCount} members\n </span>\n <span className=\"flex items-center gap-1\">\n <FolderKanban className=\"h-3 w-3\" />\n {team.projectCount} projects\n </span>\n </div>\n <div className=\"mt-2 text-xs text-text-secondary\">\n <span>Lead: {team.leadName}</span> · <span>{team.department}</span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AAWA,SAAgB,IAA8B;CAC5C,IAAM,EAAE,aAAU,GAAqB;AAEvC,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;GAAI,WAAU;aAAyB;GAAkB,CAAA,EACzD,kBAAC,KAAD;GAAG,WAAU;aAAb,CAA4C,EAAM,QAAO,wBAAyB;KAC9E,EAAA,CAAA,EACN,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAM,KAAK,MACV,kBAAC,GAAD;IAAoB,WAAU;cAA9B,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MAAW,WAAU;gBAAa,EAAK;MAAiB,CAAA,EACxD,kBAAC,GAAD;MACE,SAAS,EAAK,WAAW,WAAW,YAAY;MAChD,WAAU;gBAET,EAAK;MACA,CAAA,CACJ;QACN,kBAAC,GAAD,EAAA,UAAkB,EAAK,aAA8B,CAAA,CAC1C,EAAA,CAAA,EACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;OAC5B,EAAK;OAAY;OACb;SACP,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACE,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA;OACnC,EAAK;OAAa;OACd;QACH;QACN,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,QAAD,EAAA,UAAA,CAAM,UAAO,EAAK,SAAgB,EAAA,CAAA;;MAAG,kBAAC,QAAD,EAAA,UAAO,EAAK,YAAkB,CAAA;MAC/D;OACM,EAAA,CAAA,CACT;MA5BI,EAAK,GA4BT,CACP;GACE,CAAA,CACF"}
@@ -50,7 +50,7 @@ function v() {
50
50
  className: "text-2xl font-semibold",
51
51
  children: "Video Calls"
52
52
  }), /* @__PURE__ */ s("p", {
53
- className: "text-sm text-muted-foreground",
53
+ className: "text-sm text-text-secondary",
54
54
  children: "Video meetings and recordings"
55
55
  })] }), /* @__PURE__ */ c("div", {
56
56
  className: "flex gap-2",
@@ -77,7 +77,7 @@ function v() {
77
77
  className: "text-2xl font-bold",
78
78
  children: x.length
79
79
  }), /* @__PURE__ */ s("p", {
80
- className: "text-xs text-muted-foreground",
80
+ className: "text-xs text-text-secondary",
81
81
  children: "meetings scheduled"
82
82
  })] })] }),
83
83
  /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c(p, {
@@ -85,12 +85,12 @@ function v() {
85
85
  children: [/* @__PURE__ */ s(m, {
86
86
  className: "text-sm font-medium",
87
87
  children: "Recordings"
88
- }), /* @__PURE__ */ s(i, { className: "h-4 w-4 text-muted-foreground" })]
88
+ }), /* @__PURE__ */ s(i, { className: "h-4 w-4 text-text-secondary" })]
89
89
  }), /* @__PURE__ */ c(f, { children: [/* @__PURE__ */ s("div", {
90
90
  className: "text-2xl font-bold",
91
91
  children: S.length
92
92
  }), /* @__PURE__ */ s("p", {
93
- className: "text-xs text-muted-foreground",
93
+ className: "text-xs text-text-secondary",
94
94
  children: "available"
95
95
  })] })] }),
96
96
  /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c(p, {
@@ -98,7 +98,7 @@ function v() {
98
98
  children: [/* @__PURE__ */ s(m, {
99
99
  className: "text-sm font-medium",
100
100
  children: "Avg Duration"
101
- }), /* @__PURE__ */ s(r, { className: "h-4 w-4 text-muted-foreground" })]
101
+ }), /* @__PURE__ */ s(r, { className: "h-4 w-4 text-text-secondary" })]
102
102
  }), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ c("div", {
103
103
  className: "text-2xl font-bold",
104
104
  children: [C, " min"]
@@ -113,13 +113,13 @@ function v() {
113
113
  className: "text-sm font-medium",
114
114
  children: e.title
115
115
  }), /* @__PURE__ */ c("p", {
116
- className: "text-xs text-muted-foreground",
116
+ className: "text-xs text-text-secondary",
117
117
  children: ["Hosted by ", e.host]
118
118
  })] }), /* @__PURE__ */ c("div", {
119
119
  className: "flex items-center gap-3",
120
120
  children: [
121
121
  /* @__PURE__ */ s("span", {
122
- className: "text-xs text-muted-foreground",
122
+ className: "text-xs text-text-secondary",
123
123
  children: e.time
124
124
  }),
125
125
  /* @__PURE__ */ s(l, {
@@ -153,7 +153,7 @@ function v() {
153
153
  className: "text-sm font-medium",
154
154
  children: e.title
155
155
  }), /* @__PURE__ */ c("p", {
156
- className: "text-xs text-muted-foreground",
156
+ className: "text-xs text-text-secondary",
157
157
  children: [
158
158
  e.date,
159
159
  " · ",