@burdenoff/microfe-crewfoundry 2026.626.1 → 2026.703.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/crewfoundry/components/forms/ConfirmDialog.js +43 -0
- package/dist/crewfoundry/components/forms/ConfirmDialog.js.map +1 -0
- package/dist/crewfoundry/components/forms/FormModal.js +220 -0
- package/dist/crewfoundry/components/forms/FormModal.js.map +1 -0
- package/dist/crewfoundry/components/forms/formValues.js +20 -0
- package/dist/crewfoundry/components/forms/formValues.js.map +1 -0
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +255 -65
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +28 -17
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +57 -53
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +32 -23
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +44 -29
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +183 -57
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +214 -92
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +165 -131
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +163 -133
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +269 -54
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +225 -78
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +213 -59
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +287 -90
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +49 -47
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +166 -59
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +274 -83
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +198 -88
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +216 -88
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +216 -66
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +6 -7
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +83 -68
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +167 -46
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +75 -55
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +152 -79
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +75 -63
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +3 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +235 -87
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +199 -86
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +21 -40
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +117 -45
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +249 -90
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +47 -45
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +262 -133
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +144 -77
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/store/crewfoundryStore.js +306 -51
- package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,142 +1,249 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { FormModal as t } from "../components/forms/FormModal.js";
|
|
3
|
+
import { getText as n, newClientId as r } from "../components/forms/formValues.js";
|
|
4
|
+
import { useMemo as i, useState as a } from "react";
|
|
5
|
+
import { Calendar as o, Clock as s, Plus as c, Star as l, Video as u } from "lucide-react";
|
|
6
|
+
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
7
|
+
import { Badge as p, Button as m, Card as h, CardContent as g, CardDescription as _, CardHeader as v, CardTitle as y, GlassCard as b, GradientText as x, PagePurpose as S } from "@burdenoff/fe-libs/ui";
|
|
8
|
+
import { useGlobalUi as C } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
5
9
|
//#region src/crewfoundry/pages/HiringInterviewsPagePage.tsx
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
var w = [
|
|
11
|
+
{
|
|
12
|
+
label: "Phone",
|
|
13
|
+
value: "phone"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
label: "Video",
|
|
17
|
+
value: "video"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
label: "Onsite",
|
|
21
|
+
value: "onsite"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
label: "Panel",
|
|
25
|
+
value: "panel"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
label: "Technical",
|
|
29
|
+
value: "technical"
|
|
30
|
+
}
|
|
31
|
+
], T = [
|
|
32
|
+
{
|
|
33
|
+
name: "status",
|
|
34
|
+
label: "Status",
|
|
35
|
+
type: "select",
|
|
36
|
+
options: [
|
|
37
|
+
{
|
|
38
|
+
label: "Scheduled",
|
|
39
|
+
value: "scheduled"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
label: "Completed",
|
|
43
|
+
value: "completed"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
label: "Cancelled",
|
|
47
|
+
value: "cancelled"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
label: "No show",
|
|
51
|
+
value: "no_show"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
required: !0
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "rating",
|
|
58
|
+
label: "Rating (out of 5)",
|
|
59
|
+
type: "number"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "feedback",
|
|
63
|
+
label: "Feedback",
|
|
64
|
+
type: "textarea",
|
|
65
|
+
colSpan: 2
|
|
66
|
+
}
|
|
67
|
+
];
|
|
68
|
+
function E() {
|
|
69
|
+
let { showToast: E } = C(), { interviews: D, candidates: O, addInterview: k, updateInterview: A } = e(), [j, M] = a(!1), [N, P] = a(null), F = D.filter((e) => e.status === "scheduled"), I = D.filter((e) => e.status === "completed"), L = i(() => [
|
|
70
|
+
{
|
|
71
|
+
name: "candidateId",
|
|
72
|
+
label: "Candidate",
|
|
73
|
+
type: "select",
|
|
74
|
+
required: !0,
|
|
75
|
+
placeholder: O.length ? "Select a candidate…" : "No candidates available",
|
|
76
|
+
options: O.map((e) => ({
|
|
77
|
+
label: `${e.firstName} ${e.lastName} — ${e.position}`,
|
|
78
|
+
value: e.id
|
|
79
|
+
}))
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: "interviewerName",
|
|
83
|
+
label: "Interviewer",
|
|
84
|
+
type: "text",
|
|
85
|
+
required: !0
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: "date",
|
|
89
|
+
label: "Date",
|
|
90
|
+
type: "date",
|
|
91
|
+
required: !0
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: "time",
|
|
95
|
+
label: "Time",
|
|
96
|
+
type: "text",
|
|
97
|
+
required: !0,
|
|
98
|
+
placeholder: "e.g. 10:30 AM"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: "type",
|
|
102
|
+
label: "Type",
|
|
103
|
+
type: "select",
|
|
104
|
+
required: !0,
|
|
105
|
+
options: w
|
|
106
|
+
}
|
|
107
|
+
], [O]);
|
|
108
|
+
return /* @__PURE__ */ f("div", {
|
|
9
109
|
className: "space-y-6 p-6",
|
|
10
110
|
children: [
|
|
11
|
-
/* @__PURE__ */
|
|
111
|
+
/* @__PURE__ */ f("div", {
|
|
12
112
|
className: "flex items-center justify-between",
|
|
13
|
-
children: [/* @__PURE__ */
|
|
14
|
-
/* @__PURE__ */
|
|
113
|
+
children: [/* @__PURE__ */ f("div", { children: [
|
|
114
|
+
/* @__PURE__ */ d("h1", {
|
|
15
115
|
className: "text-2xl font-semibold",
|
|
16
|
-
children: /* @__PURE__ */
|
|
116
|
+
children: /* @__PURE__ */ d(x, { children: "Interviews" })
|
|
17
117
|
}),
|
|
18
|
-
/* @__PURE__ */
|
|
118
|
+
/* @__PURE__ */ f("p", {
|
|
19
119
|
className: "text-sm text-text-secondary",
|
|
20
120
|
children: [
|
|
21
|
-
|
|
121
|
+
F.length,
|
|
22
122
|
" upcoming · ",
|
|
23
|
-
|
|
123
|
+
I.length,
|
|
24
124
|
" completed"
|
|
25
125
|
]
|
|
26
126
|
}),
|
|
27
|
-
/* @__PURE__ */
|
|
127
|
+
/* @__PURE__ */ d(S, {
|
|
28
128
|
className: "mt-1",
|
|
29
129
|
children: "Schedule and track interviews across your hiring pipeline — keep everyone aligned on who's meeting which candidate and when."
|
|
30
130
|
})
|
|
31
|
-
] }), /* @__PURE__ */
|
|
131
|
+
] }), /* @__PURE__ */ f(m, {
|
|
32
132
|
size: "sm",
|
|
33
|
-
|
|
133
|
+
onClick: () => M(!0),
|
|
134
|
+
children: [/* @__PURE__ */ d(c, { className: "h-4 w-4 mr-1" }), "Schedule Interview"]
|
|
34
135
|
})]
|
|
35
136
|
}),
|
|
36
|
-
/* @__PURE__ */
|
|
137
|
+
/* @__PURE__ */ f("div", {
|
|
37
138
|
className: "grid gap-4 md:grid-cols-3",
|
|
38
139
|
children: [
|
|
39
|
-
/* @__PURE__ */
|
|
140
|
+
/* @__PURE__ */ f(b, {
|
|
40
141
|
treatment: "glass",
|
|
41
142
|
glow: !0,
|
|
42
143
|
className: "border-border-seam",
|
|
43
|
-
children: [/* @__PURE__ */
|
|
144
|
+
children: [/* @__PURE__ */ f(v, {
|
|
44
145
|
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
45
|
-
children: [/* @__PURE__ */
|
|
146
|
+
children: [/* @__PURE__ */ d(y, {
|
|
46
147
|
className: "text-sm font-medium",
|
|
47
148
|
children: "Scheduled"
|
|
48
|
-
}), /* @__PURE__ */ o
|
|
49
|
-
}), /* @__PURE__ */
|
|
149
|
+
}), /* @__PURE__ */ d(o, { className: "h-4 w-4 text-status-info-text" })]
|
|
150
|
+
}), /* @__PURE__ */ d(g, { children: /* @__PURE__ */ d("div", {
|
|
50
151
|
className: "text-2xl font-bold tabular-nums",
|
|
51
|
-
children:
|
|
152
|
+
children: F.length
|
|
52
153
|
}) })]
|
|
53
154
|
}),
|
|
54
|
-
/* @__PURE__ */
|
|
155
|
+
/* @__PURE__ */ f(b, {
|
|
55
156
|
treatment: "metric",
|
|
56
157
|
className: "border-border-seam",
|
|
57
|
-
children: [/* @__PURE__ */
|
|
158
|
+
children: [/* @__PURE__ */ f(v, {
|
|
58
159
|
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
59
|
-
children: [/* @__PURE__ */
|
|
160
|
+
children: [/* @__PURE__ */ d(y, {
|
|
60
161
|
className: "text-sm font-medium",
|
|
61
162
|
children: "Completed"
|
|
62
|
-
}), /* @__PURE__ */
|
|
63
|
-
}), /* @__PURE__ */
|
|
163
|
+
}), /* @__PURE__ */ d(s, { className: "h-4 w-4 text-status-success-text" })]
|
|
164
|
+
}), /* @__PURE__ */ d(g, { children: /* @__PURE__ */ d("div", {
|
|
64
165
|
className: "text-2xl font-bold tabular-nums",
|
|
65
|
-
children:
|
|
166
|
+
children: I.length
|
|
66
167
|
}) })]
|
|
67
168
|
}),
|
|
68
|
-
/* @__PURE__ */
|
|
169
|
+
/* @__PURE__ */ f(b, {
|
|
69
170
|
treatment: "metric",
|
|
70
171
|
className: "border-border-seam",
|
|
71
|
-
children: [/* @__PURE__ */
|
|
172
|
+
children: [/* @__PURE__ */ f(v, {
|
|
72
173
|
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
73
|
-
children: [/* @__PURE__ */
|
|
174
|
+
children: [/* @__PURE__ */ d(y, {
|
|
74
175
|
className: "text-sm font-medium",
|
|
75
176
|
children: "This Week"
|
|
76
|
-
}), /* @__PURE__ */
|
|
77
|
-
}), /* @__PURE__ */
|
|
177
|
+
}), /* @__PURE__ */ d(u, { className: "h-4 w-4 text-text-secondary" })]
|
|
178
|
+
}), /* @__PURE__ */ d(g, { children: /* @__PURE__ */ d("div", {
|
|
78
179
|
className: "text-2xl font-bold tabular-nums",
|
|
79
|
-
children:
|
|
180
|
+
children: F.length
|
|
80
181
|
}) })]
|
|
81
182
|
})
|
|
82
183
|
]
|
|
83
184
|
}),
|
|
84
|
-
/* @__PURE__ */
|
|
185
|
+
/* @__PURE__ */ f(h, { children: [/* @__PURE__ */ f(v, { children: [/* @__PURE__ */ d(y, { children: "Upcoming Interviews" }), /* @__PURE__ */ d(_, { children: "Scheduled interviews for the coming days" })] }), /* @__PURE__ */ d(g, {
|
|
85
186
|
className: "space-y-3",
|
|
86
|
-
children:
|
|
187
|
+
children: F.map((e) => /* @__PURE__ */ f("div", {
|
|
87
188
|
className: "flex items-center justify-between rounded border p-4",
|
|
88
|
-
children: [/* @__PURE__ */
|
|
89
|
-
/* @__PURE__ */
|
|
189
|
+
children: [/* @__PURE__ */ f("div", { children: [
|
|
190
|
+
/* @__PURE__ */ d("p", {
|
|
90
191
|
className: "text-sm font-medium",
|
|
91
192
|
children: e.candidateName
|
|
92
193
|
}),
|
|
93
|
-
/* @__PURE__ */
|
|
194
|
+
/* @__PURE__ */ d("p", {
|
|
94
195
|
className: "text-xs text-text-secondary",
|
|
95
196
|
children: e.position
|
|
96
197
|
}),
|
|
97
|
-
/* @__PURE__ */
|
|
198
|
+
/* @__PURE__ */ f("p", {
|
|
98
199
|
className: "text-xs text-text-secondary mt-1",
|
|
99
200
|
children: ["Interviewer: ", e.interviewerName]
|
|
100
201
|
})
|
|
101
|
-
] }), /* @__PURE__ */
|
|
202
|
+
] }), /* @__PURE__ */ f("div", {
|
|
102
203
|
className: "flex items-center gap-3",
|
|
103
204
|
children: [
|
|
104
|
-
/* @__PURE__ */
|
|
205
|
+
/* @__PURE__ */ f("div", {
|
|
105
206
|
className: "text-right",
|
|
106
|
-
children: [/* @__PURE__ */
|
|
207
|
+
children: [/* @__PURE__ */ d("p", {
|
|
107
208
|
className: "text-sm font-medium",
|
|
108
209
|
children: e.date
|
|
109
|
-
}), /* @__PURE__ */
|
|
210
|
+
}), /* @__PURE__ */ d("p", {
|
|
110
211
|
className: "text-xs text-text-secondary",
|
|
111
212
|
children: e.time
|
|
112
213
|
})]
|
|
113
214
|
}),
|
|
114
|
-
/* @__PURE__ */
|
|
215
|
+
/* @__PURE__ */ d(p, {
|
|
115
216
|
variant: "outline",
|
|
116
217
|
children: e.type
|
|
117
218
|
}),
|
|
118
|
-
/* @__PURE__ */
|
|
219
|
+
/* @__PURE__ */ d(p, {
|
|
119
220
|
variant: "secondary",
|
|
120
221
|
children: e.status
|
|
222
|
+
}),
|
|
223
|
+
/* @__PURE__ */ d(m, {
|
|
224
|
+
variant: "outline",
|
|
225
|
+
size: "sm",
|
|
226
|
+
onClick: () => P(e),
|
|
227
|
+
children: "Record outcome"
|
|
121
228
|
})
|
|
122
229
|
]
|
|
123
230
|
})]
|
|
124
231
|
}, e.id))
|
|
125
232
|
})] }),
|
|
126
|
-
|
|
233
|
+
I.length > 0 && /* @__PURE__ */ f(h, { children: [/* @__PURE__ */ f(v, { children: [/* @__PURE__ */ d(y, { children: "Completed Interviews" }), /* @__PURE__ */ d(_, { children: "Recent interview feedback" })] }), /* @__PURE__ */ d(g, {
|
|
127
234
|
className: "space-y-3",
|
|
128
|
-
children:
|
|
235
|
+
children: I.map((e) => /* @__PURE__ */ f("div", {
|
|
129
236
|
className: "flex items-center justify-between rounded border p-4",
|
|
130
|
-
children: [/* @__PURE__ */
|
|
131
|
-
/* @__PURE__ */
|
|
237
|
+
children: [/* @__PURE__ */ f("div", { children: [
|
|
238
|
+
/* @__PURE__ */ d("p", {
|
|
132
239
|
className: "text-sm font-medium",
|
|
133
240
|
children: e.candidateName
|
|
134
241
|
}),
|
|
135
|
-
/* @__PURE__ */
|
|
242
|
+
/* @__PURE__ */ d("p", {
|
|
136
243
|
className: "text-xs text-text-secondary",
|
|
137
244
|
children: e.position
|
|
138
245
|
}),
|
|
139
|
-
e.feedback && /* @__PURE__ */
|
|
246
|
+
e.feedback && /* @__PURE__ */ f("p", {
|
|
140
247
|
className: "text-xs text-text-secondary mt-1 italic",
|
|
141
248
|
children: [
|
|
142
249
|
"\"",
|
|
@@ -144,25 +251,72 @@ function v() {
|
|
|
144
251
|
"\""
|
|
145
252
|
]
|
|
146
253
|
})
|
|
147
|
-
] }), /* @__PURE__ */
|
|
254
|
+
] }), /* @__PURE__ */ f("div", {
|
|
148
255
|
className: "flex items-center gap-3",
|
|
149
|
-
children: [e.rating && /* @__PURE__ */
|
|
256
|
+
children: [e.rating && /* @__PURE__ */ f("div", {
|
|
150
257
|
className: "flex items-center gap-1",
|
|
151
|
-
children: [/* @__PURE__ */
|
|
258
|
+
children: [/* @__PURE__ */ d(l, { className: "h-4 w-4 text-status-warning-text" }), /* @__PURE__ */ f("span", {
|
|
152
259
|
className: "text-sm font-medium",
|
|
153
260
|
children: [e.rating, "/5"]
|
|
154
261
|
})]
|
|
155
|
-
}), /* @__PURE__ */
|
|
262
|
+
}), /* @__PURE__ */ d(p, {
|
|
156
263
|
variant: "default",
|
|
157
264
|
children: "completed"
|
|
158
265
|
})]
|
|
159
266
|
})]
|
|
160
267
|
}, e.id))
|
|
161
|
-
})] })
|
|
268
|
+
})] }),
|
|
269
|
+
/* @__PURE__ */ d(t, {
|
|
270
|
+
open: j,
|
|
271
|
+
onOpenChange: M,
|
|
272
|
+
title: "Schedule Interview",
|
|
273
|
+
description: "Set up a conversation with a candidate in your pipeline.",
|
|
274
|
+
fields: L,
|
|
275
|
+
submitLabel: "Schedule",
|
|
276
|
+
onSubmit: async (e) => {
|
|
277
|
+
let t = O.find((t) => t.id === n(e, "candidateId"));
|
|
278
|
+
if (!t) throw Error("Please select a candidate");
|
|
279
|
+
await k({
|
|
280
|
+
id: r(),
|
|
281
|
+
candidateId: t.id,
|
|
282
|
+
candidateName: `${t.firstName} ${t.lastName}`,
|
|
283
|
+
position: t.position,
|
|
284
|
+
interviewerName: n(e, "interviewerName"),
|
|
285
|
+
date: n(e, "date"),
|
|
286
|
+
time: n(e, "time"),
|
|
287
|
+
type: e.type,
|
|
288
|
+
status: "scheduled"
|
|
289
|
+
}), E("Interview scheduled", "success");
|
|
290
|
+
}
|
|
291
|
+
}),
|
|
292
|
+
/* @__PURE__ */ d(t, {
|
|
293
|
+
open: N !== null,
|
|
294
|
+
onOpenChange: (e) => {
|
|
295
|
+
e || P(null);
|
|
296
|
+
},
|
|
297
|
+
title: "Record Interview Outcome",
|
|
298
|
+
description: N ? `${N.candidateName} — ${N.position}` : void 0,
|
|
299
|
+
fields: T,
|
|
300
|
+
initialValues: N ? {
|
|
301
|
+
status: N.status,
|
|
302
|
+
rating: N.rating ?? "",
|
|
303
|
+
feedback: N.feedback ?? ""
|
|
304
|
+
} : void 0,
|
|
305
|
+
submitLabel: "Save outcome",
|
|
306
|
+
onSubmit: async (e) => {
|
|
307
|
+
if (!N) return;
|
|
308
|
+
let t = e.rating, r = typeof t == "number" || typeof t == "string" && t.trim() !== "";
|
|
309
|
+
await A(N.id, {
|
|
310
|
+
status: e.status,
|
|
311
|
+
feedback: n(e, "feedback"),
|
|
312
|
+
...r ? { rating: Number(t) } : {}
|
|
313
|
+
}), E("Interview updated", "success");
|
|
314
|
+
}
|
|
315
|
+
})
|
|
162
316
|
]
|
|
163
317
|
});
|
|
164
318
|
}
|
|
165
319
|
//#endregion
|
|
166
|
-
export {
|
|
320
|
+
export { E as HiringInterviewsPagePage };
|
|
167
321
|
|
|
168
322
|
//# sourceMappingURL=HiringInterviewsPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HiringInterviewsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/HiringInterviewsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { Calendar, Clock, Plus, Star, Video } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function HiringInterviewsPagePage() {\n const { interviews } = useCrewFoundryStore();\n\n const scheduled = interviews.filter((i) => i.status === 'scheduled');\n const completed = interviews.filter((i) => i.status === 'completed');\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>Interviews</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n {scheduled.length} upcoming · {completed.length} completed\n </p>\n <PagePurpose className=\"mt-1\">Schedule and track interviews across your hiring pipeline — keep everyone aligned on who's meeting which candidate and when.</PagePurpose>\n </div>\n <Button size=\"sm\">\n <Plus className=\"h-4 w-4 mr-1\" />\n Schedule Interview\n </Button>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\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\">Scheduled</CardTitle>\n <Calendar className=\"h-4 w-4 text-status-info-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{scheduled.length}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Completed</CardTitle>\n <Clock className=\"h-4 w-4 text-status-success-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{completed.length}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">This Week</CardTitle>\n <Video className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{scheduled.length}</div>\n </CardContent>\n </GlassCard>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Upcoming Interviews</CardTitle>\n <CardDescription>Scheduled interviews for the coming days</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {scheduled.map((interview) => (\n <div\n key={interview.id}\n className=\"flex items-center justify-between rounded border p-4\"\n >\n <div>\n <p className=\"text-sm font-medium\">{interview.candidateName}</p>\n <p className=\"text-xs text-text-secondary\">{interview.position}</p>\n <p className=\"text-xs text-text-secondary mt-1\">\n Interviewer: {interview.interviewerName}\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"text-right\">\n <p className=\"text-sm font-medium\">{interview.date}</p>\n <p className=\"text-xs text-text-secondary\">{interview.time}</p>\n </div>\n <Badge variant=\"outline\">{interview.type}</Badge>\n <Badge variant=\"secondary\">{interview.status}</Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n\n {completed.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Completed Interviews</CardTitle>\n <CardDescription>Recent interview feedback</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {completed.map((interview) => (\n <div\n key={interview.id}\n className=\"flex items-center justify-between rounded border p-4\"\n >\n <div>\n <p className=\"text-sm font-medium\">{interview.candidateName}</p>\n <p className=\"text-xs text-text-secondary\">{interview.position}</p>\n {interview.feedback && (\n <p className=\"text-xs text-text-secondary mt-1 italic\">\n "{interview.feedback}"\n </p>\n )}\n </div>\n <div className=\"flex items-center gap-3\">\n {interview.rating && (\n <div className=\"flex items-center gap-1\">\n <Star className=\"h-4 w-4 text-status-warning-text\" />\n <span className=\"text-sm font-medium\">{interview.rating}/5</span>\n </div>\n )}\n <Badge variant=\"default\">completed</Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HiringInterviewsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/HiringInterviewsPagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { useGlobalUi } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { Calendar, Clock, Plus, Star, Video } from 'lucide-react';\nimport { useCrewFoundryStore, type Interview } from '../store/crewfoundryStore';\nimport { FormModal, type FieldConfig, type FormValues } from '../components/forms/FormModal';\nimport { getText, newClientId } from '../components/forms/formValues';\n\nconst INTERVIEW_TYPE_OPTIONS: FieldConfig['options'] = [\n { label: 'Phone', value: 'phone' },\n { label: 'Video', value: 'video' },\n { label: 'Onsite', value: 'onsite' },\n { label: 'Panel', value: 'panel' },\n { label: 'Technical', value: 'technical' },\n];\n\nconst INTERVIEW_STATUS_OPTIONS: FieldConfig['options'] = [\n { label: 'Scheduled', value: 'scheduled' },\n { label: 'Completed', value: 'completed' },\n { label: 'Cancelled', value: 'cancelled' },\n { label: 'No show', value: 'no_show' },\n];\n\nconst UPDATE_FIELDS: FieldConfig[] = [\n { name: 'status', label: 'Status', type: 'select', options: INTERVIEW_STATUS_OPTIONS, required: true },\n { name: 'rating', label: 'Rating (out of 5)', type: 'number' },\n { name: 'feedback', label: 'Feedback', type: 'textarea', colSpan: 2 },\n];\n\nexport function HiringInterviewsPagePage() {\n const { showToast } = useGlobalUi();\n const { interviews, candidates, addInterview, updateInterview } = useCrewFoundryStore();\n const [scheduleOpen, setScheduleOpen] = useState(false);\n const [updateTarget, setUpdateTarget] = useState<Interview | null>(null);\n\n const scheduled = interviews.filter((i) => i.status === 'scheduled');\n const completed = interviews.filter((i) => i.status === 'completed');\n\n const scheduleFields = useMemo<FieldConfig[]>(\n () => [\n {\n name: 'candidateId',\n label: 'Candidate',\n type: 'select',\n required: true,\n placeholder: candidates.length ? 'Select a candidate…' : 'No candidates available',\n options: candidates.map((c) => ({\n label: `${c.firstName} ${c.lastName} — ${c.position}`,\n value: c.id,\n })),\n },\n { name: 'interviewerName', label: 'Interviewer', type: 'text', required: true },\n { name: 'date', label: 'Date', type: 'date', required: true },\n { name: 'time', label: 'Time', type: 'text', required: true, placeholder: 'e.g. 10:30 AM' },\n { name: 'type', label: 'Type', type: 'select', required: true, options: INTERVIEW_TYPE_OPTIONS },\n ],\n [candidates]\n );\n\n const handleSchedule = async (values: FormValues) => {\n const candidate = candidates.find((c) => c.id === getText(values, 'candidateId'));\n if (!candidate) {\n throw new Error('Please select a candidate');\n }\n await addInterview({\n id: newClientId(),\n candidateId: candidate.id,\n candidateName: `${candidate.firstName} ${candidate.lastName}`,\n position: candidate.position,\n interviewerName: getText(values, 'interviewerName'),\n date: getText(values, 'date'),\n time: getText(values, 'time'),\n type: values.type as Interview['type'],\n status: 'scheduled',\n });\n showToast('Interview scheduled', 'success');\n };\n\n const handleUpdate = async (values: FormValues) => {\n if (!updateTarget) {\n return;\n }\n const ratingRaw = values.rating;\n const hasRating =\n typeof ratingRaw === 'number' ||\n (typeof ratingRaw === 'string' && ratingRaw.trim() !== '');\n await updateInterview(updateTarget.id, {\n status: values.status as Interview['status'],\n feedback: getText(values, 'feedback'),\n ...(hasRating ? { rating: Number(ratingRaw) } : {}),\n });\n showToast('Interview updated', 'success');\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Interviews</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n {scheduled.length} upcoming · {completed.length} completed\n </p>\n <PagePurpose className=\"mt-1\">Schedule and track interviews across your hiring pipeline — keep everyone aligned on who's meeting which candidate and when.</PagePurpose>\n </div>\n <Button size=\"sm\" onClick={() => setScheduleOpen(true)}>\n <Plus className=\"h-4 w-4 mr-1\" />\n Schedule Interview\n </Button>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\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\">Scheduled</CardTitle>\n <Calendar className=\"h-4 w-4 text-status-info-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{scheduled.length}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Completed</CardTitle>\n <Clock className=\"h-4 w-4 text-status-success-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{completed.length}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">This Week</CardTitle>\n <Video className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{scheduled.length}</div>\n </CardContent>\n </GlassCard>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Upcoming Interviews</CardTitle>\n <CardDescription>Scheduled interviews for the coming days</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {scheduled.map((interview) => (\n <div\n key={interview.id}\n className=\"flex items-center justify-between rounded border p-4\"\n >\n <div>\n <p className=\"text-sm font-medium\">{interview.candidateName}</p>\n <p className=\"text-xs text-text-secondary\">{interview.position}</p>\n <p className=\"text-xs text-text-secondary mt-1\">\n Interviewer: {interview.interviewerName}\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"text-right\">\n <p className=\"text-sm font-medium\">{interview.date}</p>\n <p className=\"text-xs text-text-secondary\">{interview.time}</p>\n </div>\n <Badge variant=\"outline\">{interview.type}</Badge>\n <Badge variant=\"secondary\">{interview.status}</Badge>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setUpdateTarget(interview)}\n >\n Record outcome\n </Button>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n\n {completed.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Completed Interviews</CardTitle>\n <CardDescription>Recent interview feedback</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {completed.map((interview) => (\n <div\n key={interview.id}\n className=\"flex items-center justify-between rounded border p-4\"\n >\n <div>\n <p className=\"text-sm font-medium\">{interview.candidateName}</p>\n <p className=\"text-xs text-text-secondary\">{interview.position}</p>\n {interview.feedback && (\n <p className=\"text-xs text-text-secondary mt-1 italic\">\n "{interview.feedback}"\n </p>\n )}\n </div>\n <div className=\"flex items-center gap-3\">\n {interview.rating && (\n <div className=\"flex items-center gap-1\">\n <Star className=\"h-4 w-4 text-status-warning-text\" />\n <span className=\"text-sm font-medium\">{interview.rating}/5</span>\n </div>\n )}\n <Badge variant=\"default\">completed</Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n )}\n\n <FormModal\n open={scheduleOpen}\n onOpenChange={setScheduleOpen}\n title=\"Schedule Interview\"\n description=\"Set up a conversation with a candidate in your pipeline.\"\n fields={scheduleFields}\n submitLabel=\"Schedule\"\n onSubmit={handleSchedule}\n />\n <FormModal\n open={updateTarget !== null}\n onOpenChange={(open) => {\n if (!open) {\n setUpdateTarget(null);\n }\n }}\n title=\"Record Interview Outcome\"\n description={updateTarget ? `${updateTarget.candidateName} — ${updateTarget.position}` : undefined}\n fields={UPDATE_FIELDS}\n initialValues={\n updateTarget\n ? {\n status: updateTarget.status,\n rating: updateTarget.rating ?? '',\n feedback: updateTarget.feedback ?? '',\n }\n : undefined\n }\n submitLabel=\"Save outcome\"\n onSubmit={handleUpdate}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAmBA,IAAM,IAAiD;CACrD;EAAE,OAAO;EAAS,OAAO;EAAS;CAClC;EAAE,OAAO;EAAS,OAAO;EAAS;CAClC;EAAE,OAAO;EAAU,OAAO;EAAU;CACpC;EAAE,OAAO;EAAS,OAAO;EAAS;CAClC;EAAE,OAAO;EAAa,OAAO;EAAa;CAC3C,EASK,IAA+B;CACnC;EAAE,MAAM;EAAU,OAAO;EAAU,MAAM;EAAU,SARI;GACvD;IAAE,OAAO;IAAa,OAAO;IAAa;GAC1C;IAAE,OAAO;IAAa,OAAO;IAAa;GAC1C;IAAE,OAAO;IAAa,OAAO;IAAa;GAC1C;IAAE,OAAO;IAAW,OAAO;IAAW;GACvC;EAGuF,UAAU;EAAM;CACtG;EAAE,MAAM;EAAU,OAAO;EAAqB,MAAM;EAAU;CAC9D;EAAE,MAAM;EAAY,OAAO;EAAY,MAAM;EAAY,SAAS;EAAG;CACtE;AAED,SAAgB,IAA2B;CACzC,IAAM,EAAE,iBAAc,GAAa,EAC7B,EAAE,eAAY,eAAY,iBAAc,uBAAoB,GAAqB,EACjF,CAAC,GAAc,KAAmB,EAAS,GAAM,EACjD,CAAC,GAAc,KAAmB,EAA2B,KAAK,EAElE,IAAY,EAAW,QAAQ,MAAM,EAAE,WAAW,YAAY,EAC9D,IAAY,EAAW,QAAQ,MAAM,EAAE,WAAW,YAAY,EAE9D,IAAiB,QACf;EACJ;GACE,MAAM;GACN,OAAO;GACP,MAAM;GACN,UAAU;GACV,aAAa,EAAW,SAAS,wBAAwB;GACzD,SAAS,EAAW,KAAK,OAAO;IAC9B,OAAO,GAAG,EAAE,UAAU,GAAG,EAAE,SAAS,KAAK,EAAE;IAC3C,OAAO,EAAE;IACV,EAAE;GACJ;EACD;GAAE,MAAM;GAAmB,OAAO;GAAe,MAAM;GAAQ,UAAU;GAAM;EAC/E;GAAE,MAAM;GAAQ,OAAO;GAAQ,MAAM;GAAQ,UAAU;GAAM;EAC7D;GAAE,MAAM;GAAQ,OAAO;GAAQ,MAAM;GAAQ,UAAU;GAAM,aAAa;GAAiB;EAC3F;GAAE,MAAM;GAAQ,OAAO;GAAQ,MAAM;GAAU,UAAU;GAAM,SAAS;GAAwB;EACjG,EACD,CAAC,EAAW,CACb;AAqCD,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD,EAAA,UAAA;KACE,kBAAC,MAAD;MAAI,WAAU;gBACZ,kBAAC,GAAD,EAAA,UAAc,cAAyB,CAAA;MACpC,CAAA;KACL,kBAAC,KAAD;MAAG,WAAU;gBAAb;OACG,EAAU;OAAO;OAAa,EAAU;OAAO;OAC9C;;KACJ,kBAAC,GAAD;MAAa,WAAU;gBAAO;MAA+I,CAAA;KACzK,EAAA,CAAA,EACN,kBAAC,GAAD;KAAQ,MAAK;KAAK,eAAe,EAAgB,GAAK;eAAtD,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,qBAE1B;OACL;;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD;MAAW,WAAU;MAAQ,MAAA;MAAK,WAAU;gBAA5C,CACE,kBAAC,GAAD;OAAY,WAAU;iBAAtB,CACE,kBAAC,GAAD;QAAW,WAAU;kBAAsB;QAAqB,CAAA,EAChE,kBAAC,GAAD,EAAU,WAAU,iCAAkC,CAAA,CAC3C;UACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;OAAK,WAAU;iBAAmC,EAAU;OAAa,CAAA,EAC7D,CAAA,CACJ;;KACZ,kBAAC,GAAD;MAAW,WAAU;MAAS,WAAU;gBAAxC,CACE,kBAAC,GAAD;OAAY,WAAU;iBAAtB,CACE,kBAAC,GAAD;QAAW,WAAU;kBAAsB;QAAqB,CAAA,EAChE,kBAAC,GAAD,EAAO,WAAU,oCAAqC,CAAA,CAC3C;UACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;OAAK,WAAU;iBAAmC,EAAU;OAAa,CAAA,EAC7D,CAAA,CACJ;;KACZ,kBAAC,GAAD;MAAW,WAAU;MAAS,WAAU;gBAAxC,CACE,kBAAC,GAAD;OAAY,WAAU;iBAAtB,CACE,kBAAC,GAAD;QAAW,WAAU;kBAAsB;QAAqB,CAAA,EAChE,kBAAC,GAAD,EAAO,WAAU,+BAAgC,CAAA,CACtC;UACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;OAAK,WAAU;iBAAmC,EAAU;OAAa,CAAA,EAC7D,CAAA,CACJ;;KACR;;GAEN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAW,uBAA+B,CAAA,EAC1C,kBAAC,GAAD,EAAA,UAAiB,4CAA0D,CAAA,CAChE,EAAA,CAAA,EACb,kBAAC,GAAD;IAAa,WAAU;cACpB,EAAU,KAAK,MACd,kBAAC,OAAD;KAEE,WAAU;eAFZ,CAIE,kBAAC,OAAD,EAAA,UAAA;MACE,kBAAC,KAAD;OAAG,WAAU;iBAAuB,EAAU;OAAkB,CAAA;MAChE,kBAAC,KAAD;OAAG,WAAU;iBAA+B,EAAU;OAAa,CAAA;MACnE,kBAAC,KAAD;OAAG,WAAU;iBAAb,CAAgD,iBAChC,EAAU,gBACtB;;MACA,EAAA,CAAA,EACN,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,KAAD;SAAG,WAAU;mBAAuB,EAAU;SAAS,CAAA,EACvD,kBAAC,KAAD;SAAG,WAAU;mBAA+B,EAAU;SAAS,CAAA,CAC3D;;OACN,kBAAC,GAAD;QAAO,SAAQ;kBAAW,EAAU;QAAa,CAAA;OACjD,kBAAC,GAAD;QAAO,SAAQ;kBAAa,EAAU;QAAe,CAAA;OACrD,kBAAC,GAAD;QACE,SAAQ;QACR,MAAK;QACL,eAAe,EAAgB,EAAU;kBAC1C;QAEQ,CAAA;OACL;QACF;OAzBC,EAAU,GAyBX,CACN;IACU,CAAA,CACT,EAAA,CAAA;GAEN,EAAU,SAAS,KAClB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAW,wBAAgC,CAAA,EAC3C,kBAAC,GAAD,EAAA,UAAiB,6BAA2C,CAAA,CACjD,EAAA,CAAA,EACb,kBAAC,GAAD;IAAa,WAAU;cACpB,EAAU,KAAK,MACd,kBAAC,OAAD;KAEE,WAAU;eAFZ,CAIE,kBAAC,OAAD,EAAA,UAAA;MACE,kBAAC,KAAD;OAAG,WAAU;iBAAuB,EAAU;OAAkB,CAAA;MAChE,kBAAC,KAAD;OAAG,WAAU;iBAA+B,EAAU;OAAa,CAAA;MAClE,EAAU,YACT,kBAAC,KAAD;OAAG,WAAU;iBAAb;QAAuD;QAC9C,EAAU;QAAS;QACxB;;MAEF,EAAA,CAAA,EACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACG,EAAU,UACT,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,oCAAqC,CAAA,EACrD,kBAAC,QAAD;QAAM,WAAU;kBAAhB,CAAuC,EAAU,QAAO,KAAS;UAC7D;UAER,kBAAC,GAAD;OAAO,SAAQ;iBAAU;OAAiB,CAAA,CACtC;QACF;OArBC,EAAU,GAqBX,CACN;IACU,CAAA,CACT,EAAA,CAAA;GAGT,kBAAC,GAAD;IACE,MAAM;IACN,cAAc;IACd,OAAM;IACN,aAAY;IACZ,QAAQ;IACR,aAAY;IACZ,UApKiB,OAAO,MAAuB;KACnD,IAAM,IAAY,EAAW,MAAM,MAAM,EAAE,OAAO,EAAQ,GAAQ,cAAc,CAAC;AACjF,SAAI,CAAC,EACH,OAAU,MAAM,4BAA4B;AAa9C,KAXA,MAAM,EAAa;MACjB,IAAI,GAAa;MACjB,aAAa,EAAU;MACvB,eAAe,GAAG,EAAU,UAAU,GAAG,EAAU;MACnD,UAAU,EAAU;MACpB,iBAAiB,EAAQ,GAAQ,kBAAkB;MACnD,MAAM,EAAQ,GAAQ,OAAO;MAC7B,MAAM,EAAQ,GAAQ,OAAO;MAC7B,MAAM,EAAO;MACb,QAAQ;MACT,CAAC,EACF,EAAU,uBAAuB,UAAU;;IAqJvC,CAAA;GACF,kBAAC,GAAD;IACE,MAAM,MAAiB;IACvB,eAAe,MAAS;AACtB,KAAK,KACH,EAAgB,KAAK;;IAGzB,OAAM;IACN,aAAa,IAAe,GAAG,EAAa,cAAc,KAAK,EAAa,aAAa,KAAA;IACzF,QAAQ;IACR,eACE,IACI;KACE,QAAQ,EAAa;KACrB,QAAQ,EAAa,UAAU;KAC/B,UAAU,EAAa,YAAY;KACpC,GACD,KAAA;IAEN,aAAY;IACZ,UAvKe,OAAO,MAAuB;AACjD,SAAI,CAAC,EACH;KAEF,IAAM,IAAY,EAAO,QACnB,IACJ,OAAO,KAAc,YACpB,OAAO,KAAc,YAAY,EAAU,MAAM,KAAK;AAMzD,KALA,MAAM,EAAgB,EAAa,IAAI;MACrC,QAAQ,EAAO;MACf,UAAU,EAAQ,GAAQ,WAAW;MACrC,GAAI,IAAY,EAAE,QAAQ,OAAO,EAAU,EAAE,GAAG,EAAE;MACnD,CAAC,EACF,EAAU,qBAAqB,UAAU;;IA2JrC,CAAA;GACE"}
|