@burdenoff/microfe-crewfoundry 2026.624.1 → 2026.625.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/crewfoundry/pages/AdminAdminPagePage.js +86 -70
  2. package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
  3. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +104 -88
  4. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  5. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +91 -75
  6. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
  7. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +119 -103
  8. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  9. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +107 -91
  10. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
  11. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +10 -10
  12. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  13. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +60 -48
  14. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
  15. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +10 -10
  16. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
  17. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +20 -20
  18. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
  19. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +22 -22
  20. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  21. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +7 -7
  22. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
  23. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +67 -55
  24. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
  25. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +54 -42
  26. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  27. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +68 -52
  28. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
  29. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +30 -30
  30. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
  31. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +9 -9
  32. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  33. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +90 -74
  34. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
  35. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +166 -132
  36. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  37. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +43 -43
  38. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
  39. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +107 -91
  40. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
  41. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +35 -35
  42. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
  43. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +78 -62
  44. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
  45. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +17 -17
  46. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  47. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +39 -39
  48. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  49. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +53 -41
  50. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  51. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +41 -37
  52. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/HiringJobsPagePage.js +25 -20
  54. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  55. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +54 -42
  56. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  57. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +76 -60
  58. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +83 -67
  60. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  61. package/dist/crewfoundry/pages/HrPayrollPagePage.js +86 -70
  62. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  63. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +79 -63
  64. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  65. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +51 -39
  66. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
  67. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +14 -14
  68. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +29 -25
  70. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  71. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +17 -17
  72. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
  73. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +11 -11
  74. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  75. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +76 -60
  76. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
  77. package/dist/crewfoundry/pages/LearningLearningPagePage.js +67 -51
  78. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
  79. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +17 -17
  80. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  81. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +7 -7
  82. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  83. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +69 -53
  84. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  85. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +54 -42
  86. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  87. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +66 -54
  88. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
  89. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +37 -37
  90. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
  91. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +33 -32
  92. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
  93. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +54 -42
  94. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  95. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +11 -11
  96. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
  97. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +18 -18
  98. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
  99. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +7 -7
  100. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  101. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +29 -25
  102. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
  103. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +22 -18
  104. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  105. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +55 -43
  106. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
  107. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +7 -7
  108. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  109. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +62 -46
  110. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  111. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +14 -14
  112. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
  113. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +71 -59
  114. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
  115. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +20 -20
  116. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
  117. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +33 -29
  118. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  119. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +16 -16
  120. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  121. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +53 -41
  122. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
  123. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +25 -21
  124. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
  125. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +9 -9
  126. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
  127. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +48 -48
  128. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  129. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +13 -13
  130. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  131. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"LearningCertificatesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningCertificatesPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Award, Download, ExternalLink } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype Certificate = {\n id: string;\n title: string;\n issueDate: string;\n instructor: string;\n credentialId: string;\n status: 'active' | 'expiring';\n expiryDate?: string;\n};\n\nconst BASE_TS = new Date('2026-03-01T00:00:00Z').getTime();\n\nconst isoDate = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'Unknown';\n }\n return parsed.toISOString().split('T')[0];\n};\n\nexport function LearningCertificatesPagePage() {\n const { courses, employees } = useCrewFoundryStore();\n\n const certificates = useMemo<Certificate[]>(() => {\n return courses.slice(0, 12).map((course, index) => {\n const instructor =\n employees[index % Math.max(employees.length, 1)]?.firstName &&\n employees[index % Math.max(employees.length, 1)]?.lastName\n ? `${employees[index % employees.length].firstName} ${employees[index % employees.length].lastName}`\n : course.instructor;\n\n return {\n id: course.id,\n title: course.title,\n issueDate: isoDate(new Date(BASE_TS - index * 86400000 * 12).toISOString()),\n instructor,\n credentialId: `CF-${course.id.slice(0, 6).toUpperCase()}-${index + 1}`,\n status: index % 5 === 0 ? 'expiring' : 'active',\n expiryDate:\n index % 5 === 0\n ? isoDate(new Date(BASE_TS + 86400000 * (60 + index * 3)).toISOString())\n : undefined,\n };\n });\n }, [courses, employees]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Certificates</h1>\n <p className=\"text-sm text-text-secondary\">{certificates.length} certificates earned</p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {certificates.map((certificate) => (\n <Card key={certificate.id}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <Award className=\"h-8 w-8 text-yellow-500\" />\n <Badge\n variant={certificate.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {certificate.status}\n </Badge>\n </div>\n <CardTitle className=\"mt-2 text-base\">{certificate.title}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2 text-sm text-text-secondary\">\n <div>\n <span className=\"text-xs\">Instructor:</span> {certificate.instructor}\n </div>\n <div>\n <span className=\"text-xs\">Issued:</span> {certificate.issueDate}\n </div>\n <div>\n <span className=\"text-xs\">Credential ID:</span> {certificate.credentialId}\n </div>\n {certificate.expiryDate ? (\n <div className=\"text-yellow-600\">\n <span className=\"text-xs\">Expires:</span> {certificate.expiryDate}\n </div>\n ) : null}\n </div>\n\n <div className=\"mt-3 flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" className=\"flex-1\">\n <Download className=\"mr-1 h-3 w-3\" />\n Download\n </Button>\n <Button variant=\"outline\" size=\"sm\" className=\"flex-1\">\n <ExternalLink className=\"mr-1 h-3 w-3\" />\n Verify\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"LearningCertificatesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningCertificatesPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { Award, Download, ExternalLink } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype Certificate = {\n id: string;\n title: string;\n issueDate: string;\n instructor: string;\n credentialId: string;\n status: 'active' | 'expiring';\n expiryDate?: string;\n};\n\nconst BASE_TS = new Date('2026-03-01T00:00:00Z').getTime();\n\nconst isoDate = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'Unknown';\n }\n return parsed.toISOString().split('T')[0];\n};\n\nexport function LearningCertificatesPagePage() {\n const { courses, employees } = useCrewFoundryStore();\n\n const certificates = useMemo<Certificate[]>(() => {\n return courses.slice(0, 12).map((course, index) => {\n const instructor =\n employees[index % Math.max(employees.length, 1)]?.firstName &&\n employees[index % Math.max(employees.length, 1)]?.lastName\n ? `${employees[index % employees.length].firstName} ${employees[index % employees.length].lastName}`\n : course.instructor;\n\n return {\n id: course.id,\n title: course.title,\n issueDate: isoDate(new Date(BASE_TS - index * 86400000 * 12).toISOString()),\n instructor,\n credentialId: `CF-${course.id.slice(0, 6).toUpperCase()}-${index + 1}`,\n status: index % 5 === 0 ? 'expiring' : 'active',\n expiryDate:\n index % 5 === 0\n ? isoDate(new Date(BASE_TS + 86400000 * (60 + index * 3)).toISOString())\n : undefined,\n };\n });\n }, [courses, employees]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Certificates</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{certificates.length} certificates earned</p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {certificates.map((certificate) => (\n <Card key={certificate.id}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <Award className=\"h-8 w-8 text-status-warning-text\" />\n <Badge\n variant={certificate.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {certificate.status}\n </Badge>\n </div>\n <CardTitle className=\"mt-2 text-base\">{certificate.title}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2 text-sm text-text-secondary\">\n <div>\n <span className=\"text-xs\">Instructor:</span> {certificate.instructor}\n </div>\n <div>\n <span className=\"text-xs\">Issued:</span> {certificate.issueDate}\n </div>\n <div>\n <span className=\"text-xs\">Credential ID:</span> {certificate.credentialId}\n </div>\n {certificate.expiryDate ? (\n <div className=\"text-status-warning-text\">\n <span className=\"text-xs\">Expires:</span> {certificate.expiryDate}\n </div>\n ) : null}\n </div>\n\n <div className=\"mt-3 flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" className=\"flex-1\">\n <Download className=\"mr-1 h-3 w-3\" />\n Download\n </Button>\n <Button variant=\"outline\" size=\"sm\" className=\"flex-1\">\n <ExternalLink className=\"mr-1 h-3 w-3\" />\n Verify\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAuBA,IAAM,qBAAU,IAAI,KAAK,uBAAuB,EAAC,SAAS,EAEpD,KAAW,MAA0B;CACzC,IAAM,IAAS,IAAI,KAAK,EAAM;AAI9B,QAHI,OAAO,MAAM,EAAO,SAAS,CAAC,GACzB,YAEF,EAAO,aAAa,CAAC,MAAM,IAAI,CAAC;;AAGzC,SAAgB,IAA+B;CAC7C,IAAM,EAAE,YAAS,iBAAc,GAAqB,EAE9C,IAAe,QACZ,EAAQ,MAAM,GAAG,GAAG,CAAC,KAAK,GAAQ,MAAU;EACjD,IAAM,IACJ,EAAU,IAAQ,KAAK,IAAI,EAAU,QAAQ,EAAE,GAAG,aAClD,EAAU,IAAQ,KAAK,IAAI,EAAU,QAAQ,EAAE,GAAG,WAC9C,GAAG,EAAU,IAAQ,EAAU,QAAQ,UAAU,GAAG,EAAU,IAAQ,EAAU,QAAQ,aACxF,EAAO;AAEb,SAAO;GACL,IAAI,EAAO;GACX,OAAO,EAAO;GACd,WAAW,mBAAQ,IAAI,KAAK,IAAU,IAAQ,QAAW,GAAG,EAAC,aAAa,CAAC;GAC3E;GACA,cAAc,MAAM,EAAO,GAAG,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,IAAQ;GACnE,QAAQ,IAAQ,KAAM,IAAI,aAAa;GACvC,YACE,IAAQ,KAAM,IACV,EAAQ,IAAI,KAAK,IAAU,SAAY,KAAK,IAAQ,GAAG,CAAC,aAAa,CAAC,GACtE,KAAA;GACP;GACD,EACD,CAAC,GAAS,EAAU,CAAC;AAExB,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;GAAI,WAAU;aACZ,kBAAC,GAAD,EAAA,UAAc,gBAA2B,CAAA;GACtC,CAAA,EACL,kBAAC,KAAD;GAAG,WAAU;aAAb,CAA4C,EAAa,QAAO,uBAAwB;KACpF,EAAA,CAAA,EAEN,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAa,KAAK,MACjB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAO,WAAU,oCAAqC,CAAA,EACtD,kBAAC,GAAD;KACE,SAAS,EAAY,WAAW,WAAW,YAAY;KACvD,WAAU;eAET,EAAY;KACP,CAAA,CACJ;OACN,kBAAC,GAAD;IAAW,WAAU;cAAkB,EAAY;IAAkB,CAAA,CAC1D,EAAA,CAAA,EACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,OAAD,EAAA,UAAA;MACE,kBAAC,QAAD;OAAM,WAAU;iBAAU;OAAkB,CAAA;;MAAE,EAAY;MACtD,EAAA,CAAA;KACN,kBAAC,OAAD,EAAA,UAAA;MACE,kBAAC,QAAD;OAAM,WAAU;iBAAU;OAAc,CAAA;;MAAE,EAAY;MAClD,EAAA,CAAA;KACN,kBAAC,OAAD,EAAA,UAAA;MACE,kBAAC,QAAD;OAAM,WAAU;iBAAU;OAAqB,CAAA;;MAAE,EAAY;MACzD,EAAA,CAAA;KACL,EAAY,aACX,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,QAAD;QAAM,WAAU;kBAAU;QAAe,CAAA;;OAAE,EAAY;OACnD;UACJ;KACA;OAEN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD;KAAQ,SAAQ;KAAU,MAAK;KAAK,WAAU;eAA9C,CACE,kBAAC,GAAD,EAAU,WAAU,gBAAiB,CAAA,EAAA,WAE9B;QACT,kBAAC,GAAD;KAAQ,SAAQ;KAAU,MAAK;KAAK,WAAU;eAA9C,CACE,kBAAC,GAAD,EAAc,WAAU,gBAAiB,CAAA,EAAA,SAElC;OACL;MACM,EAAA,CAAA,CACT,EAAA,EA1CI,EAAY,GA0ChB,CACP;GACE,CAAA,CACF"}
@@ -1,15 +1,19 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { BookOpen as t, Clock as n, Play as r, Star as i, Users as a } from "lucide-react";
3
3
  import { jsx as o, jsxs as s } from "react/jsx-runtime";
4
- import { Badge as c, Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p } from "@burdenoff/fe-libs/ui";
4
+ import { Badge as c, Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p, GradientText as m, IllustratedEmptyState as h } from "@burdenoff/fe-libs/ui";
5
5
  //#region src/crewfoundry/pages/LearningCourseDetailsPagePage.tsx
6
- function m() {
7
- let { courses: m } = e(), h = m[0];
8
- if (!h) return /* @__PURE__ */ o("div", {
9
- className: "p-6 text-text-secondary",
10
- children: "No course found."
6
+ function g() {
7
+ let { courses: g } = e(), _ = g[0];
8
+ if (!_) return /* @__PURE__ */ o("div", {
9
+ className: "p-6",
10
+ children: /* @__PURE__ */ o(h, {
11
+ illustration: "empty-search",
12
+ title: "Course not found",
13
+ description: "This course is no longer available."
14
+ })
11
15
  });
12
- let g = Math.round(h.completed / h.enrolled * 100);
16
+ let v = Math.round(_.completed / _.enrolled * 100);
13
17
  return /* @__PURE__ */ s("div", {
14
18
  className: "space-y-6 p-6 max-w-4xl",
15
19
  children: [
@@ -19,18 +23,18 @@ function m() {
19
23
  className: "flex items-center gap-2 mb-1",
20
24
  children: [/* @__PURE__ */ o("h1", {
21
25
  className: "text-2xl font-semibold",
22
- children: h.title
26
+ children: /* @__PURE__ */ o(m, { children: _.title })
23
27
  }), /* @__PURE__ */ o(c, {
24
- variant: h.level === "beginner" ? "secondary" : h.level === "intermediate" ? "default" : "destructive",
25
- children: h.level
28
+ variant: _.level === "beginner" ? "secondary" : _.level === "intermediate" ? "default" : "destructive",
29
+ children: _.level
26
30
  })]
27
31
  }), /* @__PURE__ */ s("p", {
28
32
  className: "text-sm text-text-secondary",
29
33
  children: [
30
34
  "by ",
31
- h.instructor,
35
+ _.instructor,
32
36
  " · ",
33
- h.category
37
+ _.category
34
38
  ]
35
39
  })] }), /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ o(r, { className: "h-4 w-4 mr-1" }), "Start Course"] })]
36
40
  }),
@@ -43,7 +47,7 @@ function m() {
43
47
  /* @__PURE__ */ o(n, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
44
48
  /* @__PURE__ */ o("p", {
45
49
  className: "text-lg font-bold",
46
- children: h.duration
50
+ children: _.duration
47
51
  }),
48
52
  /* @__PURE__ */ o("p", {
49
53
  className: "text-xs text-text-secondary",
@@ -57,7 +61,7 @@ function m() {
57
61
  /* @__PURE__ */ o(t, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
58
62
  /* @__PURE__ */ o("p", {
59
63
  className: "text-lg font-bold",
60
- children: h.modules
64
+ children: _.modules
61
65
  }),
62
66
  /* @__PURE__ */ o("p", {
63
67
  className: "text-xs text-text-secondary",
@@ -71,7 +75,7 @@ function m() {
71
75
  /* @__PURE__ */ o(a, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
72
76
  /* @__PURE__ */ o("p", {
73
77
  className: "text-lg font-bold",
74
- children: h.enrolled
78
+ children: _.enrolled
75
79
  }),
76
80
  /* @__PURE__ */ o("p", {
77
81
  className: "text-xs text-text-secondary",
@@ -82,10 +86,10 @@ function m() {
82
86
  /* @__PURE__ */ o(u, { children: /* @__PURE__ */ s(d, {
83
87
  className: "p-4 text-center",
84
88
  children: [
85
- /* @__PURE__ */ o(i, { className: "h-5 w-5 mx-auto text-yellow-500 mb-1" }),
89
+ /* @__PURE__ */ o(i, { className: "h-5 w-5 mx-auto text-status-warning-text mb-1" }),
86
90
  /* @__PURE__ */ s("p", {
87
91
  className: "text-lg font-bold",
88
- children: [h.rating, "/5"]
92
+ children: [_.rating, "/5"]
89
93
  }),
90
94
  /* @__PURE__ */ o("p", {
91
95
  className: "text-xs text-text-secondary",
@@ -97,10 +101,10 @@ function m() {
97
101
  }),
98
102
  /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, { children: /* @__PURE__ */ o(p, { children: "About this Course" }) }), /* @__PURE__ */ s(d, { children: [/* @__PURE__ */ o("p", {
99
103
  className: "text-sm text-text-secondary",
100
- children: h.description
104
+ children: _.description
101
105
  }), /* @__PURE__ */ o("div", {
102
106
  className: "flex flex-wrap gap-1 mt-3",
103
- children: h.skills.map((e) => /* @__PURE__ */ o(c, {
107
+ children: _.skills.map((e) => /* @__PURE__ */ o(c, {
104
108
  variant: "outline",
105
109
  children: e
106
110
  }, e))
@@ -110,19 +114,19 @@ function m() {
110
114
  children: [/* @__PURE__ */ s("div", {
111
115
  className: "flex justify-between text-sm",
112
116
  children: [/* @__PURE__ */ s("span", { children: [
113
- h.completed,
117
+ _.completed,
114
118
  " of ",
115
- h.enrolled,
119
+ _.enrolled,
116
120
  " students completed"
117
121
  ] }), /* @__PURE__ */ s("span", {
118
122
  className: "font-medium",
119
- children: [g, "%"]
123
+ children: [v, "%"]
120
124
  })]
121
125
  }), /* @__PURE__ */ o("div", {
122
126
  className: "h-3 bg-bg-sunken rounded overflow-hidden",
123
127
  children: /* @__PURE__ */ o("div", {
124
- className: "h-3 bg-green-500 rounded",
125
- style: { width: `${g}%` }
128
+ className: "h-3 bg-status-success-text rounded",
129
+ style: { width: `${v}%` }
126
130
  })
127
131
  })]
128
132
  }) })] })
@@ -130,6 +134,6 @@ function m() {
130
134
  });
131
135
  }
132
136
  //#endregion
133
- export { m as LearningCourseDetailsPagePage };
137
+ export { g as LearningCourseDetailsPagePage };
134
138
 
135
139
  //# sourceMappingURL=LearningCourseDetailsPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LearningCourseDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningCourseDetailsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { BookOpen, CheckCircle, Clock, Play, Star, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function LearningCourseDetailsPagePage() {\n const { courses } = useCrewFoundryStore();\n const course = courses[0];\n if (!course) return <div className=\"p-6 text-text-secondary\">No course found.</div>;\n const completionRate = Math.round((course.completed / course.enrolled) * 100);\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2 mb-1\">\n <h1 className=\"text-2xl font-semibold\">{course.title}</h1>\n <Badge\n variant={\n course.level === 'beginner'\n ? 'secondary'\n : course.level === 'intermediate'\n ? 'default'\n : 'destructive'\n }\n >\n {course.level}\n </Badge>\n </div>\n <p className=\"text-sm text-text-secondary\">\n by {course.instructor} · {course.category}\n </p>\n </div>\n <Button>\n <Play className=\"h-4 w-4 mr-1\" />\n Start Course\n </Button>\n </div>\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Clock className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{course.duration}</p>\n <p className=\"text-xs text-text-secondary\">Duration</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <BookOpen className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{course.modules}</p>\n <p className=\"text-xs text-text-secondary\">Modules</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{course.enrolled}</p>\n <p className=\"text-xs text-text-secondary\">Enrolled</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Star className=\"h-5 w-5 mx-auto text-yellow-500 mb-1\" />\n <p className=\"text-lg font-bold\">{course.rating}/5</p>\n <p className=\"text-xs text-text-secondary\">Rating</p>\n </CardContent>\n </Card>\n </div>\n <Card>\n <CardHeader>\n <CardTitle>About this Course</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary\">{course.description}</p>\n <div className=\"flex flex-wrap gap-1 mt-3\">\n {course.skills.map((s) => (\n <Badge key={s} variant=\"outline\">\n {s}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Completion Statistics</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span>\n {course.completed} of {course.enrolled} students completed\n </span>\n <span className=\"font-medium\">{completionRate}%</span>\n </div>\n <div className=\"h-3 bg-bg-sunken rounded overflow-hidden\">\n <div className=\"h-3 bg-green-500 rounded\" style={{ width: `${completionRate}%` }} />\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"LearningCourseDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningCourseDetailsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GradientText,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { BookOpen, CheckCircle, Clock, Play, Star, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function LearningCourseDetailsPagePage() {\n const { courses } = useCrewFoundryStore();\n const course = courses[0];\n if (!course)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Course not found\"\n description=\"This course is no longer available.\"\n />\n </div>\n );\n const completionRate = Math.round((course.completed / course.enrolled) * 100);\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2 mb-1\">\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{course.title}</GradientText>\n </h1>\n <Badge\n variant={\n course.level === 'beginner'\n ? 'secondary'\n : course.level === 'intermediate'\n ? 'default'\n : 'destructive'\n }\n >\n {course.level}\n </Badge>\n </div>\n <p className=\"text-sm text-text-secondary\">\n by {course.instructor} · {course.category}\n </p>\n </div>\n <Button>\n <Play className=\"h-4 w-4 mr-1\" />\n Start Course\n </Button>\n </div>\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Clock className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{course.duration}</p>\n <p className=\"text-xs text-text-secondary\">Duration</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <BookOpen className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{course.modules}</p>\n <p className=\"text-xs text-text-secondary\">Modules</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{course.enrolled}</p>\n <p className=\"text-xs text-text-secondary\">Enrolled</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Star className=\"h-5 w-5 mx-auto text-status-warning-text mb-1\" />\n <p className=\"text-lg font-bold\">{course.rating}/5</p>\n <p className=\"text-xs text-text-secondary\">Rating</p>\n </CardContent>\n </Card>\n </div>\n <Card>\n <CardHeader>\n <CardTitle>About this Course</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary\">{course.description}</p>\n <div className=\"flex flex-wrap gap-1 mt-3\">\n {course.skills.map((s) => (\n <Badge key={s} variant=\"outline\">\n {s}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Completion Statistics</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span>\n {course.completed} of {course.enrolled} students completed\n </span>\n <span className=\"font-medium\">{completionRate}%</span>\n </div>\n <div className=\"h-3 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-3 bg-status-success-text rounded\"\n style={{ width: `${completionRate}%` }}\n />\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -2,37 +2,37 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { useMemo as t } from "react";
3
3
  import { CheckCircle as n, Clock as r, Play as i } from "lucide-react";
4
4
  import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
- import { Badge as s, Button as c, Card as l, CardContent as u, CardHeader as d, CardTitle as f } from "@burdenoff/fe-libs/ui";
5
+ import { Badge as s, Button as c, Card as l, CardContent as u, CardHeader as d, CardTitle as f, GradientText as p } from "@burdenoff/fe-libs/ui";
6
6
  //#region src/crewfoundry/pages/LearningCourseLearningPagePage.tsx
7
- function p() {
8
- let { courses: p } = e(), m = p[0], h = t(() => {
9
- let e = Math.max(m?.modules || 0, 6);
7
+ function m() {
8
+ let { courses: m } = e(), h = m[0], g = t(() => {
9
+ let e = Math.max(h?.modules || 0, 6);
10
10
  return Array.from({ length: e }, (e, t) => {
11
11
  let n = t < 2 ? "completed" : t === 2 ? "in_progress" : "locked";
12
12
  return {
13
13
  id: `module-${t + 1}`,
14
- title: `${m?.title || "Learning"} Module ${t + 1}`,
14
+ title: `${h?.title || "Learning"} Module ${t + 1}`,
15
15
  duration: `${25 + t % 4 * 10} min`,
16
16
  status: n
17
17
  };
18
18
  });
19
- }, [m]), g = h.filter((e) => e.status === "completed").length, _ = Math.round(g / Math.max(h.length, 1) * 100);
19
+ }, [h]), _ = g.filter((e) => e.status === "completed").length, v = Math.round(_ / Math.max(g.length, 1) * 100);
20
20
  return /* @__PURE__ */ o("div", {
21
21
  className: "max-w-3xl space-y-6 p-6",
22
22
  children: [
23
23
  /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
24
24
  className: "text-2xl font-semibold",
25
- children: m?.title || "Leadership Fundamentals for Tech Managers"
25
+ children: /* @__PURE__ */ a(p, { children: h?.title || "Leadership Fundamentals for Tech Managers" })
26
26
  }), /* @__PURE__ */ o("p", {
27
27
  className: "text-sm text-text-secondary",
28
28
  children: [
29
29
  "by ",
30
- m?.instructor || "CrewFoundry Academy",
30
+ h?.instructor || "CrewFoundry Academy",
31
31
  " · Module ",
32
- g + 1,
32
+ _ + 1,
33
33
  " of",
34
34
  " ",
35
- h.length
35
+ g.length
36
36
  ]
37
37
  })] }),
38
38
  /* @__PURE__ */ a(l, { children: /* @__PURE__ */ o(u, {
@@ -45,22 +45,22 @@ function p() {
45
45
  children: "Progress"
46
46
  }), /* @__PURE__ */ o("span", {
47
47
  className: "text-sm",
48
- children: [_, "%"]
48
+ children: [v, "%"]
49
49
  })]
50
50
  }),
51
51
  /* @__PURE__ */ a("div", {
52
52
  className: "h-3 overflow-hidden rounded bg-bg-sunken",
53
53
  children: /* @__PURE__ */ a("div", {
54
54
  className: "h-3 rounded bg-action-primary-bg",
55
- style: { width: `${_}%` }
55
+ style: { width: `${v}%` }
56
56
  })
57
57
  }),
58
58
  /* @__PURE__ */ o("p", {
59
59
  className: "mt-1 text-xs text-text-secondary",
60
60
  children: [
61
- g,
61
+ _,
62
62
  " of ",
63
- h.length,
63
+ g.length,
64
64
  " modules completed"
65
65
  ]
66
66
  })
@@ -68,12 +68,12 @@ function p() {
68
68
  }) }),
69
69
  /* @__PURE__ */ o(l, { children: [/* @__PURE__ */ a(d, { children: /* @__PURE__ */ a(f, { children: "Course Modules" }) }), /* @__PURE__ */ a(u, {
70
70
  className: "space-y-2",
71
- children: h.map((e, t) => /* @__PURE__ */ o("div", {
71
+ children: g.map((e, t) => /* @__PURE__ */ o("div", {
72
72
  className: `flex items-center gap-3 rounded border p-3 ${e.status === "locked" ? "opacity-50" : ""}`,
73
73
  children: [
74
74
  /* @__PURE__ */ a("div", {
75
75
  className: "flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-bg-sunken text-xs font-bold",
76
- children: e.status === "completed" ? /* @__PURE__ */ a(n, { className: "h-5 w-5 text-green-500" }) : t + 1
76
+ children: e.status === "completed" ? /* @__PURE__ */ a(n, { className: "h-5 w-5 text-status-success-text" }) : t + 1
77
77
  }),
78
78
  /* @__PURE__ */ o("div", {
79
79
  className: "flex-1",
@@ -106,6 +106,6 @@ function p() {
106
106
  });
107
107
  }
108
108
  //#endregion
109
- export { p as LearningCourseLearningPagePage };
109
+ export { m as LearningCourseLearningPagePage };
110
110
 
111
111
  //# sourceMappingURL=LearningCourseLearningPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LearningCourseLearningPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningCourseLearningPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { CheckCircle, Clock, Play } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype CourseModule = {\n id: string;\n title: string;\n duration: string;\n status: 'completed' | 'in_progress' | 'locked';\n};\n\nexport function LearningCourseLearningPagePage() {\n const { courses } = useCrewFoundryStore();\n\n const currentCourse = courses[0];\n\n const courseModules = useMemo<CourseModule[]>(() => {\n const moduleCount = Math.max(currentCourse?.modules || 0, 6);\n return Array.from({ length: moduleCount }, (_, index) => {\n const status: CourseModule['status'] =\n index < 2 ? 'completed' : index === 2 ? 'in_progress' : 'locked';\n return {\n id: `module-${index + 1}`,\n title: `${currentCourse?.title || 'Learning'} Module ${index + 1}`,\n duration: `${25 + (index % 4) * 10} min`,\n status,\n };\n });\n }, [currentCourse]);\n\n const completedCount = courseModules.filter((module) => module.status === 'completed').length;\n const progress = Math.round((completedCount / Math.max(courseModules.length, 1)) * 100);\n\n return (\n <div className=\"max-w-3xl space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n {currentCourse?.title || 'Leadership Fundamentals for Tech Managers'}\n </h1>\n <p className=\"text-sm text-text-secondary\">\n by {currentCourse?.instructor || 'CrewFoundry Academy'} · Module {completedCount + 1} of{' '}\n {courseModules.length}\n </p>\n </div>\n\n <Card>\n <CardContent className=\"p-4\">\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-sm font-medium\">Progress</span>\n <span className=\"text-sm\">{progress}%</span>\n </div>\n <div className=\"h-3 overflow-hidden rounded bg-bg-sunken\">\n <div className=\"h-3 rounded bg-action-primary-bg\" style={{ width: `${progress}%` }} />\n </div>\n <p className=\"mt-1 text-xs text-text-secondary\">\n {completedCount} of {courseModules.length} modules completed\n </p>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Course Modules</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {courseModules.map((module, index) => (\n <div\n key={module.id}\n className={`flex items-center gap-3 rounded border p-3 ${module.status === 'locked' ? 'opacity-50' : ''}`}\n >\n <div className=\"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-bg-sunken text-xs font-bold\">\n {module.status === 'completed' ? (\n <CheckCircle className=\"h-5 w-5 text-green-500\" />\n ) : (\n index + 1\n )}\n </div>\n <div className=\"flex-1\">\n <p\n className={`text-sm ${module.status === 'completed' ? 'text-text-secondary line-through' : 'font-medium'}`}\n >\n {module.title}\n </p>\n <p className=\"flex items-center gap-1 text-xs text-text-secondary\">\n <Clock className=\"h-3 w-3\" />\n {module.duration}\n </p>\n </div>\n {module.status === 'in_progress' ? (\n <Button size=\"sm\">\n <Play className=\"mr-1 h-3 w-3\" />\n Continue\n </Button>\n ) : null}\n {module.status === 'completed' ? (\n <Badge variant=\"default\" className=\"text-[10px]\">\n Completed\n </Badge>\n ) : null}\n {module.status === 'locked' ? (\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n Locked\n </Badge>\n ) : null}\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;;AAYA,SAAgB,IAAiC;CAC/C,IAAM,EAAE,eAAY,GAAqB,EAEnC,IAAgB,EAAQ,IAExB,IAAgB,QAA8B;EAClD,IAAM,IAAc,KAAK,IAAI,GAAe,WAAW,GAAG,EAAE;AAC5D,SAAO,MAAM,KAAK,EAAE,QAAQ,GAAa,GAAG,GAAG,MAAU;GACvD,IAAM,IACJ,IAAQ,IAAI,cAAc,MAAU,IAAI,gBAAgB;AAC1D,UAAO;IACL,IAAI,UAAU,IAAQ;IACtB,OAAO,GAAG,GAAe,SAAS,WAAW,UAAU,IAAQ;IAC/D,UAAU,GAAG,KAAM,IAAQ,IAAK,GAAG;IACnC;IACD;IACD;IACD,CAAC,EAAc,CAAC,EAEb,IAAiB,EAAc,QAAQ,MAAW,EAAO,WAAW,YAAY,CAAC,QACjF,IAAW,KAAK,MAAO,IAAiB,KAAK,IAAI,EAAc,QAAQ,EAAE,GAAI,IAAI;AAEvF,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACX,GAAe,SAAS;IACtB,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cAAb;KAA2C;KACrC,GAAe,cAAc;KAAsB;KAAW,IAAiB;KAAE;KAAI;KACxF,EAAc;KACb;MACA,EAAA,CAAA;GAEN,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IAAa,WAAU;cAAvB;KACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,QAAD;OAAM,WAAU;iBAAsB;OAAe,CAAA,EACrD,kBAAC,QAAD;OAAM,WAAU;iBAAhB,CAA2B,GAAS,IAAQ;SACxC;;KACN,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,OAAD;OAAK,WAAU;OAAmC,OAAO,EAAE,OAAO,GAAG,EAAS,IAAI;OAAI,CAAA;MAClF,CAAA;KACN,kBAAC,KAAD;MAAG,WAAU;gBAAb;OACG;OAAe;OAAK,EAAc;OAAO;OACxC;;KACQ;OACT,CAAA;GAEP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,kBAA0B,CAAA,EAC1B,CAAA,EACb,kBAAC,GAAD;IAAa,WAAU;cACpB,EAAc,KAAK,GAAQ,MAC1B,kBAAC,OAAD;KAEE,WAAW,8CAA8C,EAAO,WAAW,WAAW,eAAe;eAFvG;MAIE,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAO,WAAW,cACjB,kBAAC,GAAD,EAAa,WAAU,0BAA2B,CAAA,GAElD,IAAQ;OAEN,CAAA;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QACE,WAAW,WAAW,EAAO,WAAW,cAAc,qCAAqC;kBAE1F,EAAO;QACN,CAAA,EACJ,kBAAC,KAAD;QAAG,WAAU;kBAAb,CACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,EAC5B,EAAO,SACN;UACA;;MACL,EAAO,WAAW,gBACjB,kBAAC,GAAD;OAAQ,MAAK;iBAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,WAE1B;WACP;MACH,EAAO,WAAW,cACjB,kBAAC,GAAD;OAAO,SAAQ;OAAU,WAAU;iBAAc;OAEzC,CAAA,GACN;MACH,EAAO,WAAW,WACjB,kBAAC,GAAD;OAAO,SAAQ;OAAY,WAAU;iBAAc;OAE3C,CAAA,GACN;MACA;OArCC,EAAO,GAqCR,CACN;IACU,CAAA,CACT,EAAA,CAAA;GACH"}
1
+ {"version":3,"file":"LearningCourseLearningPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningCourseLearningPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { CheckCircle, Clock, Play } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype CourseModule = {\n id: string;\n title: string;\n duration: string;\n status: 'completed' | 'in_progress' | 'locked';\n};\n\nexport function LearningCourseLearningPagePage() {\n const { courses } = useCrewFoundryStore();\n\n const currentCourse = courses[0];\n\n const courseModules = useMemo<CourseModule[]>(() => {\n const moduleCount = Math.max(currentCourse?.modules || 0, 6);\n return Array.from({ length: moduleCount }, (_, index) => {\n const status: CourseModule['status'] =\n index < 2 ? 'completed' : index === 2 ? 'in_progress' : 'locked';\n return {\n id: `module-${index + 1}`,\n title: `${currentCourse?.title || 'Learning'} Module ${index + 1}`,\n duration: `${25 + (index % 4) * 10} min`,\n status,\n };\n });\n }, [currentCourse]);\n\n const completedCount = courseModules.filter((module) => module.status === 'completed').length;\n const progress = Math.round((completedCount / Math.max(courseModules.length, 1)) * 100);\n\n return (\n <div className=\"max-w-3xl space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>\n {currentCourse?.title || 'Leadership Fundamentals for Tech Managers'}\n </GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n by {currentCourse?.instructor || 'CrewFoundry Academy'} · Module {completedCount + 1} of{' '}\n {courseModules.length}\n </p>\n </div>\n\n <Card>\n <CardContent className=\"p-4\">\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-sm font-medium\">Progress</span>\n <span className=\"text-sm\">{progress}%</span>\n </div>\n <div className=\"h-3 overflow-hidden rounded bg-bg-sunken\">\n <div className=\"h-3 rounded bg-action-primary-bg\" style={{ width: `${progress}%` }} />\n </div>\n <p className=\"mt-1 text-xs text-text-secondary\">\n {completedCount} of {courseModules.length} modules completed\n </p>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Course Modules</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {courseModules.map((module, index) => (\n <div\n key={module.id}\n className={`flex items-center gap-3 rounded border p-3 ${module.status === 'locked' ? 'opacity-50' : ''}`}\n >\n <div className=\"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-bg-sunken text-xs font-bold\">\n {module.status === 'completed' ? (\n <CheckCircle className=\"h-5 w-5 text-status-success-text\" />\n ) : (\n index + 1\n )}\n </div>\n <div className=\"flex-1\">\n <p\n className={`text-sm ${module.status === 'completed' ? 'text-text-secondary line-through' : 'font-medium'}`}\n >\n {module.title}\n </p>\n <p className=\"flex items-center gap-1 text-xs text-text-secondary\">\n <Clock className=\"h-3 w-3\" />\n {module.duration}\n </p>\n </div>\n {module.status === 'in_progress' ? (\n <Button size=\"sm\">\n <Play className=\"mr-1 h-3 w-3\" />\n Continue\n </Button>\n ) : null}\n {module.status === 'completed' ? (\n <Badge variant=\"default\" className=\"text-[10px]\">\n Completed\n </Badge>\n ) : null}\n {module.status === 'locked' ? (\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n Locked\n </Badge>\n ) : null}\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;;AAoBA,SAAgB,IAAiC;CAC/C,IAAM,EAAE,eAAY,GAAqB,EAEnC,IAAgB,EAAQ,IAExB,IAAgB,QAA8B;EAClD,IAAM,IAAc,KAAK,IAAI,GAAe,WAAW,GAAG,EAAE;AAC5D,SAAO,MAAM,KAAK,EAAE,QAAQ,GAAa,GAAG,GAAG,MAAU;GACvD,IAAM,IACJ,IAAQ,IAAI,cAAc,MAAU,IAAI,gBAAgB;AAC1D,UAAO;IACL,IAAI,UAAU,IAAQ;IACtB,OAAO,GAAG,GAAe,SAAS,WAAW,UAAU,IAAQ;IAC/D,UAAU,GAAG,KAAM,IAAQ,IAAK,GAAG;IACnC;IACD;IACD;IACD,CAAC,EAAc,CAAC,EAEb,IAAiB,EAAc,QAAQ,MAAW,EAAO,WAAW,YAAY,CAAC,QACjF,IAAW,KAAK,MAAO,IAAiB,KAAK,IAAI,EAAc,QAAQ,EAAE,GAAI,IAAI;AAEvF,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UACG,GAAe,SAAS,6CACZ,CAAA;IACZ,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cAAb;KAA2C;KACrC,GAAe,cAAc;KAAsB;KAAW,IAAiB;KAAE;KAAI;KACxF,EAAc;KACb;MACA,EAAA,CAAA;GAEN,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IAAa,WAAU;cAAvB;KACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,QAAD;OAAM,WAAU;iBAAsB;OAAe,CAAA,EACrD,kBAAC,QAAD;OAAM,WAAU;iBAAhB,CAA2B,GAAS,IAAQ;SACxC;;KACN,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,OAAD;OAAK,WAAU;OAAmC,OAAO,EAAE,OAAO,GAAG,EAAS,IAAI;OAAI,CAAA;MAClF,CAAA;KACN,kBAAC,KAAD;MAAG,WAAU;gBAAb;OACG;OAAe;OAAK,EAAc;OAAO;OACxC;;KACQ;OACT,CAAA;GAEP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,kBAA0B,CAAA,EAC1B,CAAA,EACb,kBAAC,GAAD;IAAa,WAAU;cACpB,EAAc,KAAK,GAAQ,MAC1B,kBAAC,OAAD;KAEE,WAAW,8CAA8C,EAAO,WAAW,WAAW,eAAe;eAFvG;MAIE,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAO,WAAW,cACjB,kBAAC,GAAD,EAAa,WAAU,oCAAqC,CAAA,GAE5D,IAAQ;OAEN,CAAA;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QACE,WAAW,WAAW,EAAO,WAAW,cAAc,qCAAqC;kBAE1F,EAAO;QACN,CAAA,EACJ,kBAAC,KAAD;QAAG,WAAU;kBAAb,CACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,EAC5B,EAAO,SACN;UACA;;MACL,EAAO,WAAW,gBACjB,kBAAC,GAAD;OAAQ,MAAK;iBAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,WAE1B;WACP;MACH,EAAO,WAAW,cACjB,kBAAC,GAAD;OAAO,SAAQ;OAAU,WAAU;iBAAc;OAEzC,CAAA,GACN;MACH,EAAO,WAAW,WACjB,kBAAC,GAAD;OAAO,SAAQ;OAAY,WAAU;iBAAc;OAE3C,CAAA,GACN;MACA;OArCC,EAAO,GAqCR,CACN;IACU,CAAA,CACT,EAAA,CAAA;GACH"}
@@ -2,32 +2,32 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { useState as t } from "react";
3
3
  import { Search as n, Star as r, Users as i } from "lucide-react";
4
4
  import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
- import { Badge as s, Card as c, CardContent as l, CardDescription as u, CardHeader as d, CardTitle as f, Input as p } from "@burdenoff/fe-libs/ui";
5
+ import { Badge as s, Card as c, CardContent as l, CardDescription as u, CardHeader as d, CardTitle as f, GradientText as p, Input as m } from "@burdenoff/fe-libs/ui";
6
6
  //#region src/crewfoundry/pages/LearningCoursesPagePage.tsx
7
- function m() {
8
- let { courses: m } = e(), [h, g] = t(""), _ = m.filter((e) => `${e.title} ${e.category} ${e.instructor}`.toLowerCase().includes(h.toLowerCase()));
7
+ function h() {
8
+ let { courses: h } = e(), [g, _] = t(""), v = h.filter((e) => `${e.title} ${e.category} ${e.instructor}`.toLowerCase().includes(g.toLowerCase()));
9
9
  return /* @__PURE__ */ o("div", {
10
10
  className: "space-y-6 p-6",
11
11
  children: [
12
12
  /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
13
13
  className: "text-2xl font-semibold",
14
- children: "Course Catalog"
14
+ children: /* @__PURE__ */ a(p, { children: "Course Catalog" })
15
15
  }), /* @__PURE__ */ o("p", {
16
16
  className: "text-sm text-text-secondary",
17
- children: [m.length, " courses available"]
17
+ children: [h.length, " courses available"]
18
18
  })] }),
19
19
  /* @__PURE__ */ o("div", {
20
20
  className: "relative max-w-sm",
21
- children: [/* @__PURE__ */ a(n, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ a(p, {
21
+ children: [/* @__PURE__ */ a(n, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ a(m, {
22
22
  placeholder: "Search courses...",
23
23
  className: "pl-9",
24
- value: h,
25
- onChange: (e) => g(e.target.value)
24
+ value: g,
25
+ onChange: (e) => _(e.target.value)
26
26
  })]
27
27
  }),
28
28
  /* @__PURE__ */ a("div", {
29
29
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
30
- children: _.map((e) => /* @__PURE__ */ o(c, {
30
+ children: v.map((e) => /* @__PURE__ */ o(c, {
31
31
  className: "hover:shadow-md transition-shadow cursor-pointer",
32
32
  children: [/* @__PURE__ */ o(d, { children: [
33
33
  /* @__PURE__ */ o("div", {
@@ -72,7 +72,7 @@ function m() {
72
72
  children: [
73
73
  /* @__PURE__ */ o("span", {
74
74
  className: "flex items-center gap-1",
75
- children: [/* @__PURE__ */ a(r, { className: "h-3 w-3 text-yellow-500" }), e.rating]
75
+ children: [/* @__PURE__ */ a(r, { className: "h-3 w-3 text-status-warning-text" }), e.rating]
76
76
  }),
77
77
  /* @__PURE__ */ o("span", {
78
78
  className: "flex items-center gap-1",
@@ -92,6 +92,6 @@ function m() {
92
92
  });
93
93
  }
94
94
  //#endregion
95
- export { m as LearningCoursesPagePage };
95
+ export { h as LearningCoursesPagePage };
96
96
 
97
97
  //# sourceMappingURL=LearningCoursesPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LearningCoursesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningCoursesPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { BookOpen, Search, Star, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function LearningCoursesPagePage() {\n const { courses } = useCrewFoundryStore();\n const [search, setSearch] = useState('');\n const filtered = courses.filter((c) =>\n `${c.title} ${c.category} ${c.instructor}`.toLowerCase().includes(search.toLowerCase())\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Course Catalog</h1>\n <p className=\"text-sm text-text-secondary\">{courses.length} courses available</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 courses...\"\n className=\"pl-9\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {filtered.map((course) => (\n <Card key={course.id} className=\"hover:shadow-md transition-shadow cursor-pointer\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {course.category}\n </Badge>\n <Badge\n variant={\n course.level === 'beginner'\n ? 'secondary'\n : course.level === 'intermediate'\n ? 'default'\n : 'destructive'\n }\n className=\"text-[10px]\"\n >\n {course.level}\n </Badge>\n </div>\n <CardTitle className=\"text-base mt-2\">{course.title}</CardTitle>\n <CardDescription>\n {course.instructor} · {course.duration} · {course.modules} modules\n </CardDescription>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary mb-3\">{course.description}</p>\n <div className=\"flex flex-wrap gap-1 mb-3\">\n {course.skills.map((s) => (\n <Badge key={s} variant=\"outline\" className=\"text-[9px]\">\n {s}\n </Badge>\n ))}\n </div>\n <div className=\"flex items-center justify-between text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-yellow-500\" />\n {course.rating}\n </span>\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {course.enrolled} enrolled\n </span>\n <span>{Math.round((course.completed / course.enrolled) * 100)}% completion</span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAaA,SAAgB,IAA0B;CACxC,IAAM,EAAE,eAAY,GAAqB,EACnC,CAAC,GAAQ,KAAa,EAAS,GAAG,EAClC,IAAW,EAAQ,QAAQ,MAC/B,GAAG,EAAE,MAAM,GAAG,EAAE,SAAS,GAAG,EAAE,aAAa,aAAa,CAAC,SAAS,EAAO,aAAa,CAAC,CACxF;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAyB;IAAmB,CAAA,EAC1D,kBAAC,KAAD;IAAG,WAAU;cAAb,CAA4C,EAAQ,QAAO,qBAAsB;MAC7E,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;KAAsB,WAAU;eAAhC,CACE,kBAAC,GAAD,EAAA,UAAA;MACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD;QAAO,SAAQ;QAAU,WAAU;kBAChC,EAAO;QACF,CAAA,EACR,kBAAC,GAAD;QACE,SACE,EAAO,UAAU,aACb,cACA,EAAO,UAAU,iBACf,YACA;QAER,WAAU;kBAET,EAAO;QACF,CAAA,CACJ;;MACN,kBAAC,GAAD;OAAW,WAAU;iBAAkB,EAAO;OAAkB,CAAA;MAChE,kBAAC,GAAD,EAAA,UAAA;OACG,EAAO;OAAW;OAAI,EAAO;OAAS;OAAI,EAAO;OAAQ;OAC1C,EAAA,CAAA;MACP,EAAA,CAAA,EACb,kBAAC,GAAD,EAAA,UAAA;MACE,kBAAC,KAAD;OAAG,WAAU;iBAAoC,EAAO;OAAgB,CAAA;MACxE,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAO,OAAO,KAAK,MAClB,kBAAC,GAAD;QAAe,SAAQ;QAAU,WAAU;kBACxC;QACK,EAFI,EAEJ,CACR;OACE,CAAA;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,QAAD;SAAM,WAAU;mBAAhB,CACE,kBAAC,GAAD,EAAM,WAAU,2BAA4B,CAAA,EAC3C,EAAO,OACH;;QACP,kBAAC,QAAD;SAAM,WAAU;mBAAhB;UACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;UAC5B,EAAO;UAAS;UACZ;;QACP,kBAAC,QAAD,EAAA,UAAA,CAAO,KAAK,MAAO,EAAO,YAAY,EAAO,WAAY,IAAI,EAAC,eAAmB,EAAA,CAAA;QAC7E;;MACM,EAAA,CAAA,CACT;OA7CI,EAAO,GA6CX,CACP;IACE,CAAA;GACF"}
1
+ {"version":3,"file":"LearningCoursesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningCoursesPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GradientText,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { BookOpen, Search, Star, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function LearningCoursesPagePage() {\n const { courses } = useCrewFoundryStore();\n const [search, setSearch] = useState('');\n const filtered = courses.filter((c) =>\n `${c.title} ${c.category} ${c.instructor}`.toLowerCase().includes(search.toLowerCase())\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Course Catalog</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{courses.length} courses available</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 courses...\"\n className=\"pl-9\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {filtered.map((course) => (\n <Card key={course.id} className=\"hover:shadow-md transition-shadow cursor-pointer\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {course.category}\n </Badge>\n <Badge\n variant={\n course.level === 'beginner'\n ? 'secondary'\n : course.level === 'intermediate'\n ? 'default'\n : 'destructive'\n }\n className=\"text-[10px]\"\n >\n {course.level}\n </Badge>\n </div>\n <CardTitle className=\"text-base mt-2\">{course.title}</CardTitle>\n <CardDescription>\n {course.instructor} · {course.duration} · {course.modules} modules\n </CardDescription>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary mb-3\">{course.description}</p>\n <div className=\"flex flex-wrap gap-1 mb-3\">\n {course.skills.map((s) => (\n <Badge key={s} variant=\"outline\" className=\"text-[9px]\">\n {s}\n </Badge>\n ))}\n </div>\n <div className=\"flex items-center justify-between text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-status-warning-text\" />\n {course.rating}\n </span>\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {course.enrolled} enrolled\n </span>\n <span>{Math.round((course.completed / course.enrolled) * 100)}% completion</span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAcA,SAAgB,IAA0B;CACxC,IAAM,EAAE,eAAY,GAAqB,EACnC,CAAC,GAAQ,KAAa,EAAS,GAAG,EAClC,IAAW,EAAQ,QAAQ,MAC/B,GAAG,EAAE,MAAM,GAAG,EAAE,SAAS,GAAG,EAAE,aAAa,aAAa,CAAC,SAAS,EAAO,aAAa,CAAC,CACxF;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UAAc,kBAA6B,CAAA;IACxC,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cAAb,CAA4C,EAAQ,QAAO,qBAAsB;MAC7E,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;KAAsB,WAAU;eAAhC,CACE,kBAAC,GAAD,EAAA,UAAA;MACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD;QAAO,SAAQ;QAAU,WAAU;kBAChC,EAAO;QACF,CAAA,EACR,kBAAC,GAAD;QACE,SACE,EAAO,UAAU,aACb,cACA,EAAO,UAAU,iBACf,YACA;QAER,WAAU;kBAET,EAAO;QACF,CAAA,CACJ;;MACN,kBAAC,GAAD;OAAW,WAAU;iBAAkB,EAAO;OAAkB,CAAA;MAChE,kBAAC,GAAD,EAAA,UAAA;OACG,EAAO;OAAW;OAAI,EAAO;OAAS;OAAI,EAAO;OAAQ;OAC1C,EAAA,CAAA;MACP,EAAA,CAAA,EACb,kBAAC,GAAD,EAAA,UAAA;MACE,kBAAC,KAAD;OAAG,WAAU;iBAAoC,EAAO;OAAgB,CAAA;MACxE,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAO,OAAO,KAAK,MAClB,kBAAC,GAAD;QAAe,SAAQ;QAAU,WAAU;kBACxC;QACK,EAFI,EAEJ,CACR;OACE,CAAA;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,QAAD;SAAM,WAAU;mBAAhB,CACE,kBAAC,GAAD,EAAM,WAAU,oCAAqC,CAAA,EACpD,EAAO,OACH;;QACP,kBAAC,QAAD;SAAM,WAAU;mBAAhB;UACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;UAC5B,EAAO;UAAS;UACZ;;QACP,kBAAC,QAAD,EAAA,UAAA,CAAO,KAAK,MAAO,EAAO,YAAY,EAAO,WAAY,IAAI,EAAC,eAAmB,EAAA,CAAA;QAC7E;;MACM,EAAA,CAAA,CACT;OA7CI,EAAO,GA6CX,CACP;IACE,CAAA;GACF"}