@burdenoff/microfe-crewfoundry 2026.624.1 → 2026.625.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/crewfoundry/pages/AdminAdminPagePage.js +100 -76
  2. package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
  3. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +118 -94
  4. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  5. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +105 -81
  6. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
  7. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +134 -110
  8. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  9. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +121 -97
  10. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
  11. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +28 -15
  12. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  13. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +74 -54
  14. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
  15. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +87 -69
  16. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
  17. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +99 -80
  18. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
  19. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +87 -68
  20. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  21. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +31 -15
  22. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
  23. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +81 -61
  24. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
  25. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +71 -51
  26. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  27. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +82 -58
  28. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
  29. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +46 -39
  30. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
  31. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +80 -62
  32. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  33. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +104 -80
  34. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
  35. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +219 -151
  36. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  37. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +183 -142
  38. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
  39. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +121 -97
  40. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
  41. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +57 -46
  42. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
  43. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +91 -67
  44. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
  45. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +112 -93
  46. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  47. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +55 -48
  48. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  49. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +70 -50
  50. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  51. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +140 -97
  52. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/HiringJobsPagePage.js +101 -85
  54. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  55. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +68 -48
  56. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  57. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +99 -71
  58. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +97 -73
  60. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  61. package/dist/crewfoundry/pages/HrPayrollPagePage.js +100 -76
  62. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  63. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +93 -69
  64. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  65. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +65 -45
  66. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
  67. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +93 -75
  68. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +117 -72
  70. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  71. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +66 -54
  72. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
  73. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +36 -20
  74. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  75. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +90 -66
  76. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
  77. package/dist/crewfoundry/pages/LearningLearningPagePage.js +81 -57
  78. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
  79. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +90 -65
  80. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  81. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +33 -17
  82. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  83. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +83 -59
  84. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  85. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +68 -48
  86. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  87. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +80 -60
  88. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
  89. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +153 -118
  90. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
  91. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +42 -37
  92. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
  93. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +67 -47
  94. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  95. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +104 -85
  96. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
  97. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +76 -57
  98. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
  99. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +78 -60
  100. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  101. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +138 -93
  102. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
  103. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +98 -53
  104. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  105. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +69 -49
  106. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
  107. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +84 -65
  108. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  109. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +76 -52
  110. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  111. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +58 -40
  112. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
  113. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +85 -65
  114. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
  115. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +36 -29
  116. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
  117. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +108 -73
  118. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  119. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +43 -27
  120. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  121. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +67 -47
  122. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
  123. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +108 -63
  124. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
  125. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +83 -64
  126. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
  127. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +185 -144
  128. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  129. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +40 -24
  130. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  131. package/package.json +2 -2
@@ -2,16 +2,16 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { useMemo as t, useState as n } from "react";
3
3
  import { BookOpen as r, ChevronRight as i, Code2 as a, Copy as o, ExternalLink as s, Lock as c, Search as l, Server as u, Zap as d } from "lucide-react";
4
4
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
5
- import { Badge as m, Button as h, Card as g, CardContent as _, CardDescription as v, CardHeader as y, CardTitle as b, Input as x } from "@burdenoff/fe-libs/ui";
5
+ import { Badge as m, Button as h, Card as g, CardContent as _, CardDescription as v, CardHeader as y, CardTitle as b, EmphasisPanel as x, GradientText as S, IllustratedEmptyState as C, Input as w, PagePurpose as T } from "@burdenoff/fe-libs/ui";
6
6
  //#region src/crewfoundry/pages/HelpApiDocumentationPagePage.tsx
7
- var S = {
8
- GET: "bg-green-100 text-green-700",
9
- POST: "bg-blue-100 text-blue-700",
10
- PATCH: "bg-yellow-100 text-yellow-700",
11
- DELETE: "bg-red-100 text-red-700"
7
+ var E = {
8
+ GET: "bg-status-success-bg text-status-success-text",
9
+ POST: "bg-status-info-bg text-status-info-text",
10
+ PATCH: "bg-status-warning-bg text-status-warning-text",
11
+ DELETE: "bg-status-error-bg text-status-error-text"
12
12
  };
13
- function C() {
14
- let { employees: C, jobPostings: w, candidates: T, payrollRecords: E, leaveRequests: D } = e(), [O, k] = n(""), [A, j] = n(null), M = t(() => [
13
+ function D() {
14
+ let { employees: D, jobPostings: O, candidates: k, payrollRecords: A, leaveRequests: j } = e(), [M, N] = n(""), [P, F] = n(null), I = t(() => [
15
15
  {
16
16
  name: "Employees",
17
17
  version: "v2",
@@ -19,7 +19,7 @@ function C() {
19
19
  {
20
20
  method: "GET",
21
21
  path: "/api/v2/employees",
22
- description: `List all employees (${C.length} records) with pagination and filters`
22
+ description: `List all employees (${D.length} records) with pagination and filters`
23
23
  },
24
24
  {
25
25
  method: "POST",
@@ -50,7 +50,7 @@ function C() {
50
50
  {
51
51
  method: "GET",
52
52
  path: "/api/v2/jobs",
53
- description: `List all job postings (${w.length} total)`
53
+ description: `List all job postings (${O.length} total)`
54
54
  },
55
55
  {
56
56
  method: "POST",
@@ -60,7 +60,7 @@ function C() {
60
60
  {
61
61
  method: "GET",
62
62
  path: "/api/v2/candidates",
63
- description: `List candidates (${T.length}) with pipeline filters`
63
+ description: `List candidates (${k.length}) with pipeline filters`
64
64
  },
65
65
  {
66
66
  method: "POST",
@@ -76,7 +76,7 @@ function C() {
76
76
  {
77
77
  method: "GET",
78
78
  path: "/api/v1/payroll/records",
79
- description: `List payroll records by period (${E.length} loaded)`
79
+ description: `List payroll records by period (${A.length} loaded)`
80
80
  },
81
81
  {
82
82
  method: "POST",
@@ -97,7 +97,7 @@ function C() {
97
97
  {
98
98
  method: "GET",
99
99
  path: "/api/v2/leave/requests",
100
- description: `List leave requests with status filters (${D.length} total)`
100
+ description: `List leave requests with status filters (${j.length} total)`
101
101
  },
102
102
  {
103
103
  method: "POST",
@@ -112,29 +112,36 @@ function C() {
112
112
  ]
113
113
  }
114
114
  ], [
115
- T.length,
116
- C.length,
117
- w.length,
115
+ k.length,
118
116
  D.length,
119
- E.length
120
- ]), N = (e) => {
121
- j(e), setTimeout(() => j(null), 1500);
122
- }, P = M.map((e) => ({
117
+ O.length,
118
+ j.length,
119
+ A.length
120
+ ]), L = (e) => {
121
+ F(e), setTimeout(() => F(null), 1500);
122
+ }, R = I.map((e) => ({
123
123
  ...e,
124
- endpoints: e.endpoints.filter((e) => e.path.toLowerCase().includes(O.toLowerCase()) || e.description.toLowerCase().includes(O.toLowerCase()))
124
+ endpoints: e.endpoints.filter((e) => e.path.toLowerCase().includes(M.toLowerCase()) || e.description.toLowerCase().includes(M.toLowerCase()))
125
125
  })).filter((e) => e.endpoints.length > 0);
126
126
  return /* @__PURE__ */ p("div", {
127
127
  className: "space-y-6 p-6",
128
128
  children: [
129
129
  /* @__PURE__ */ p("div", {
130
130
  className: "flex items-center justify-between",
131
- children: [/* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("h1", {
132
- className: "text-2xl font-semibold",
133
- children: "API Documentation"
134
- }), /* @__PURE__ */ f("p", {
135
- className: "text-sm text-text-secondary",
136
- children: "CrewFoundry REST API reference for integrations"
137
- })] }), /* @__PURE__ */ p("div", {
131
+ children: [/* @__PURE__ */ p("div", { children: [
132
+ /* @__PURE__ */ f("h1", {
133
+ className: "text-2xl font-semibold",
134
+ children: /* @__PURE__ */ f(S, { children: "API Documentation" })
135
+ }),
136
+ /* @__PURE__ */ f("p", {
137
+ className: "text-sm text-text-secondary",
138
+ children: "CrewFoundry REST API reference for integrations"
139
+ }),
140
+ /* @__PURE__ */ f(T, {
141
+ className: "mt-1",
142
+ children: "Browse the CrewFoundry API reference — use it to find endpoints, understand request formats, and integrate CrewFoundry with your own tools."
143
+ })
144
+ ] }), /* @__PURE__ */ p("div", {
138
145
  className: "flex gap-2",
139
146
  children: [/* @__PURE__ */ f(m, {
140
147
  variant: "secondary",
@@ -153,25 +160,25 @@ function C() {
153
160
  icon: u,
154
161
  label: "REST API",
155
162
  value: "v2.1.0",
156
- color: "text-blue-500"
163
+ color: "text-status-info-text"
157
164
  },
158
165
  {
159
166
  icon: a,
160
167
  label: "GraphQL",
161
168
  value: "Federation v2",
162
- color: "text-purple-500"
169
+ color: "text-action-primary-bg"
163
170
  },
164
171
  {
165
172
  icon: c,
166
173
  label: "Auth",
167
174
  value: "OAuth 2.0 + JWT",
168
- color: "text-green-500"
175
+ color: "text-status-success-text"
169
176
  },
170
177
  {
171
178
  icon: d,
172
179
  label: "Rate Limit",
173
180
  value: "1,000 req/min",
174
- color: "text-yellow-500"
181
+ color: "text-status-warning-text"
175
182
  }
176
183
  ].map((e) => /* @__PURE__ */ f(g, { children: /* @__PURE__ */ p(_, {
177
184
  className: "flex items-center gap-3 pt-6",
@@ -188,10 +195,10 @@ function C() {
188
195
  className: "grid gap-6 lg:grid-cols-4",
189
196
  children: [/* @__PURE__ */ p("div", {
190
197
  className: "space-y-4",
191
- children: [/* @__PURE__ */ p(g, { children: [/* @__PURE__ */ f(y, { children: /* @__PURE__ */ f(b, {
192
- className: "text-sm",
198
+ children: [/* @__PURE__ */ p(x, { children: [/* @__PURE__ */ f("div", {
199
+ className: "mb-2 text-sm font-semibold",
193
200
  children: "Quick Start"
194
- }) }), /* @__PURE__ */ f(_, {
201
+ }), /* @__PURE__ */ f("div", {
195
202
  className: "space-y-2",
196
203
  children: [
197
204
  {
@@ -239,14 +246,14 @@ function C() {
239
246
  children: [
240
247
  /* @__PURE__ */ p("div", {
241
248
  className: "relative max-w-md",
242
- children: [/* @__PURE__ */ f(l, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ f(x, {
249
+ children: [/* @__PURE__ */ f(l, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ f(w, {
243
250
  placeholder: "Search endpoints...",
244
251
  className: "pl-9",
245
- value: O,
246
- onChange: (e) => k(e.target.value)
252
+ value: M,
253
+ onChange: (e) => N(e.target.value)
247
254
  })]
248
255
  }),
249
- P.map((e) => /* @__PURE__ */ p(g, { children: [/* @__PURE__ */ p(y, { children: [/* @__PURE__ */ p("div", {
256
+ R.map((e) => /* @__PURE__ */ p(g, { children: [/* @__PURE__ */ p(y, { children: [/* @__PURE__ */ p("div", {
250
257
  className: "flex items-center gap-2",
251
258
  children: [/* @__PURE__ */ f(b, {
252
259
  className: "text-base",
@@ -262,7 +269,7 @@ function C() {
262
269
  className: `flex items-center gap-3 px-6 py-3 hover:bg-bg-sunken/50 cursor-pointer ${n < e.endpoints.length - 1 ? "border-b" : ""}`,
263
270
  children: [
264
271
  /* @__PURE__ */ f(m, {
265
- className: `${S[t.method]} text-[10px] font-mono border-0 min-w-[50px] justify-center`,
272
+ className: `${E[t.method]} text-[10px] font-mono border-0 min-w-[50px] justify-center`,
266
273
  children: t.method
267
274
  }),
268
275
  /* @__PURE__ */ f("code", {
@@ -277,15 +284,19 @@ function C() {
277
284
  variant: "ghost",
278
285
  size: "sm",
279
286
  className: "h-6 w-6 p-0",
280
- onClick: () => N(t.path),
281
- children: /* @__PURE__ */ f(o, { className: `h-3 w-3 ${A === t.path ? "text-green-500" : "text-text-secondary"}` })
287
+ onClick: () => L(t.path),
288
+ children: /* @__PURE__ */ f(o, { className: `h-3 w-3 ${P === t.path ? "text-status-success-text" : "text-text-secondary"}` })
282
289
  })
283
290
  ]
284
291
  }, t.path + t.method))
285
292
  })] }, e.name)),
286
- P.length === 0 && /* @__PURE__ */ f("div", {
287
- className: "rounded-lg border p-8 text-center text-sm text-text-secondary",
288
- children: "No endpoints match your search criteria."
293
+ R.length === 0 && /* @__PURE__ */ f("div", {
294
+ className: "py-6",
295
+ children: /* @__PURE__ */ f(C, {
296
+ illustration: "empty-search",
297
+ title: "No endpoints match",
298
+ description: "Try a different search term to find the API you need."
299
+ })
289
300
  })
290
301
  ]
291
302
  })]
@@ -294,6 +305,6 @@ function C() {
294
305
  });
295
306
  }
296
307
  //#endregion
297
- export { C as HelpApiDocumentationPagePage };
308
+ export { D as HelpApiDocumentationPagePage };
298
309
 
299
310
  //# sourceMappingURL=HelpApiDocumentationPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HelpApiDocumentationPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/HelpApiDocumentationPagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport {\n BookOpen,\n ChevronRight,\n Code2,\n Copy,\n ExternalLink,\n Lock,\n Search,\n Server,\n Zap,\n} from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nconst methodColors: Record<string, string> = {\n GET: 'bg-green-100 text-green-700',\n POST: 'bg-blue-100 text-blue-700',\n PATCH: 'bg-yellow-100 text-yellow-700',\n DELETE: 'bg-red-100 text-red-700',\n};\n\nexport function HelpApiDocumentationPagePage() {\n const { employees, jobPostings, candidates, payrollRecords, leaveRequests } =\n useCrewFoundryStore();\n const [search, setSearch] = useState('');\n const [copiedPath, setCopiedPath] = useState<string | null>(null);\n\n const apiSections = useMemo(\n () => [\n {\n name: 'Employees',\n version: 'v2',\n endpoints: [\n {\n method: 'GET',\n path: '/api/v2/employees',\n description: `List all employees (${employees.length} records) with pagination and filters`,\n },\n {\n method: 'POST',\n path: '/api/v2/employees',\n description: 'Create a new employee record',\n },\n {\n method: 'GET',\n path: '/api/v2/employees/:id',\n description: 'Get employee details by ID',\n },\n {\n method: 'PATCH',\n path: '/api/v2/employees/:id',\n description: 'Update employee information',\n },\n {\n method: 'DELETE',\n path: '/api/v2/employees/:id',\n description: 'Deactivate an employee record',\n },\n ],\n },\n {\n name: 'Hiring',\n version: 'v2',\n endpoints: [\n {\n method: 'GET',\n path: '/api/v2/jobs',\n description: `List all job postings (${jobPostings.length} total)`,\n },\n { method: 'POST', path: '/api/v2/jobs', description: 'Create a new job posting' },\n {\n method: 'GET',\n path: '/api/v2/candidates',\n description: `List candidates (${candidates.length}) with pipeline filters`,\n },\n {\n method: 'POST',\n path: '/api/v2/candidates',\n description: 'Add a new candidate to the pipeline',\n },\n ],\n },\n {\n name: 'Payroll',\n version: 'v1',\n endpoints: [\n {\n method: 'GET',\n path: '/api/v1/payroll/records',\n description: `List payroll records by period (${payrollRecords.length} loaded)`,\n },\n {\n method: 'POST',\n path: '/api/v1/payroll/run',\n description: 'Trigger payroll processing',\n },\n {\n method: 'GET',\n path: '/api/v1/payroll/reports',\n description: 'Generate payroll reports',\n },\n ],\n },\n {\n name: 'Leave',\n version: 'v2',\n endpoints: [\n {\n method: 'GET',\n path: '/api/v2/leave/requests',\n description: `List leave requests with status filters (${leaveRequests.length} total)`,\n },\n {\n method: 'POST',\n path: '/api/v2/leave/requests',\n description: 'Submit a new leave request',\n },\n {\n method: 'PATCH',\n path: '/api/v2/leave/requests/:id/approve',\n description: 'Approve a leave request',\n },\n ],\n },\n ],\n [\n candidates.length,\n employees.length,\n jobPostings.length,\n leaveRequests.length,\n payrollRecords.length,\n ]\n );\n\n const handleCopy = (path: string) => {\n setCopiedPath(path);\n setTimeout(() => setCopiedPath(null), 1500);\n };\n\n const filteredSections = apiSections\n .map((section) => ({\n ...section,\n endpoints: section.endpoints.filter(\n (ep) =>\n ep.path.toLowerCase().includes(search.toLowerCase()) ||\n ep.description.toLowerCase().includes(search.toLowerCase())\n ),\n }))\n .filter((s) => s.endpoints.length > 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\">API Documentation</h1>\n <p className=\"text-sm text-text-secondary\">\n CrewFoundry REST API reference for integrations\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Badge variant=\"secondary\">Base URL: api.crewfoundry.com</Badge>\n <Button size=\"sm\" variant=\"outline\">\n <ExternalLink className=\"h-3 w-3 mr-1\" />\n OpenAPI Spec\n </Button>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n {[\n { icon: Server, label: 'REST API', value: 'v2.1.0', color: 'text-blue-500' },\n { icon: Code2, label: 'GraphQL', value: 'Federation v2', color: 'text-purple-500' },\n { icon: Lock, label: 'Auth', value: 'OAuth 2.0 + JWT', color: 'text-green-500' },\n { icon: Zap, label: 'Rate Limit', value: '1,000 req/min', color: 'text-yellow-500' },\n ].map((item) => (\n <Card key={item.label}>\n <CardContent className=\"flex items-center gap-3 pt-6\">\n <item.icon className={`h-5 w-5 ${item.color}`} />\n <div>\n <p className=\"text-xs text-text-secondary\">{item.label}</p>\n <p className=\"text-sm font-medium\">{item.value}</p>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-4\">\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Quick Start</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {[\n { icon: BookOpen, label: 'Authentication Guide' },\n { icon: Code2, label: 'SDK Reference' },\n { icon: Zap, label: 'Webhooks' },\n { icon: Server, label: 'Rate Limiting' },\n ].map((link) => (\n <button\n key={link.label}\n className=\"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm hover:bg-bg-sunken transition-colors\"\n >\n <link.icon className=\"h-3 w-3 text-text-secondary\" />\n <span>{link.label}</span>\n <ChevronRight className=\"h-3 w-3 ml-auto text-text-secondary\" />\n </button>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Authentication</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <div className=\"rounded-md bg-bg-sunken p-3\">\n <code className=\"text-xs font-mono\">Authorization: Bearer {'<token>'}</code>\n </div>\n <p className=\"text-xs text-text-secondary\">\n All API requests require a valid JWT token obtained through the OAuth 2.0 flow.\n </p>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"lg:col-span-3 space-y-4\">\n <div className=\"relative max-w-md\">\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 endpoints...\"\n className=\"pl-9\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n\n {filteredSections.map((section) => (\n <Card key={section.name}>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <CardTitle className=\"text-base\">{section.name}</CardTitle>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {section.version}\n </Badge>\n </div>\n <CardDescription>{section.endpoints.length} endpoints</CardDescription>\n </CardHeader>\n <CardContent className=\"p-0\">\n {section.endpoints.map((ep, i) => (\n <div\n key={ep.path + ep.method}\n className={`flex items-center gap-3 px-6 py-3 hover:bg-bg-sunken/50 cursor-pointer ${i < section.endpoints.length - 1 ? 'border-b' : ''}`}\n >\n <Badge\n className={`${methodColors[ep.method]} text-[10px] font-mono border-0 min-w-[50px] justify-center`}\n >\n {ep.method}\n </Badge>\n <code className=\"text-sm font-mono flex-1\">{ep.path}</code>\n <span className=\"text-xs text-text-secondary hidden lg:block max-w-[250px] truncate\">\n {ep.description}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 w-6 p-0\"\n onClick={() => handleCopy(ep.path)}\n >\n <Copy\n className={`h-3 w-3 ${copiedPath === ep.path ? 'text-green-500' : 'text-text-secondary'}`}\n />\n </Button>\n </div>\n ))}\n </CardContent>\n </Card>\n ))}\n\n {filteredSections.length === 0 && (\n <div className=\"rounded-lg border p-8 text-center text-sm text-text-secondary\">\n No endpoints match your search criteria.\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"HelpApiDocumentationPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/HelpApiDocumentationPagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n EmphasisPanel,\n GradientText,\n IllustratedEmptyState,\n Input,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport {\n BookOpen,\n ChevronRight,\n Code2,\n Copy,\n ExternalLink,\n Lock,\n Search,\n Server,\n Zap,\n} from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nconst methodColors: Record<string, string> = {\n GET: 'bg-status-success-bg text-status-success-text',\n POST: 'bg-status-info-bg text-status-info-text',\n PATCH: 'bg-status-warning-bg text-status-warning-text',\n DELETE: 'bg-status-error-bg text-status-error-text',\n};\n\nexport function HelpApiDocumentationPagePage() {\n const { employees, jobPostings, candidates, payrollRecords, leaveRequests } =\n useCrewFoundryStore();\n const [search, setSearch] = useState('');\n const [copiedPath, setCopiedPath] = useState<string | null>(null);\n\n const apiSections = useMemo(\n () => [\n {\n name: 'Employees',\n version: 'v2',\n endpoints: [\n {\n method: 'GET',\n path: '/api/v2/employees',\n description: `List all employees (${employees.length} records) with pagination and filters`,\n },\n {\n method: 'POST',\n path: '/api/v2/employees',\n description: 'Create a new employee record',\n },\n {\n method: 'GET',\n path: '/api/v2/employees/:id',\n description: 'Get employee details by ID',\n },\n {\n method: 'PATCH',\n path: '/api/v2/employees/:id',\n description: 'Update employee information',\n },\n {\n method: 'DELETE',\n path: '/api/v2/employees/:id',\n description: 'Deactivate an employee record',\n },\n ],\n },\n {\n name: 'Hiring',\n version: 'v2',\n endpoints: [\n {\n method: 'GET',\n path: '/api/v2/jobs',\n description: `List all job postings (${jobPostings.length} total)`,\n },\n { method: 'POST', path: '/api/v2/jobs', description: 'Create a new job posting' },\n {\n method: 'GET',\n path: '/api/v2/candidates',\n description: `List candidates (${candidates.length}) with pipeline filters`,\n },\n {\n method: 'POST',\n path: '/api/v2/candidates',\n description: 'Add a new candidate to the pipeline',\n },\n ],\n },\n {\n name: 'Payroll',\n version: 'v1',\n endpoints: [\n {\n method: 'GET',\n path: '/api/v1/payroll/records',\n description: `List payroll records by period (${payrollRecords.length} loaded)`,\n },\n {\n method: 'POST',\n path: '/api/v1/payroll/run',\n description: 'Trigger payroll processing',\n },\n {\n method: 'GET',\n path: '/api/v1/payroll/reports',\n description: 'Generate payroll reports',\n },\n ],\n },\n {\n name: 'Leave',\n version: 'v2',\n endpoints: [\n {\n method: 'GET',\n path: '/api/v2/leave/requests',\n description: `List leave requests with status filters (${leaveRequests.length} total)`,\n },\n {\n method: 'POST',\n path: '/api/v2/leave/requests',\n description: 'Submit a new leave request',\n },\n {\n method: 'PATCH',\n path: '/api/v2/leave/requests/:id/approve',\n description: 'Approve a leave request',\n },\n ],\n },\n ],\n [\n candidates.length,\n employees.length,\n jobPostings.length,\n leaveRequests.length,\n payrollRecords.length,\n ]\n );\n\n const handleCopy = (path: string) => {\n setCopiedPath(path);\n setTimeout(() => setCopiedPath(null), 1500);\n };\n\n const filteredSections = apiSections\n .map((section) => ({\n ...section,\n endpoints: section.endpoints.filter(\n (ep) =>\n ep.path.toLowerCase().includes(search.toLowerCase()) ||\n ep.description.toLowerCase().includes(search.toLowerCase())\n ),\n }))\n .filter((s) => s.endpoints.length > 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\">\n <GradientText>API Documentation</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n CrewFoundry REST API reference for integrations\n </p>\n <PagePurpose className=\"mt-1\">Browse the CrewFoundry API reference — use it to find endpoints, understand request formats, and integrate CrewFoundry with your own tools.</PagePurpose>\n </div>\n <div className=\"flex gap-2\">\n <Badge variant=\"secondary\">Base URL: api.crewfoundry.com</Badge>\n <Button size=\"sm\" variant=\"outline\">\n <ExternalLink className=\"h-3 w-3 mr-1\" />\n OpenAPI Spec\n </Button>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n {[\n { icon: Server, label: 'REST API', value: 'v2.1.0', color: 'text-status-info-text' },\n {\n icon: Code2,\n label: 'GraphQL',\n value: 'Federation v2',\n color: 'text-action-primary-bg',\n },\n {\n icon: Lock,\n label: 'Auth',\n value: 'OAuth 2.0 + JWT',\n color: 'text-status-success-text',\n },\n {\n icon: Zap,\n label: 'Rate Limit',\n value: '1,000 req/min',\n color: 'text-status-warning-text',\n },\n ].map((item) => (\n <Card key={item.label}>\n <CardContent className=\"flex items-center gap-3 pt-6\">\n <item.icon className={`h-5 w-5 ${item.color}`} />\n <div>\n <p className=\"text-xs text-text-secondary\">{item.label}</p>\n <p className=\"text-sm font-medium\">{item.value}</p>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-4\">\n <div className=\"space-y-4\">\n <EmphasisPanel>\n <div className=\"mb-2 text-sm font-semibold\">Quick Start</div>\n <div className=\"space-y-2\">\n {[\n { icon: BookOpen, label: 'Authentication Guide' },\n { icon: Code2, label: 'SDK Reference' },\n { icon: Zap, label: 'Webhooks' },\n { icon: Server, label: 'Rate Limiting' },\n ].map((link) => (\n <button\n key={link.label}\n className=\"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm hover:bg-bg-sunken transition-colors\"\n >\n <link.icon className=\"h-3 w-3 text-text-secondary\" />\n <span>{link.label}</span>\n <ChevronRight className=\"h-3 w-3 ml-auto text-text-secondary\" />\n </button>\n ))}\n </div>\n </EmphasisPanel>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Authentication</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <div className=\"rounded-md bg-bg-sunken p-3\">\n <code className=\"text-xs font-mono\">Authorization: Bearer {'<token>'}</code>\n </div>\n <p className=\"text-xs text-text-secondary\">\n All API requests require a valid JWT token obtained through the OAuth 2.0 flow.\n </p>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"lg:col-span-3 space-y-4\">\n <div className=\"relative max-w-md\">\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 endpoints...\"\n className=\"pl-9\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n\n {filteredSections.map((section) => (\n <Card key={section.name}>\n <CardHeader>\n <div className=\"flex items-center gap-2\">\n <CardTitle className=\"text-base\">{section.name}</CardTitle>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {section.version}\n </Badge>\n </div>\n <CardDescription>{section.endpoints.length} endpoints</CardDescription>\n </CardHeader>\n <CardContent className=\"p-0\">\n {section.endpoints.map((ep, i) => (\n <div\n key={ep.path + ep.method}\n className={`flex items-center gap-3 px-6 py-3 hover:bg-bg-sunken/50 cursor-pointer ${i < section.endpoints.length - 1 ? 'border-b' : ''}`}\n >\n <Badge\n className={`${methodColors[ep.method]} text-[10px] font-mono border-0 min-w-[50px] justify-center`}\n >\n {ep.method}\n </Badge>\n <code className=\"text-sm font-mono flex-1\">{ep.path}</code>\n <span className=\"text-xs text-text-secondary hidden lg:block max-w-[250px] truncate\">\n {ep.description}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 w-6 p-0\"\n onClick={() => handleCopy(ep.path)}\n >\n <Copy\n className={`h-3 w-3 ${copiedPath === ep.path ? 'text-status-success-text' : 'text-text-secondary'}`}\n />\n </Button>\n </div>\n ))}\n </CardContent>\n </Card>\n ))}\n\n {filteredSections.length === 0 && (\n <div className=\"py-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No endpoints match\"\n description=\"Try a different search term to find the API you need.\"\n />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,84 +1,108 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { Clock as t, FileText as n, Star as r, UserCheck 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, Card as l, CardContent as u, CardDescription as d, CardHeader as f, CardTitle as p } from "@burdenoff/fe-libs/ui";
4
+ import { Badge as c, Card as l, CardContent as u, CardDescription as d, CardHeader as f, CardTitle as p, GlassCard as m, GradientText as h, PagePurpose as g } from "@burdenoff/fe-libs/ui";
5
5
  //#region src/crewfoundry/pages/HiringApplicationsPagePage.tsx
6
- function m() {
7
- let { candidates: m, jobPostings: h } = e(), g = m.filter((e) => e.status === "new"), _ = m.filter((e) => e.status === "screening"), v = m.filter((e) => e.status === "interview"), y = h.reduce((e, t) => e + t.applicants, 0);
6
+ function _() {
7
+ let { candidates: _, jobPostings: v } = e(), y = _.filter((e) => e.status === "new"), b = _.filter((e) => e.status === "screening"), x = _.filter((e) => e.status === "interview"), S = v.reduce((e, t) => e + t.applicants, 0);
8
8
  return /* @__PURE__ */ s("div", {
9
9
  className: "space-y-6 p-6",
10
10
  children: [
11
11
  /* @__PURE__ */ o("div", {
12
12
  className: "flex items-center justify-between",
13
- children: /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
14
- className: "text-2xl font-semibold",
15
- children: "Applications"
16
- }), /* @__PURE__ */ s("p", {
17
- className: "text-sm text-text-secondary",
18
- children: [y, " total applications across all positions"]
19
- })] })
13
+ children: /* @__PURE__ */ s("div", { children: [
14
+ /* @__PURE__ */ o("h1", {
15
+ className: "text-2xl font-semibold",
16
+ children: /* @__PURE__ */ o(h, { children: "Applications" })
17
+ }),
18
+ /* @__PURE__ */ s("p", {
19
+ className: "text-sm text-text-secondary",
20
+ children: [S, " total applications across all positions"]
21
+ }),
22
+ /* @__PURE__ */ o(g, {
23
+ className: "mt-1",
24
+ children: "Review and triage incoming job applications — move candidates through your pipeline and decide who to interview next."
25
+ })
26
+ ] })
20
27
  }),
21
28
  /* @__PURE__ */ s("div", {
22
29
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
23
30
  children: [
24
- /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, {
25
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
26
- children: [/* @__PURE__ */ o(p, {
27
- className: "text-sm font-medium",
28
- children: "New"
29
- }), /* @__PURE__ */ o(n, { className: "h-4 w-4 text-blue-500" })]
30
- }), /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o("div", {
31
- className: "text-2xl font-bold",
32
- children: g.length
33
- }), /* @__PURE__ */ o("p", {
34
- className: "text-xs text-text-secondary",
35
- children: "Unreviewed applications"
36
- })] })] }),
37
- /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, {
38
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
39
- children: [/* @__PURE__ */ o(p, {
40
- className: "text-sm font-medium",
41
- children: "Screening"
42
- }), /* @__PURE__ */ o(t, { className: "h-4 w-4 text-yellow-500" })]
43
- }), /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o("div", {
44
- className: "text-2xl font-bold",
45
- children: _.length
46
- }), /* @__PURE__ */ o("p", {
47
- className: "text-xs text-text-secondary",
48
- children: "Under review"
49
- })] })] }),
50
- /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, {
51
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
52
- children: [/* @__PURE__ */ o(p, {
53
- className: "text-sm font-medium",
54
- children: "Interview Stage"
55
- }), /* @__PURE__ */ o(a, { className: "h-4 w-4 text-purple-500" })]
56
- }), /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o("div", {
57
- className: "text-2xl font-bold",
58
- children: v.length
59
- }), /* @__PURE__ */ o("p", {
60
- className: "text-xs text-text-secondary",
61
- children: "Moving forward"
62
- })] })] }),
63
- /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, {
64
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
65
- children: [/* @__PURE__ */ o(p, {
66
- className: "text-sm font-medium",
67
- children: "Conversion Rate"
68
- }), /* @__PURE__ */ o(i, { className: "h-4 w-4 text-green-500" })]
69
- }), /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o("div", {
70
- className: "text-2xl font-bold",
71
- children: "4.8%"
72
- }), /* @__PURE__ */ o("p", {
73
- className: "text-xs text-text-secondary",
74
- children: "Application to hire"
75
- })] })] })
31
+ /* @__PURE__ */ s(m, {
32
+ treatment: "glass",
33
+ glow: !0,
34
+ className: "border-border-seam",
35
+ children: [/* @__PURE__ */ s(f, {
36
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
37
+ children: [/* @__PURE__ */ o(p, {
38
+ className: "text-sm font-medium",
39
+ children: "New"
40
+ }), /* @__PURE__ */ o(n, { className: "h-4 w-4 text-status-info-text" })]
41
+ }), /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o("div", {
42
+ className: "text-2xl font-bold tabular-nums",
43
+ children: y.length
44
+ }), /* @__PURE__ */ o("p", {
45
+ className: "text-xs text-text-secondary",
46
+ children: "Unreviewed applications"
47
+ })] })]
48
+ }),
49
+ /* @__PURE__ */ s(m, {
50
+ treatment: "metric",
51
+ className: "border-border-seam",
52
+ children: [/* @__PURE__ */ s(f, {
53
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
54
+ children: [/* @__PURE__ */ o(p, {
55
+ className: "text-sm font-medium",
56
+ children: "Screening"
57
+ }), /* @__PURE__ */ o(t, { className: "h-4 w-4 text-status-warning-text" })]
58
+ }), /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o("div", {
59
+ className: "text-2xl font-bold tabular-nums",
60
+ children: b.length
61
+ }), /* @__PURE__ */ o("p", {
62
+ className: "text-xs text-text-secondary",
63
+ children: "Under review"
64
+ })] })]
65
+ }),
66
+ /* @__PURE__ */ s(m, {
67
+ treatment: "metric",
68
+ className: "border-border-seam",
69
+ children: [/* @__PURE__ */ s(f, {
70
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
71
+ children: [/* @__PURE__ */ o(p, {
72
+ className: "text-sm font-medium",
73
+ children: "Interview Stage"
74
+ }), /* @__PURE__ */ o(a, { className: "h-4 w-4 text-action-primary-bg" })]
75
+ }), /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o("div", {
76
+ className: "text-2xl font-bold tabular-nums",
77
+ children: x.length
78
+ }), /* @__PURE__ */ o("p", {
79
+ className: "text-xs text-text-secondary",
80
+ children: "Moving forward"
81
+ })] })]
82
+ }),
83
+ /* @__PURE__ */ s(m, {
84
+ treatment: "metric",
85
+ className: "border-border-seam",
86
+ children: [/* @__PURE__ */ s(f, {
87
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
88
+ children: [/* @__PURE__ */ o(p, {
89
+ className: "text-sm font-medium",
90
+ children: "Conversion Rate"
91
+ }), /* @__PURE__ */ o(i, { className: "h-4 w-4 text-status-success-text" })]
92
+ }), /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o("div", {
93
+ className: "text-2xl font-bold tabular-nums",
94
+ children: "4.8%"
95
+ }), /* @__PURE__ */ o("p", {
96
+ className: "text-xs text-text-secondary",
97
+ children: "Application to hire"
98
+ })] })]
99
+ })
76
100
  ]
77
101
  }),
78
102
  /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, { children: [/* @__PURE__ */ o(p, { children: "Applications by Position" }), /* @__PURE__ */ o(d, { children: "Applicant count per open role" })] }), /* @__PURE__ */ o(u, {
79
103
  className: "space-y-3",
80
- children: h.sort((e, t) => t.applicants - e.applicants).map((e) => {
81
- let t = Math.max(...h.map((e) => e.applicants));
104
+ children: v.sort((e, t) => t.applicants - e.applicants).map((e) => {
105
+ let t = Math.max(...v.map((e) => e.applicants));
82
106
  return /* @__PURE__ */ s("div", {
83
107
  className: "flex items-center gap-3",
84
108
  children: [
@@ -126,7 +150,7 @@ function m() {
126
150
  children: "Status"
127
151
  })
128
152
  ]
129
- }), m.map((e) => /* @__PURE__ */ s("div", {
153
+ }), _.map((e) => /* @__PURE__ */ s("div", {
130
154
  className: "grid grid-cols-7 gap-2 py-2 border-b last:border-0 text-sm",
131
155
  children: [
132
156
  /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ s("p", {
@@ -154,7 +178,7 @@ function m() {
154
178
  }),
155
179
  /* @__PURE__ */ s("div", {
156
180
  className: "flex items-center justify-center gap-1",
157
- children: [/* @__PURE__ */ o(r, { className: "h-3 w-3 text-yellow-500" }), e.rating]
181
+ children: [/* @__PURE__ */ o(r, { className: "h-3 w-3 text-status-warning-text" }), e.rating]
158
182
  }),
159
183
  /* @__PURE__ */ o("div", {
160
184
  className: "flex flex-wrap gap-1",
@@ -178,6 +202,6 @@ function m() {
178
202
  });
179
203
  }
180
204
  //#endregion
181
- export { m as HiringApplicationsPagePage };
205
+ export { _ as HiringApplicationsPagePage };
182
206
 
183
207
  //# sourceMappingURL=HiringApplicationsPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HiringApplicationsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/HiringApplicationsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { Clock, FileText, Star, UserCheck, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function HiringApplicationsPagePage() {\n const { candidates, jobPostings } = useCrewFoundryStore();\n\n const newApps = candidates.filter((c) => c.status === 'new');\n const screeningApps = candidates.filter((c) => c.status === 'screening');\n const interviewApps = candidates.filter((c) => c.status === 'interview');\n const totalApps = jobPostings.reduce((s, j) => s + j.applicants, 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\">Applications</h1>\n <p className=\"text-sm text-text-secondary\">\n {totalApps} total applications across all positions\n </p>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">New</CardTitle>\n <FileText className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{newApps.length}</div>\n <p className=\"text-xs text-text-secondary\">Unreviewed applications</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\">Screening</CardTitle>\n <Clock className=\"h-4 w-4 text-yellow-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{screeningApps.length}</div>\n <p className=\"text-xs text-text-secondary\">Under review</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\">Interview Stage</CardTitle>\n <Users className=\"h-4 w-4 text-purple-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{interviewApps.length}</div>\n <p className=\"text-xs text-text-secondary\">Moving forward</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\">Conversion Rate</CardTitle>\n <UserCheck className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">4.8%</div>\n <p className=\"text-xs text-text-secondary\">Application to hire</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Applications by Position</CardTitle>\n <CardDescription>Applicant count per open role</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {jobPostings\n .sort((a, b) => b.applicants - a.applicants)\n .map((job) => {\n const maxApplicants = Math.max(...jobPostings.map((j) => j.applicants));\n return (\n <div key={job.id} className=\"flex items-center gap-3\">\n <span className=\"w-56 text-sm font-medium truncate\">{job.title}</span>\n <div className=\"flex-1 h-4 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-4 bg-action-primary-bg rounded\"\n style={{ width: `${Math.round((job.applicants / maxApplicants) * 100)}%` }}\n />\n </div>\n <span className=\"text-sm font-medium w-10 text-right\">{job.applicants}</span>\n <Badge\n variant={job.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {job.status}\n </Badge>\n </div>\n );\n })}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>All Candidates</CardTitle>\n <CardDescription>Complete candidate pipeline</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-7 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2\">\n <span>Candidate</span>\n <span>Position</span>\n <span>Company</span>\n <span className=\"text-right\">Experience</span>\n <span className=\"text-center\">Rating</span>\n <span>Skills</span>\n <span className=\"text-center\">Status</span>\n </div>\n {candidates.map((c) => (\n <div key={c.id} className=\"grid grid-cols-7 gap-2 py-2 border-b last:border-0 text-sm\">\n <div>\n <p className=\"font-medium\">\n {c.firstName} {c.lastName}\n </p>\n <p className=\"text-xs text-text-secondary\">{c.email}</p>\n </div>\n <span className=\"text-text-secondary truncate\">{c.position}</span>\n <span className=\"text-text-secondary\">{c.currentCompany}</span>\n <span className=\"text-right\">{c.experience} yrs</span>\n <div className=\"flex items-center justify-center gap-1\">\n <Star className=\"h-3 w-3 text-yellow-500\" />\n {c.rating}\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {c.skills.slice(0, 2).map((s) => (\n <Badge key={s} variant=\"outline\" className=\"text-[9px]\">\n {s}\n </Badge>\n ))}\n </div>\n <div className=\"text-center\">\n <Badge\n variant={\n c.status === 'hired'\n ? 'default'\n : c.status === 'offer'\n ? 'default'\n : c.status === 'rejected'\n ? 'destructive'\n : 'secondary'\n }\n className=\"text-[10px]\"\n >\n {c.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;AAWA,SAAgB,IAA6B;CAC3C,IAAM,EAAE,eAAY,mBAAgB,GAAqB,EAEnD,IAAU,EAAW,QAAQ,MAAM,EAAE,WAAW,MAAM,EACtD,IAAgB,EAAW,QAAQ,MAAM,EAAE,WAAW,YAAY,EAClE,IAAgB,EAAW,QAAQ,MAAM,EAAE,WAAW,YAAY,EAClE,IAAY,EAAY,QAAQ,GAAG,MAAM,IAAI,EAAE,YAAY,EAAE;AAEnE,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAyB;KAAiB,CAAA,EACxD,kBAAC,KAAD;KAAG,WAAU;eAAb,CACG,GAAU,2CACT;OACA,EAAA,CAAA;IACF,CAAA;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBAAtB,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAsB;OAAe,CAAA,EAC1D,kBAAC,GAAD,EAAU,WAAU,yBAA0B,CAAA,CACnC;SACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAsB,EAAQ;MAAa,CAAA,EAC1D,kBAAC,KAAD;MAAG,WAAU;gBAA8B;MAA2B,CAAA,CAC1D,EAAA,CAAA,CACT,EAAA,CAAA;KACP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBAAtB,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAsB;OAAqB,CAAA,EAChE,kBAAC,GAAD,EAAO,WAAU,2BAA4B,CAAA,CAClC;SACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAsB,EAAc;MAAa,CAAA,EAChE,kBAAC,KAAD;MAAG,WAAU;gBAA8B;MAAgB,CAAA,CAC/C,EAAA,CAAA,CACT,EAAA,CAAA;KACP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBAAtB,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAsB;OAA2B,CAAA,EACtE,kBAAC,GAAD,EAAO,WAAU,2BAA4B,CAAA,CAClC;SACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAsB,EAAc;MAAa,CAAA,EAChE,kBAAC,KAAD;MAAG,WAAU;gBAA8B;MAAkB,CAAA,CACjD,EAAA,CAAA,CACT,EAAA,CAAA;KACP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAY,WAAU;gBAAtB,CACE,kBAAC,GAAD;OAAW,WAAU;iBAAsB;OAA2B,CAAA,EACtE,kBAAC,GAAD,EAAW,WAAU,0BAA2B,CAAA,CACrC;SACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAqB;MAAU,CAAA,EAC9C,kBAAC,KAAD;MAAG,WAAU;gBAA8B;MAAuB,CAAA,CACtD,EAAA,CAAA,CACT,EAAA,CAAA;KACH;;GAEN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAW,4BAAoC,CAAA,EAC/C,kBAAC,GAAD,EAAA,UAAiB,iCAA+C,CAAA,CACrD,EAAA,CAAA,EACb,kBAAC,GAAD;IAAa,WAAU;cACpB,EACE,MAAM,GAAG,MAAM,EAAE,aAAa,EAAE,WAAW,CAC3C,KAAK,MAAQ;KACZ,IAAM,IAAgB,KAAK,IAAI,GAAG,EAAY,KAAK,MAAM,EAAE,WAAW,CAAC;AACvE,YACE,kBAAC,OAAD;MAAkB,WAAU;gBAA5B;OACE,kBAAC,QAAD;QAAM,WAAU;kBAAqC,EAAI;QAAa,CAAA;OACtE,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,OAAD;SACE,WAAU;SACV,OAAO,EAAE,OAAO,GAAG,KAAK,MAAO,EAAI,aAAa,IAAiB,IAAI,CAAC,IAAI;SAC1E,CAAA;QACE,CAAA;OACN,kBAAC,QAAD;QAAM,WAAU;kBAAuC,EAAI;QAAkB,CAAA;OAC7E,kBAAC,GAAD;QACE,SAAS,EAAI,WAAW,WAAW,YAAY;QAC/C,WAAU;kBAET,EAAI;QACC,CAAA;OACJ;QAfI,EAAI,GAeR;MAER;IACQ,CAAA,CACT,EAAA,CAAA;GAEP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAW,kBAA0B,CAAA,EACrC,kBAAC,GAAD,EAAA,UAAiB,+BAA6C,CAAA,CACnD,EAAA,CAAA,EACb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,QAAD,EAAA,UAAM,aAAgB,CAAA;KACtB,kBAAC,QAAD,EAAA,UAAM,YAAe,CAAA;KACrB,kBAAC,QAAD,EAAA,UAAM,WAAc,CAAA;KACpB,kBAAC,QAAD;MAAM,WAAU;gBAAa;MAAiB,CAAA;KAC9C,kBAAC,QAAD;MAAM,WAAU;gBAAc;MAAa,CAAA;KAC3C,kBAAC,QAAD,EAAA,UAAM,UAAa,CAAA;KACnB,kBAAC,QAAD;MAAM,WAAU;gBAAc;MAAa,CAAA;KACvC;OACL,EAAW,KAAK,MACf,kBAAC,OAAD;IAAgB,WAAU;cAA1B;KACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAb;OACG,EAAE;OAAU;OAAE,EAAE;OACf;SACJ,kBAAC,KAAD;MAAG,WAAU;gBAA+B,EAAE;MAAU,CAAA,CACpD,EAAA,CAAA;KACN,kBAAC,QAAD;MAAM,WAAU;gBAAgC,EAAE;MAAgB,CAAA;KAClE,kBAAC,QAAD;MAAM,WAAU;gBAAuB,EAAE;MAAsB,CAAA;KAC/D,kBAAC,QAAD;MAAM,WAAU;gBAAhB,CAA8B,EAAE,YAAW,OAAW;;KACtD,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,2BAA4B,CAAA,EAC3C,EAAE,OACC;;KACN,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAE,OAAO,MAAM,GAAG,EAAE,CAAC,KAAK,MACzB,kBAAC,GAAD;OAAe,SAAQ;OAAU,WAAU;iBACxC;OACK,EAFI,EAEJ,CACR;MACE,CAAA;KACN,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD;OACE,SACE,EAAE,WAAW,WAET,EAAE,WAAW,UADb,YAGE,EAAE,WAAW,aACX,gBACA;OAEV,WAAU;iBAET,EAAE;OACG,CAAA;MACJ,CAAA;KACF;MArCI,EAAE,GAqCN,CACN,CACU,EAAA,CAAA,CACT,EAAA,CAAA;GACH"}
1
+ {"version":3,"file":"HiringApplicationsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/HiringApplicationsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { Clock, FileText, Star, UserCheck, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function HiringApplicationsPagePage() {\n const { candidates, jobPostings } = useCrewFoundryStore();\n\n const newApps = candidates.filter((c) => c.status === 'new');\n const screeningApps = candidates.filter((c) => c.status === 'screening');\n const interviewApps = candidates.filter((c) => c.status === 'interview');\n const totalApps = jobPostings.reduce((s, j) => s + j.applicants, 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\">\n <GradientText>Applications</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n {totalApps} total applications across all positions\n </p>\n <PagePurpose className=\"mt-1\">Review and triage incoming job applications — move candidates through your pipeline and decide who to interview next.</PagePurpose>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">New</CardTitle>\n <FileText className=\"h-4 w-4 text-status-info-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{newApps.length}</div>\n <p className=\"text-xs text-text-secondary\">Unreviewed applications</p>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Screening</CardTitle>\n <Clock className=\"h-4 w-4 text-status-warning-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{screeningApps.length}</div>\n <p className=\"text-xs text-text-secondary\">Under review</p>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Interview Stage</CardTitle>\n <Users className=\"h-4 w-4 text-action-primary-bg\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{interviewApps.length}</div>\n <p className=\"text-xs text-text-secondary\">Moving forward</p>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Conversion Rate</CardTitle>\n <UserCheck className=\"h-4 w-4 text-status-success-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">4.8%</div>\n <p className=\"text-xs text-text-secondary\">Application to hire</p>\n </CardContent>\n </GlassCard>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Applications by Position</CardTitle>\n <CardDescription>Applicant count per open role</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {jobPostings\n .sort((a, b) => b.applicants - a.applicants)\n .map((job) => {\n const maxApplicants = Math.max(...jobPostings.map((j) => j.applicants));\n return (\n <div key={job.id} className=\"flex items-center gap-3\">\n <span className=\"w-56 text-sm font-medium truncate\">{job.title}</span>\n <div className=\"flex-1 h-4 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-4 bg-action-primary-bg rounded\"\n style={{ width: `${Math.round((job.applicants / maxApplicants) * 100)}%` }}\n />\n </div>\n <span className=\"text-sm font-medium w-10 text-right\">{job.applicants}</span>\n <Badge\n variant={job.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {job.status}\n </Badge>\n </div>\n );\n })}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>All Candidates</CardTitle>\n <CardDescription>Complete candidate pipeline</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-7 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2\">\n <span>Candidate</span>\n <span>Position</span>\n <span>Company</span>\n <span className=\"text-right\">Experience</span>\n <span className=\"text-center\">Rating</span>\n <span>Skills</span>\n <span className=\"text-center\">Status</span>\n </div>\n {candidates.map((c) => (\n <div key={c.id} className=\"grid grid-cols-7 gap-2 py-2 border-b last:border-0 text-sm\">\n <div>\n <p className=\"font-medium\">\n {c.firstName} {c.lastName}\n </p>\n <p className=\"text-xs text-text-secondary\">{c.email}</p>\n </div>\n <span className=\"text-text-secondary truncate\">{c.position}</span>\n <span className=\"text-text-secondary\">{c.currentCompany}</span>\n <span className=\"text-right\">{c.experience} yrs</span>\n <div className=\"flex items-center justify-center gap-1\">\n <Star className=\"h-3 w-3 text-status-warning-text\" />\n {c.rating}\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {c.skills.slice(0, 2).map((s) => (\n <Badge key={s} variant=\"outline\" className=\"text-[9px]\">\n {s}\n </Badge>\n ))}\n </div>\n <div className=\"text-center\">\n <Badge\n variant={\n c.status === 'hired'\n ? 'default'\n : c.status === 'offer'\n ? 'default'\n : c.status === 'rejected'\n ? 'destructive'\n : 'secondary'\n }\n className=\"text-[10px]\"\n >\n {c.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}