@burdenoff/microfe-proserviceworld 2026.624.1 → 2026.626.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/proserviceworld/pages/AdminReportsPage.js +396 -329
- package/dist/proserviceworld/pages/AdminReportsPage.js.map +1 -1
- package/dist/proserviceworld/pages/AdminUsersPage.js +261 -237
- package/dist/proserviceworld/pages/AdminUsersPage.js.map +1 -1
- package/dist/proserviceworld/pages/AnalyticsPage.js +373 -315
- package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -1
- package/dist/proserviceworld/pages/BookingsPage.js +221 -200
- package/dist/proserviceworld/pages/BookingsPage.js.map +1 -1
- package/dist/proserviceworld/pages/DashboardPage.js +474 -405
- package/dist/proserviceworld/pages/DashboardPage.js.map +1 -1
- package/dist/proserviceworld/pages/DocumentsPage.js +386 -317
- package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -1
- package/dist/proserviceworld/pages/MessagesPage.js +201 -192
- package/dist/proserviceworld/pages/MessagesPage.js.map +1 -1
- package/dist/proserviceworld/pages/PaymentsPage.js +398 -340
- package/dist/proserviceworld/pages/PaymentsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ProjectsPage.js +543 -463
- package/dist/proserviceworld/pages/ProjectsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ProviderDetailPage.js +420 -346
- package/dist/proserviceworld/pages/ProviderDetailPage.js.map +1 -1
- package/dist/proserviceworld/pages/ProvidersPage.js +249 -244
- package/dist/proserviceworld/pages/ProvidersPage.js.map +1 -1
- package/dist/proserviceworld/pages/ReviewsPage.js +93 -76
- package/dist/proserviceworld/pages/ReviewsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ServiceDetailsPage.js +377 -309
- package/dist/proserviceworld/pages/ServiceDetailsPage.js.map +1 -1
- package/dist/proserviceworld/pages/ServicesPage.js +116 -109
- package/dist/proserviceworld/pages/ServicesPage.js.map +1 -1
- package/dist/proserviceworld/pages/VerificationPage.js +264 -251
- package/dist/proserviceworld/pages/VerificationPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -2,35 +2,35 @@ import { useProServiceWorldStore as e } from "../store/proserviceworldStore.js";
|
|
|
2
2
|
import { useMemo as t, useState as n } from "react";
|
|
3
3
|
import { AlertTriangle as r, BarChart3 as i, Calendar as a, CheckCircle2 as o, ChevronRight as s, Clock as c, DollarSign as l, Flag as u, Plus as d, Search as f, Tag as p, Target as m, Users as h } from "lucide-react";
|
|
4
4
|
import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
|
|
5
|
-
import {
|
|
5
|
+
import { AuroraBackground as y, Badge as b, Button as x, Card as S, CardContent as C, CardHeader as w, CardTitle as T, GlassCard as E, GradientText as D, IllustratedEmptyState as O, Input as k, NextSteps as A, PagePurpose as j } from "@burdenoff/fe-libs/ui";
|
|
6
6
|
//#region src/proserviceworld/pages/ProjectsPage.tsx
|
|
7
|
-
var
|
|
7
|
+
var M = {
|
|
8
8
|
planning: {
|
|
9
9
|
label: "Planning",
|
|
10
|
-
color: "text-
|
|
11
|
-
|
|
10
|
+
color: "text-status-warning-text",
|
|
11
|
+
dot: "bg-status-warning-text"
|
|
12
12
|
},
|
|
13
13
|
active: {
|
|
14
14
|
label: "Active",
|
|
15
|
-
color: "text-blue
|
|
16
|
-
|
|
15
|
+
color: "text-accent-blue",
|
|
16
|
+
dot: "bg-accent-blue"
|
|
17
17
|
},
|
|
18
18
|
on_hold: {
|
|
19
19
|
label: "On Hold",
|
|
20
|
-
color: "text-
|
|
21
|
-
|
|
20
|
+
color: "text-status-warning-text",
|
|
21
|
+
dot: "bg-status-warning-text"
|
|
22
22
|
},
|
|
23
23
|
completed: {
|
|
24
24
|
label: "Completed",
|
|
25
|
-
color: "text-
|
|
26
|
-
|
|
25
|
+
color: "text-status-success-text",
|
|
26
|
+
dot: "bg-status-success-text"
|
|
27
27
|
},
|
|
28
28
|
cancelled: {
|
|
29
29
|
label: "Cancelled",
|
|
30
|
-
color: "text-
|
|
31
|
-
|
|
30
|
+
color: "text-status-error-text",
|
|
31
|
+
dot: "bg-status-error-text"
|
|
32
32
|
}
|
|
33
|
-
},
|
|
33
|
+
}, N = {
|
|
34
34
|
low: {
|
|
35
35
|
label: "Low",
|
|
36
36
|
variant: "outline"
|
|
@@ -47,501 +47,581 @@ var E = {
|
|
|
47
47
|
label: "Critical",
|
|
48
48
|
variant: "destructive"
|
|
49
49
|
}
|
|
50
|
+
}, P = {
|
|
51
|
+
completed: "bg-status-success-text",
|
|
52
|
+
in_progress: "bg-accent-blue",
|
|
53
|
+
pending: "bg-bg-sunken",
|
|
54
|
+
overdue: "bg-status-error-text"
|
|
55
|
+
}, F = {
|
|
56
|
+
completed: "text-status-success-text",
|
|
57
|
+
in_progress: "text-accent-blue",
|
|
58
|
+
pending: "text-text-secondary",
|
|
59
|
+
overdue: "text-status-error-text"
|
|
50
60
|
};
|
|
51
|
-
function
|
|
52
|
-
let { projects:
|
|
53
|
-
let e = [...
|
|
54
|
-
if (
|
|
55
|
-
let t =
|
|
61
|
+
function I() {
|
|
62
|
+
let { projects: I } = e(), [L, R] = n(""), [z, B] = n("all"), [V, H] = n(I[0]?.id ?? ""), [U, W] = n("overview"), G = t(() => {
|
|
63
|
+
let e = [...I];
|
|
64
|
+
if (z !== "all" && (e = e.filter((e) => e.status === z)), L.trim()) {
|
|
65
|
+
let t = L.toLowerCase();
|
|
56
66
|
e = e.filter((e) => e.title.toLowerCase().includes(t) || e.category.toLowerCase().includes(t));
|
|
57
67
|
}
|
|
58
68
|
return e;
|
|
59
69
|
}, [
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
]),
|
|
70
|
+
I,
|
|
71
|
+
z,
|
|
72
|
+
L
|
|
73
|
+
]), K = I.find((e) => e.id === V);
|
|
64
74
|
return /* @__PURE__ */ v("div", {
|
|
65
|
-
className: "space-y-6 p-6",
|
|
66
|
-
children: [
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
className: "
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
75
|
+
className: "space-y-6 p-6 bg-bg-canvas min-h-screen",
|
|
76
|
+
children: [
|
|
77
|
+
/* @__PURE__ */ v("div", {
|
|
78
|
+
className: "relative overflow-hidden rounded-card -mx-2 px-2 pt-1",
|
|
79
|
+
children: [/* @__PURE__ */ _(y, { intensity: "subtle" }), /* @__PURE__ */ v("div", {
|
|
80
|
+
className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
81
|
+
children: [/* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("h1", {
|
|
82
|
+
className: "text-2xl font-semibold tracking-tight",
|
|
83
|
+
children: /* @__PURE__ */ _(D, { children: "Projects" })
|
|
84
|
+
}), /* @__PURE__ */ _("p", {
|
|
85
|
+
className: "text-sm text-text-secondary",
|
|
86
|
+
children: "Track progress and manage your professional service projects."
|
|
87
|
+
})] }), /* @__PURE__ */ v(x, {
|
|
88
|
+
size: "sm",
|
|
89
|
+
children: [/* @__PURE__ */ _(d, { className: "mr-2 h-4 w-4" }), " New Project"]
|
|
90
|
+
})]
|
|
91
|
+
})]
|
|
92
|
+
}),
|
|
93
|
+
/* @__PURE__ */ _(j, {
|
|
94
|
+
icon: /* @__PURE__ */ _(m, { className: "h-4 w-4" }),
|
|
95
|
+
children: "Run your engagements from kickoff to delivery. Pick a project to see its budget, progress, milestones, timeline, and team in one place — so you always know what is on track, what is at risk, and what is due next."
|
|
96
|
+
}),
|
|
97
|
+
/* @__PURE__ */ _(A, {
|
|
98
|
+
storageKey: "proserviceworld-projects",
|
|
99
|
+
steps: [
|
|
100
|
+
{
|
|
101
|
+
id: "timeline",
|
|
102
|
+
label: "Walk the timeline",
|
|
103
|
+
description: "See milestones in chronological order to gauge momentum.",
|
|
104
|
+
icon: /* @__PURE__ */ _(a, { className: "h-4 w-4" }),
|
|
105
|
+
onClick: () => W("timeline")
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
id: "milestones",
|
|
109
|
+
label: "Drill into milestones",
|
|
110
|
+
description: "Review deliverables, dependencies, and due dates.",
|
|
111
|
+
icon: /* @__PURE__ */ _(u, { className: "h-4 w-4" }),
|
|
112
|
+
onClick: () => W("milestones")
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
id: "team",
|
|
116
|
+
label: "Check the team",
|
|
117
|
+
description: "See who is assigned and their roles.",
|
|
118
|
+
icon: /* @__PURE__ */ _(h, { className: "h-4 w-4" }),
|
|
119
|
+
onClick: () => W("team")
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}),
|
|
123
|
+
/* @__PURE__ */ v("div", {
|
|
124
|
+
className: "grid gap-6 lg:grid-cols-3",
|
|
125
|
+
children: [/* @__PURE__ */ v("div", {
|
|
126
|
+
className: "space-y-4",
|
|
127
|
+
children: [
|
|
128
|
+
/* @__PURE__ */ v("div", {
|
|
129
|
+
className: "relative",
|
|
130
|
+
children: [/* @__PURE__ */ _(f, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ _(k, {
|
|
131
|
+
placeholder: "Search projects...",
|
|
132
|
+
"aria-label": "Search projects",
|
|
133
|
+
value: L,
|
|
134
|
+
onChange: (e) => R(e.target.value),
|
|
135
|
+
className: "pl-10"
|
|
136
|
+
})]
|
|
137
|
+
}),
|
|
138
|
+
/* @__PURE__ */ _("div", {
|
|
139
|
+
className: "flex flex-wrap gap-1",
|
|
140
|
+
children: [
|
|
141
|
+
"all",
|
|
142
|
+
"active",
|
|
143
|
+
"planning",
|
|
144
|
+
"completed",
|
|
145
|
+
"on_hold",
|
|
146
|
+
"cancelled"
|
|
147
|
+
].map((e) => /* @__PURE__ */ _("button", {
|
|
148
|
+
onClick: () => B(e),
|
|
149
|
+
"aria-pressed": z === e,
|
|
150
|
+
className: `rounded px-2 py-1 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus ${z === e ? "bg-accent-blue text-action-primary-text" : "bg-bg-sunken text-text-secondary hover:text-text-primary"}`,
|
|
151
|
+
children: e === "all" ? "All" : M[e].label
|
|
152
|
+
}, e))
|
|
153
|
+
}),
|
|
154
|
+
/* @__PURE__ */ _("div", {
|
|
155
|
+
className: "space-y-2",
|
|
156
|
+
children: G.length === 0 ? /* @__PURE__ */ _(O, {
|
|
157
|
+
illustration: L || z !== "all" ? "empty-search" : "empty-data",
|
|
158
|
+
title: "No projects found",
|
|
159
|
+
description: "Try adjusting your search or filters."
|
|
160
|
+
}) : G.map((e) => {
|
|
161
|
+
let t = M[e.status];
|
|
162
|
+
return /* @__PURE__ */ v("button", {
|
|
163
|
+
onClick: () => {
|
|
164
|
+
H(e.id), W("overview");
|
|
165
|
+
},
|
|
166
|
+
"aria-pressed": V === e.id,
|
|
167
|
+
className: `w-full rounded-lg border p-3 text-left transition-shadow focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus ${V === e.id ? "border-accent-blue bg-accent-blue-subtle" : "border-border-seam hover:shadow-pop"}`,
|
|
168
|
+
children: [
|
|
169
|
+
/* @__PURE__ */ v("div", {
|
|
170
|
+
className: "flex items-center justify-between",
|
|
171
|
+
children: [/* @__PURE__ */ _("h3", {
|
|
172
|
+
className: "font-medium text-sm truncate pr-2",
|
|
173
|
+
children: e.title
|
|
174
|
+
}), /* @__PURE__ */ _(s, { className: "h-4 w-4 shrink-0 text-text-secondary" })]
|
|
175
|
+
}),
|
|
176
|
+
/* @__PURE__ */ v("div", {
|
|
177
|
+
className: "mt-2 flex items-center gap-2",
|
|
178
|
+
children: [/* @__PURE__ */ _(b, {
|
|
179
|
+
variant: N[e.priority].variant,
|
|
180
|
+
className: "text-xs",
|
|
181
|
+
children: e.priority
|
|
182
|
+
}), /* @__PURE__ */ v("span", {
|
|
183
|
+
className: `flex items-center gap-1 text-xs ${t.color}`,
|
|
184
|
+
children: [/* @__PURE__ */ _("span", { className: `h-1.5 w-1.5 rounded-full ${t.dot} ${e.status === "active" ? "motion-safe:animate-vc-glow-pulse" : ""}` }), t.label]
|
|
185
|
+
})]
|
|
186
|
+
}),
|
|
187
|
+
/* @__PURE__ */ v("div", {
|
|
188
|
+
className: "mt-2",
|
|
189
|
+
children: [/* @__PURE__ */ v("div", {
|
|
190
|
+
className: "flex items-center justify-between text-xs text-text-secondary",
|
|
191
|
+
children: [/* @__PURE__ */ _("span", { children: "Progress" }), /* @__PURE__ */ v("span", {
|
|
192
|
+
className: "tabular-nums",
|
|
193
|
+
children: [e.progress, "%"]
|
|
194
|
+
})]
|
|
195
|
+
}), /* @__PURE__ */ _("div", {
|
|
196
|
+
className: "mt-1 h-1.5 overflow-hidden rounded-full bg-bg-sunken",
|
|
197
|
+
children: /* @__PURE__ */ _("div", {
|
|
198
|
+
className: "h-1.5 rounded-full bg-accent-blue transition-all",
|
|
199
|
+
style: { width: `${e.progress}%` }
|
|
200
|
+
})
|
|
201
|
+
})]
|
|
202
|
+
})
|
|
203
|
+
]
|
|
204
|
+
}, e.id);
|
|
205
|
+
})
|
|
206
|
+
})
|
|
207
|
+
]
|
|
208
|
+
}), /* @__PURE__ */ _("div", {
|
|
209
|
+
className: "space-y-4 lg:col-span-2",
|
|
210
|
+
children: K ? /* @__PURE__ */ v(g, { children: [
|
|
211
|
+
/* @__PURE__ */ _(E, {
|
|
212
|
+
treatment: "insight",
|
|
213
|
+
className: "border-border-seam",
|
|
214
|
+
children: /* @__PURE__ */ v(C, {
|
|
215
|
+
className: "pt-6",
|
|
119
216
|
children: [
|
|
120
217
|
/* @__PURE__ */ v("div", {
|
|
121
|
-
className: "flex items-
|
|
122
|
-
children: [/* @__PURE__ */
|
|
123
|
-
className: "
|
|
124
|
-
children:
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
218
|
+
className: "flex flex-wrap items-start justify-between gap-4",
|
|
219
|
+
children: [/* @__PURE__ */ v("div", {
|
|
220
|
+
className: "space-y-2",
|
|
221
|
+
children: [
|
|
222
|
+
/* @__PURE__ */ v("div", {
|
|
223
|
+
className: "flex items-center gap-2",
|
|
224
|
+
children: [/* @__PURE__ */ v(b, {
|
|
225
|
+
variant: N[K.priority].variant,
|
|
226
|
+
children: [K.priority, " priority"]
|
|
227
|
+
}), /* @__PURE__ */ _("span", {
|
|
228
|
+
className: `text-sm font-medium ${M[K.status].color}`,
|
|
229
|
+
children: M[K.status].label
|
|
230
|
+
})]
|
|
231
|
+
}),
|
|
232
|
+
/* @__PURE__ */ _("h2", {
|
|
233
|
+
className: "text-xl font-bold tracking-tight",
|
|
234
|
+
children: K.title
|
|
235
|
+
}),
|
|
236
|
+
/* @__PURE__ */ _("p", {
|
|
237
|
+
className: "text-sm text-text-secondary",
|
|
238
|
+
children: K.description
|
|
239
|
+
})
|
|
240
|
+
]
|
|
241
|
+
}), /* @__PURE__ */ v("div", {
|
|
242
|
+
className: "text-right",
|
|
243
|
+
children: [
|
|
244
|
+
/* @__PURE__ */ _("p", {
|
|
245
|
+
className: "text-sm text-text-secondary",
|
|
246
|
+
children: "Budget"
|
|
247
|
+
}),
|
|
248
|
+
/* @__PURE__ */ v("p", {
|
|
249
|
+
className: "text-xl font-bold tabular-nums",
|
|
250
|
+
children: ["$", K.budget.toLocaleString()]
|
|
251
|
+
}),
|
|
252
|
+
/* @__PURE__ */ v("p", {
|
|
253
|
+
className: "text-xs text-text-secondary tabular-nums",
|
|
254
|
+
children: [
|
|
255
|
+
"Spent: $",
|
|
256
|
+
K.spent.toLocaleString(),
|
|
257
|
+
" (",
|
|
258
|
+
Math.round(K.spent / K.budget * 100),
|
|
259
|
+
"%)"
|
|
260
|
+
]
|
|
261
|
+
})
|
|
262
|
+
]
|
|
136
263
|
})]
|
|
137
264
|
}),
|
|
138
265
|
/* @__PURE__ */ v("div", {
|
|
139
|
-
className: "mt-
|
|
266
|
+
className: "mt-4",
|
|
140
267
|
children: [/* @__PURE__ */ v("div", {
|
|
141
|
-
className: "flex items-center justify-between text-
|
|
142
|
-
children: [/* @__PURE__ */ _("span", {
|
|
268
|
+
className: "flex items-center justify-between text-sm",
|
|
269
|
+
children: [/* @__PURE__ */ _("span", {
|
|
270
|
+
className: "text-text-secondary",
|
|
271
|
+
children: "Overall Progress"
|
|
272
|
+
}), /* @__PURE__ */ v("span", {
|
|
273
|
+
className: "font-medium tabular-nums",
|
|
274
|
+
children: [K.progress, "%"]
|
|
275
|
+
})]
|
|
143
276
|
}), /* @__PURE__ */ _("div", {
|
|
144
|
-
className: "mt-1 h-
|
|
277
|
+
className: "mt-1 h-3 overflow-hidden rounded-full bg-bg-sunken",
|
|
145
278
|
children: /* @__PURE__ */ _("div", {
|
|
146
|
-
className: "h-
|
|
147
|
-
style: { width: `${
|
|
279
|
+
className: "h-3 rounded-full bg-accent-blue transition-all",
|
|
280
|
+
style: { width: `${K.progress}%` }
|
|
148
281
|
})
|
|
149
282
|
})]
|
|
283
|
+
}),
|
|
284
|
+
/* @__PURE__ */ v("div", {
|
|
285
|
+
className: "mt-4 flex flex-wrap gap-4 text-sm",
|
|
286
|
+
children: [
|
|
287
|
+
/* @__PURE__ */ v("span", {
|
|
288
|
+
className: "flex items-center gap-1 text-text-secondary",
|
|
289
|
+
children: [
|
|
290
|
+
/* @__PURE__ */ _(a, { className: "h-4 w-4" }),
|
|
291
|
+
" ",
|
|
292
|
+
K.startDate,
|
|
293
|
+
" -",
|
|
294
|
+
" ",
|
|
295
|
+
K.endDate
|
|
296
|
+
]
|
|
297
|
+
}),
|
|
298
|
+
/* @__PURE__ */ v("span", {
|
|
299
|
+
className: "flex items-center gap-1 text-text-secondary",
|
|
300
|
+
children: [
|
|
301
|
+
/* @__PURE__ */ _(h, { className: "h-4 w-4" }),
|
|
302
|
+
/* @__PURE__ */ _("span", {
|
|
303
|
+
className: "tabular-nums",
|
|
304
|
+
children: K.teamMembers.length
|
|
305
|
+
}),
|
|
306
|
+
" ",
|
|
307
|
+
"members"
|
|
308
|
+
]
|
|
309
|
+
}),
|
|
310
|
+
/* @__PURE__ */ v("span", {
|
|
311
|
+
className: "flex items-center gap-1 text-text-secondary",
|
|
312
|
+
children: [
|
|
313
|
+
/* @__PURE__ */ _(m, { className: "h-4 w-4" }),
|
|
314
|
+
/* @__PURE__ */ _("span", {
|
|
315
|
+
className: "tabular-nums",
|
|
316
|
+
children: K.milestones.length
|
|
317
|
+
}),
|
|
318
|
+
" ",
|
|
319
|
+
"milestones"
|
|
320
|
+
]
|
|
321
|
+
})
|
|
322
|
+
]
|
|
323
|
+
}),
|
|
324
|
+
K.tags.length > 0 && /* @__PURE__ */ v("div", {
|
|
325
|
+
className: "mt-3 flex flex-wrap items-center gap-2",
|
|
326
|
+
children: [/* @__PURE__ */ _(p, { className: "h-4 w-4 text-text-secondary" }), K.tags.map((e) => /* @__PURE__ */ _(b, {
|
|
327
|
+
variant: "outline",
|
|
328
|
+
className: "text-xs",
|
|
329
|
+
children: e
|
|
330
|
+
}, e))]
|
|
150
331
|
})
|
|
151
332
|
]
|
|
152
|
-
}
|
|
153
|
-
})
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
333
|
+
})
|
|
334
|
+
}),
|
|
335
|
+
/* @__PURE__ */ _("div", {
|
|
336
|
+
className: "flex gap-1 border-b border-border-seam",
|
|
337
|
+
children: [
|
|
338
|
+
{
|
|
339
|
+
key: "overview",
|
|
340
|
+
label: "Overview"
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
key: "timeline",
|
|
344
|
+
label: "Timeline"
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
key: "milestones",
|
|
348
|
+
label: "Milestones"
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
key: "team",
|
|
352
|
+
label: "Team"
|
|
353
|
+
}
|
|
354
|
+
].map(({ key: e, label: t }) => /* @__PURE__ */ _("button", {
|
|
355
|
+
onClick: () => W(e),
|
|
356
|
+
"aria-pressed": U === e,
|
|
357
|
+
className: `border-b-2 px-4 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus ${U === e ? "border-accent-blue text-accent-blue" : "border-transparent text-text-secondary hover:text-text-primary"}`,
|
|
358
|
+
children: t
|
|
359
|
+
}, e))
|
|
360
|
+
}),
|
|
361
|
+
U === "overview" && /* @__PURE__ */ v("div", {
|
|
362
|
+
className: "grid gap-4 sm:grid-cols-2",
|
|
363
|
+
children: [/* @__PURE__ */ v(E, {
|
|
364
|
+
treatment: "metric",
|
|
365
|
+
className: "border-border-seam",
|
|
366
|
+
children: [/* @__PURE__ */ _(w, { children: /* @__PURE__ */ v(T, {
|
|
367
|
+
className: "text-base flex items-center gap-2",
|
|
368
|
+
children: [/* @__PURE__ */ _(l, { className: "h-4 w-4" }), " Budget Overview"]
|
|
369
|
+
}) }), /* @__PURE__ */ v(C, {
|
|
370
|
+
className: "space-y-3",
|
|
166
371
|
children: [
|
|
167
372
|
/* @__PURE__ */ v("div", {
|
|
168
|
-
className: "flex
|
|
169
|
-
children: [/* @__PURE__ */
|
|
170
|
-
|
|
171
|
-
children:
|
|
172
|
-
}), /* @__PURE__ */
|
|
173
|
-
className:
|
|
174
|
-
children:
|
|
373
|
+
className: "flex justify-between text-sm",
|
|
374
|
+
children: [/* @__PURE__ */ _("span", {
|
|
375
|
+
className: "text-text-secondary",
|
|
376
|
+
children: "Total Budget"
|
|
377
|
+
}), /* @__PURE__ */ v("span", {
|
|
378
|
+
className: "font-medium tabular-nums",
|
|
379
|
+
children: ["$", K.budget.toLocaleString()]
|
|
175
380
|
})]
|
|
176
381
|
}),
|
|
177
|
-
/* @__PURE__ */
|
|
178
|
-
className: "
|
|
179
|
-
children:
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}), /* @__PURE__ */ v("div", {
|
|
187
|
-
className: "text-right",
|
|
188
|
-
children: [
|
|
189
|
-
/* @__PURE__ */ _("p", {
|
|
190
|
-
className: "text-sm text-text-secondary",
|
|
191
|
-
children: "Budget"
|
|
382
|
+
/* @__PURE__ */ v("div", {
|
|
383
|
+
className: "flex justify-between text-sm",
|
|
384
|
+
children: [/* @__PURE__ */ _("span", {
|
|
385
|
+
className: "text-text-secondary",
|
|
386
|
+
children: "Spent"
|
|
387
|
+
}), /* @__PURE__ */ v("span", {
|
|
388
|
+
className: "font-medium tabular-nums",
|
|
389
|
+
children: ["$", K.spent.toLocaleString()]
|
|
390
|
+
})]
|
|
192
391
|
}),
|
|
193
|
-
/* @__PURE__ */ v("
|
|
194
|
-
className: "
|
|
195
|
-
children: ["
|
|
392
|
+
/* @__PURE__ */ v("div", {
|
|
393
|
+
className: "flex justify-between text-sm",
|
|
394
|
+
children: [/* @__PURE__ */ _("span", {
|
|
395
|
+
className: "text-text-secondary",
|
|
396
|
+
children: "Remaining"
|
|
397
|
+
}), /* @__PURE__ */ v("span", {
|
|
398
|
+
className: "font-medium text-status-success-text tabular-nums",
|
|
399
|
+
children: ["$", (K.budget - K.spent).toLocaleString()]
|
|
400
|
+
})]
|
|
196
401
|
}),
|
|
197
|
-
/* @__PURE__ */
|
|
198
|
-
className: "
|
|
199
|
-
children:
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
Math.round(R.spent / R.budget * 100),
|
|
204
|
-
"%)"
|
|
205
|
-
]
|
|
402
|
+
/* @__PURE__ */ _("div", {
|
|
403
|
+
className: "h-2 overflow-hidden rounded-full bg-bg-sunken",
|
|
404
|
+
children: /* @__PURE__ */ _("div", {
|
|
405
|
+
className: "h-2 rounded-full bg-accent-blue",
|
|
406
|
+
style: { width: `${Math.round(K.spent / K.budget * 100)}%` }
|
|
407
|
+
})
|
|
206
408
|
})
|
|
207
409
|
]
|
|
208
410
|
})]
|
|
209
|
-
}),
|
|
210
|
-
|
|
211
|
-
className: "
|
|
212
|
-
children: [/* @__PURE__ */ v(
|
|
213
|
-
className: "flex items-center
|
|
214
|
-
children: [/* @__PURE__ */ _("
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
411
|
+
}), /* @__PURE__ */ v(E, {
|
|
412
|
+
treatment: "metric",
|
|
413
|
+
className: "border-border-seam",
|
|
414
|
+
children: [/* @__PURE__ */ _(w, { children: /* @__PURE__ */ v(T, {
|
|
415
|
+
className: "text-base flex items-center gap-2",
|
|
416
|
+
children: [/* @__PURE__ */ _(i, { className: "h-4 w-4" }), " Milestone Summary"]
|
|
417
|
+
}) }), /* @__PURE__ */ _(C, {
|
|
418
|
+
className: "space-y-3",
|
|
419
|
+
children: [
|
|
420
|
+
"completed",
|
|
421
|
+
"in_progress",
|
|
422
|
+
"pending",
|
|
423
|
+
"overdue"
|
|
424
|
+
].map((e) => {
|
|
425
|
+
let t = K.milestones.filter((t) => t.status === e).length;
|
|
426
|
+
return /* @__PURE__ */ v("div", {
|
|
427
|
+
className: "flex items-center justify-between text-sm",
|
|
428
|
+
children: [/* @__PURE__ */ v("span", {
|
|
429
|
+
className: "flex items-center gap-2 text-text-secondary capitalize",
|
|
430
|
+
children: [/* @__PURE__ */ _("span", { className: `h-1.5 w-1.5 rounded-full ${P[e]}` }), e.replace("_", " ")]
|
|
431
|
+
}), /* @__PURE__ */ _("span", {
|
|
432
|
+
className: "font-medium tabular-nums",
|
|
433
|
+
children: t
|
|
434
|
+
})]
|
|
435
|
+
}, e);
|
|
226
436
|
})
|
|
227
437
|
})]
|
|
228
|
-
})
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
" -",
|
|
239
|
-
" ",
|
|
240
|
-
R.endDate
|
|
241
|
-
]
|
|
242
|
-
}),
|
|
243
|
-
/* @__PURE__ */ v("span", {
|
|
244
|
-
className: "flex items-center gap-1 text-text-secondary",
|
|
245
|
-
children: [
|
|
246
|
-
/* @__PURE__ */ _(h, { className: "h-4 w-4" }),
|
|
247
|
-
" ",
|
|
248
|
-
R.teamMembers.length,
|
|
249
|
-
" members"
|
|
250
|
-
]
|
|
251
|
-
}),
|
|
252
|
-
/* @__PURE__ */ v("span", {
|
|
253
|
-
className: "flex items-center gap-1 text-text-secondary",
|
|
254
|
-
children: [
|
|
255
|
-
/* @__PURE__ */ _(m, { className: "h-4 w-4" }),
|
|
256
|
-
" ",
|
|
257
|
-
R.milestones.length,
|
|
258
|
-
" milestones"
|
|
259
|
-
]
|
|
260
|
-
})
|
|
261
|
-
]
|
|
262
|
-
}),
|
|
263
|
-
R.tags.length > 0 && /* @__PURE__ */ v("div", {
|
|
264
|
-
className: "mt-3 flex items-center gap-2",
|
|
265
|
-
children: [/* @__PURE__ */ _(p, { className: "h-4 w-4 text-text-secondary" }), R.tags.map((e) => /* @__PURE__ */ _(y, {
|
|
266
|
-
variant: "outline",
|
|
267
|
-
className: "text-xs",
|
|
268
|
-
children: e
|
|
269
|
-
}, e))]
|
|
270
|
-
})
|
|
271
|
-
]
|
|
272
|
-
}) }),
|
|
273
|
-
/* @__PURE__ */ _("div", {
|
|
274
|
-
className: "flex gap-1 border-b",
|
|
275
|
-
children: [
|
|
276
|
-
{
|
|
277
|
-
key: "overview",
|
|
278
|
-
label: "Overview"
|
|
279
|
-
},
|
|
280
|
-
{
|
|
281
|
-
key: "timeline",
|
|
282
|
-
label: "Timeline"
|
|
283
|
-
},
|
|
284
|
-
{
|
|
285
|
-
key: "milestones",
|
|
286
|
-
label: "Milestones"
|
|
287
|
-
},
|
|
288
|
-
{
|
|
289
|
-
key: "team",
|
|
290
|
-
label: "Team"
|
|
291
|
-
}
|
|
292
|
-
].map(({ key: e, label: t }) => /* @__PURE__ */ _("button", {
|
|
293
|
-
onClick: () => I(e),
|
|
294
|
-
className: `border-b-2 px-4 py-2 text-sm font-medium transition-colors ${F === e ? "border-primary text-primary" : "border-transparent text-text-secondary hover:text-text-primary"}`,
|
|
295
|
-
children: t
|
|
296
|
-
}, e))
|
|
297
|
-
}),
|
|
298
|
-
F === "overview" && /* @__PURE__ */ v("div", {
|
|
299
|
-
className: "grid gap-4 sm:grid-cols-2",
|
|
300
|
-
children: [/* @__PURE__ */ v(x, { children: [/* @__PURE__ */ _(C, { children: /* @__PURE__ */ v(w, {
|
|
301
|
-
className: "text-base flex items-center gap-2",
|
|
302
|
-
children: [/* @__PURE__ */ _(l, { className: "h-4 w-4" }), " Budget Overview"]
|
|
303
|
-
}) }), /* @__PURE__ */ v(S, {
|
|
304
|
-
className: "space-y-3",
|
|
305
|
-
children: [
|
|
306
|
-
/* @__PURE__ */ v("div", {
|
|
307
|
-
className: "flex justify-between text-sm",
|
|
308
|
-
children: [/* @__PURE__ */ _("span", {
|
|
309
|
-
className: "text-text-secondary",
|
|
310
|
-
children: "Total Budget"
|
|
311
|
-
}), /* @__PURE__ */ v("span", {
|
|
312
|
-
className: "font-medium",
|
|
313
|
-
children: ["$", R.budget.toLocaleString()]
|
|
314
|
-
})]
|
|
315
|
-
}),
|
|
316
|
-
/* @__PURE__ */ v("div", {
|
|
317
|
-
className: "flex justify-between text-sm",
|
|
318
|
-
children: [/* @__PURE__ */ _("span", {
|
|
319
|
-
className: "text-text-secondary",
|
|
320
|
-
children: "Spent"
|
|
321
|
-
}), /* @__PURE__ */ v("span", {
|
|
322
|
-
className: "font-medium",
|
|
323
|
-
children: ["$", R.spent.toLocaleString()]
|
|
324
|
-
})]
|
|
325
|
-
}),
|
|
326
|
-
/* @__PURE__ */ v("div", {
|
|
327
|
-
className: "flex justify-between text-sm",
|
|
328
|
-
children: [/* @__PURE__ */ _("span", {
|
|
329
|
-
className: "text-text-secondary",
|
|
330
|
-
children: "Remaining"
|
|
331
|
-
}), /* @__PURE__ */ v("span", {
|
|
332
|
-
className: "font-medium text-green-600",
|
|
333
|
-
children: ["$", (R.budget - R.spent).toLocaleString()]
|
|
334
|
-
})]
|
|
335
|
-
}),
|
|
336
|
-
/* @__PURE__ */ _("div", {
|
|
337
|
-
className: "h-2 overflow-hidden rounded-full bg-bg-sunken",
|
|
338
|
-
children: /* @__PURE__ */ _("div", {
|
|
339
|
-
className: "h-2 rounded-full bg-action-primary-bg",
|
|
340
|
-
style: { width: `${Math.round(R.spent / R.budget * 100)}%` }
|
|
341
|
-
})
|
|
342
|
-
})
|
|
343
|
-
]
|
|
344
|
-
})] }), /* @__PURE__ */ v(x, { children: [/* @__PURE__ */ _(C, { children: /* @__PURE__ */ v(w, {
|
|
345
|
-
className: "text-base flex items-center gap-2",
|
|
346
|
-
children: [/* @__PURE__ */ _(i, { className: "h-4 w-4" }), " Milestone Summary"]
|
|
347
|
-
}) }), /* @__PURE__ */ _(S, {
|
|
348
|
-
className: "space-y-3",
|
|
349
|
-
children: [
|
|
350
|
-
"completed",
|
|
351
|
-
"in_progress",
|
|
352
|
-
"pending",
|
|
353
|
-
"overdue"
|
|
354
|
-
].map((e) => {
|
|
355
|
-
let t = R.milestones.filter((t) => t.status === e).length;
|
|
356
|
-
return /* @__PURE__ */ v("div", {
|
|
357
|
-
className: "flex items-center justify-between text-sm",
|
|
358
|
-
children: [/* @__PURE__ */ _("span", {
|
|
359
|
-
className: "text-text-secondary capitalize",
|
|
360
|
-
children: e.replace("_", " ")
|
|
361
|
-
}), /* @__PURE__ */ _("span", {
|
|
362
|
-
className: "font-medium",
|
|
363
|
-
children: t
|
|
364
|
-
})]
|
|
365
|
-
}, e);
|
|
366
|
-
})
|
|
367
|
-
})] })]
|
|
368
|
-
}),
|
|
369
|
-
F === "timeline" && /* @__PURE__ */ _(x, { children: /* @__PURE__ */ _(S, {
|
|
370
|
-
className: "pt-6",
|
|
371
|
-
children: /* @__PURE__ */ _("div", {
|
|
372
|
-
className: "relative space-y-0",
|
|
373
|
-
children: R.milestones.map((e, t) => /* @__PURE__ */ v("div", {
|
|
374
|
-
className: "relative flex gap-4 pb-8",
|
|
375
|
-
children: [
|
|
376
|
-
t !== R.milestones.length - 1 && /* @__PURE__ */ _("div", { className: "absolute left-[11px] top-6 h-full w-0.5 bg-bg-sunken" }),
|
|
377
|
-
/* @__PURE__ */ v("div", {
|
|
378
|
-
className: `relative z-10 mt-1 h-6 w-6 shrink-0 rounded-full ${{
|
|
379
|
-
completed: "bg-green-500",
|
|
380
|
-
in_progress: "bg-blue-500",
|
|
381
|
-
pending: "bg-gray-300",
|
|
382
|
-
overdue: "bg-red-500"
|
|
383
|
-
}[e.status]} flex items-center justify-center`,
|
|
384
|
-
children: [e.status === "completed" && /* @__PURE__ */ _(o, { className: "h-4 w-4 text-white" }), e.status === "in_progress" && /* @__PURE__ */ _(c, { className: "h-4 w-4 text-white" })]
|
|
385
|
-
}),
|
|
386
|
-
/* @__PURE__ */ v("div", {
|
|
387
|
-
className: "flex-1",
|
|
438
|
+
})]
|
|
439
|
+
}),
|
|
440
|
+
U === "timeline" && /* @__PURE__ */ _(S, {
|
|
441
|
+
className: "border-border-seam",
|
|
442
|
+
children: /* @__PURE__ */ _(C, {
|
|
443
|
+
className: "pt-6",
|
|
444
|
+
children: /* @__PURE__ */ _("div", {
|
|
445
|
+
className: "relative space-y-0",
|
|
446
|
+
children: K.milestones.map((e, t) => /* @__PURE__ */ v("div", {
|
|
447
|
+
className: "relative flex gap-4 pb-8",
|
|
388
448
|
children: [
|
|
449
|
+
t !== K.milestones.length - 1 && /* @__PURE__ */ _("div", { className: "absolute left-[11px] top-6 h-full w-0.5 bg-border-seam" }),
|
|
389
450
|
/* @__PURE__ */ v("div", {
|
|
390
|
-
className:
|
|
391
|
-
children: [/* @__PURE__ */ _("
|
|
392
|
-
className: "font-medium",
|
|
393
|
-
children: e.title
|
|
394
|
-
}), /* @__PURE__ */ _(y, {
|
|
395
|
-
variant: D[e.priority].variant,
|
|
396
|
-
className: "text-xs",
|
|
397
|
-
children: e.priority
|
|
398
|
-
})]
|
|
399
|
-
}),
|
|
400
|
-
/* @__PURE__ */ _("p", {
|
|
401
|
-
className: "mt-1 text-sm text-text-secondary",
|
|
402
|
-
children: e.description
|
|
451
|
+
className: `relative z-10 mt-1 h-6 w-6 shrink-0 rounded-full ${P[e.status]} flex items-center justify-center`,
|
|
452
|
+
children: [e.status === "completed" && /* @__PURE__ */ _(o, { className: "h-4 w-4 text-white" }), e.status === "in_progress" && /* @__PURE__ */ _(c, { className: "h-4 w-4 text-white" })]
|
|
403
453
|
}),
|
|
404
454
|
/* @__PURE__ */ v("div", {
|
|
405
|
-
className: "
|
|
406
|
-
children: [
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
/* @__PURE__ */ _(
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
455
|
+
className: "flex-1",
|
|
456
|
+
children: [
|
|
457
|
+
/* @__PURE__ */ v("div", {
|
|
458
|
+
className: "flex items-center gap-2",
|
|
459
|
+
children: [/* @__PURE__ */ _("h4", {
|
|
460
|
+
className: "font-medium",
|
|
461
|
+
children: e.title
|
|
462
|
+
}), /* @__PURE__ */ _(b, {
|
|
463
|
+
variant: N[e.priority].variant,
|
|
464
|
+
className: "text-xs",
|
|
465
|
+
children: e.priority
|
|
466
|
+
})]
|
|
467
|
+
}),
|
|
468
|
+
/* @__PURE__ */ _("p", {
|
|
469
|
+
className: "mt-1 text-sm text-text-secondary",
|
|
470
|
+
children: e.description
|
|
471
|
+
}),
|
|
472
|
+
/* @__PURE__ */ v("div", {
|
|
473
|
+
className: "mt-2 flex flex-wrap gap-3 text-xs text-text-secondary",
|
|
474
|
+
children: [/* @__PURE__ */ v("span", {
|
|
475
|
+
className: "flex items-center gap-1",
|
|
476
|
+
children: [
|
|
477
|
+
/* @__PURE__ */ _(a, { className: "h-3 w-3" }),
|
|
478
|
+
" Due: ",
|
|
479
|
+
e.dueDate
|
|
480
|
+
]
|
|
481
|
+
}), e.completedAt && /* @__PURE__ */ v("span", {
|
|
482
|
+
className: "flex items-center gap-1 text-status-success-text",
|
|
483
|
+
children: [
|
|
484
|
+
/* @__PURE__ */ _(o, { className: "h-3 w-3" }),
|
|
485
|
+
" Completed:",
|
|
486
|
+
" ",
|
|
487
|
+
e.completedAt
|
|
488
|
+
]
|
|
489
|
+
})]
|
|
490
|
+
})
|
|
491
|
+
]
|
|
422
492
|
})
|
|
423
493
|
]
|
|
424
|
-
})
|
|
425
|
-
|
|
426
|
-
}
|
|
427
|
-
})
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
pending: "text-gray-400",
|
|
444
|
-
overdue: "text-red-600"
|
|
445
|
-
}[e.status]}` }), /* @__PURE__ */ v("div", {
|
|
446
|
-
className: "flex-1",
|
|
447
|
-
children: [
|
|
448
|
-
/* @__PURE__ */ v("div", {
|
|
449
|
-
className: "flex items-center gap-2",
|
|
450
|
-
children: [/* @__PURE__ */ _("h4", {
|
|
451
|
-
className: "font-medium",
|
|
452
|
-
children: e.title
|
|
453
|
-
}), /* @__PURE__ */ _(y, {
|
|
454
|
-
variant: D[e.priority].variant,
|
|
455
|
-
className: "text-xs",
|
|
456
|
-
children: e.priority
|
|
457
|
-
})]
|
|
458
|
-
}),
|
|
459
|
-
/* @__PURE__ */ _("p", {
|
|
460
|
-
className: "mt-1 text-sm text-text-secondary",
|
|
461
|
-
children: e.description
|
|
462
|
-
}),
|
|
463
|
-
e.deliverables.length > 0 && /* @__PURE__ */ v("div", {
|
|
464
|
-
className: "mt-3",
|
|
465
|
-
children: [/* @__PURE__ */ _("p", {
|
|
466
|
-
className: "text-xs font-medium text-text-secondary",
|
|
467
|
-
children: "Deliverables"
|
|
468
|
-
}), /* @__PURE__ */ _("div", {
|
|
469
|
-
className: "mt-1 flex flex-wrap gap-1",
|
|
470
|
-
children: e.deliverables.map((e) => /* @__PURE__ */ _(y, {
|
|
471
|
-
variant: "outline",
|
|
472
|
-
className: "text-xs",
|
|
473
|
-
children: e
|
|
474
|
-
}, e))
|
|
475
|
-
})]
|
|
476
|
-
}),
|
|
477
|
-
/* @__PURE__ */ v("div", {
|
|
478
|
-
className: "mt-3 flex flex-wrap gap-4 text-xs text-text-secondary",
|
|
494
|
+
}, e.id))
|
|
495
|
+
})
|
|
496
|
+
})
|
|
497
|
+
}),
|
|
498
|
+
U === "milestones" && /* @__PURE__ */ _("div", {
|
|
499
|
+
className: "space-y-3",
|
|
500
|
+
children: K.milestones.map((e) => /* @__PURE__ */ _(S, {
|
|
501
|
+
className: "border-border-seam",
|
|
502
|
+
children: /* @__PURE__ */ _(C, {
|
|
503
|
+
className: "pt-4",
|
|
504
|
+
children: /* @__PURE__ */ v("div", {
|
|
505
|
+
className: "flex items-start gap-3",
|
|
506
|
+
children: [/* @__PURE__ */ _({
|
|
507
|
+
completed: o,
|
|
508
|
+
in_progress: c,
|
|
509
|
+
pending: m,
|
|
510
|
+
overdue: r
|
|
511
|
+
}[e.status] ?? m, { className: `mt-0.5 h-5 w-5 ${F[e.status]}` }), /* @__PURE__ */ v("div", {
|
|
512
|
+
className: "flex-1",
|
|
479
513
|
children: [
|
|
480
|
-
/* @__PURE__ */ v("
|
|
481
|
-
className: "flex items-center gap-
|
|
482
|
-
children: [
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
514
|
+
/* @__PURE__ */ v("div", {
|
|
515
|
+
className: "flex items-center gap-2",
|
|
516
|
+
children: [/* @__PURE__ */ _("h4", {
|
|
517
|
+
className: "font-medium",
|
|
518
|
+
children: e.title
|
|
519
|
+
}), /* @__PURE__ */ _(b, {
|
|
520
|
+
variant: N[e.priority].variant,
|
|
521
|
+
className: "text-xs",
|
|
522
|
+
children: e.priority
|
|
523
|
+
})]
|
|
487
524
|
}),
|
|
488
|
-
|
|
489
|
-
className: "
|
|
490
|
-
children:
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
525
|
+
/* @__PURE__ */ _("p", {
|
|
526
|
+
className: "mt-1 text-sm text-text-secondary",
|
|
527
|
+
children: e.description
|
|
528
|
+
}),
|
|
529
|
+
e.deliverables.length > 0 && /* @__PURE__ */ v("div", {
|
|
530
|
+
className: "mt-3",
|
|
531
|
+
children: [/* @__PURE__ */ _("p", {
|
|
532
|
+
className: "text-xs font-medium text-text-secondary",
|
|
533
|
+
children: "Deliverables"
|
|
534
|
+
}), /* @__PURE__ */ _("div", {
|
|
535
|
+
className: "mt-1 flex flex-wrap gap-1",
|
|
536
|
+
children: e.deliverables.map((e) => /* @__PURE__ */ _(b, {
|
|
537
|
+
variant: "outline",
|
|
538
|
+
className: "text-xs",
|
|
539
|
+
children: e
|
|
540
|
+
}, e))
|
|
541
|
+
})]
|
|
495
542
|
}),
|
|
496
|
-
|
|
497
|
-
className: "flex
|
|
543
|
+
/* @__PURE__ */ v("div", {
|
|
544
|
+
className: "mt-3 flex flex-wrap gap-4 text-xs text-text-secondary",
|
|
498
545
|
children: [
|
|
499
|
-
/* @__PURE__ */
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
546
|
+
/* @__PURE__ */ v("span", {
|
|
547
|
+
className: "flex items-center gap-1",
|
|
548
|
+
children: [
|
|
549
|
+
/* @__PURE__ */ _(a, { className: "h-3 w-3" }),
|
|
550
|
+
" Due: ",
|
|
551
|
+
e.dueDate
|
|
552
|
+
]
|
|
553
|
+
}),
|
|
554
|
+
e.completedAt && /* @__PURE__ */ v("span", {
|
|
555
|
+
className: "flex items-center gap-1 text-status-success-text",
|
|
556
|
+
children: [
|
|
557
|
+
/* @__PURE__ */ _(o, { className: "h-3 w-3" }),
|
|
558
|
+
" ",
|
|
559
|
+
e.completedAt
|
|
560
|
+
]
|
|
561
|
+
}),
|
|
562
|
+
e.dependencies.length > 0 && /* @__PURE__ */ v("span", {
|
|
563
|
+
className: "flex items-center gap-1",
|
|
564
|
+
children: [
|
|
565
|
+
/* @__PURE__ */ _(u, { className: "h-3 w-3" }),
|
|
566
|
+
/* @__PURE__ */ _("span", {
|
|
567
|
+
className: "tabular-nums",
|
|
568
|
+
children: e.dependencies.length
|
|
569
|
+
}),
|
|
570
|
+
" ",
|
|
571
|
+
"dependencies"
|
|
572
|
+
]
|
|
573
|
+
})
|
|
504
574
|
]
|
|
575
|
+
}),
|
|
576
|
+
e.notes && /* @__PURE__ */ _("p", {
|
|
577
|
+
className: "mt-2 rounded bg-bg-sunken p-2 text-xs text-text-secondary italic",
|
|
578
|
+
children: e.notes
|
|
505
579
|
})
|
|
506
580
|
]
|
|
507
|
-
})
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
581
|
+
})]
|
|
582
|
+
})
|
|
583
|
+
})
|
|
584
|
+
}, e.id))
|
|
585
|
+
}),
|
|
586
|
+
U === "team" && /* @__PURE__ */ v(S, {
|
|
587
|
+
className: "border-border-seam",
|
|
588
|
+
children: [/* @__PURE__ */ _(w, { children: /* @__PURE__ */ _(T, {
|
|
589
|
+
className: "text-base",
|
|
590
|
+
children: "Team Members"
|
|
591
|
+
}) }), /* @__PURE__ */ _(C, { children: /* @__PURE__ */ _("div", {
|
|
592
|
+
className: "space-y-3",
|
|
593
|
+
children: K.teamMembers.map((e, t) => /* @__PURE__ */ v("div", {
|
|
594
|
+
className: "flex items-center gap-3 rounded-lg border border-border-seam p-3",
|
|
595
|
+
children: [/* @__PURE__ */ _("div", {
|
|
596
|
+
className: "flex h-10 w-10 items-center justify-center rounded-full bg-accent-soft font-semibold text-text-primary",
|
|
597
|
+
children: e.name.charAt(0)
|
|
598
|
+
}), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
|
|
599
|
+
className: "font-medium",
|
|
600
|
+
children: e.name
|
|
601
|
+
}), /* @__PURE__ */ _("p", {
|
|
602
|
+
className: "text-sm text-text-secondary",
|
|
603
|
+
children: e.role
|
|
604
|
+
})] })]
|
|
605
|
+
}, t))
|
|
606
|
+
}) })]
|
|
607
|
+
})
|
|
608
|
+
] }) : /* @__PURE__ */ _(S, {
|
|
609
|
+
className: "border-border-seam",
|
|
610
|
+
children: /* @__PURE__ */ _(C, {
|
|
611
|
+
className: "py-6",
|
|
612
|
+
children: /* @__PURE__ */ _(O, {
|
|
613
|
+
illustration: "onboarding",
|
|
614
|
+
title: "Select a project",
|
|
615
|
+
description: "Pick a project from the sidebar to view its details."
|
|
514
616
|
})
|
|
515
|
-
})
|
|
516
|
-
})
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
}) }), /* @__PURE__ */ _(S, { children: /* @__PURE__ */ _("div", {
|
|
521
|
-
className: "space-y-3",
|
|
522
|
-
children: R.teamMembers.map((e, t) => /* @__PURE__ */ v("div", {
|
|
523
|
-
className: "flex items-center gap-3 rounded-lg border p-3",
|
|
524
|
-
children: [/* @__PURE__ */ _("div", {
|
|
525
|
-
className: "flex h-10 w-10 items-center justify-center rounded-full bg-action-primary-bg/10 font-semibold text-primary",
|
|
526
|
-
children: e.name.charAt(0)
|
|
527
|
-
}), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
|
|
528
|
-
className: "font-medium",
|
|
529
|
-
children: e.name
|
|
530
|
-
}), /* @__PURE__ */ _("p", {
|
|
531
|
-
className: "text-sm text-text-secondary",
|
|
532
|
-
children: e.role
|
|
533
|
-
})] })]
|
|
534
|
-
}, t))
|
|
535
|
-
}) })] })
|
|
536
|
-
] }) : /* @__PURE__ */ _(x, { children: /* @__PURE__ */ _(S, {
|
|
537
|
-
className: "py-12 text-center text-text-secondary",
|
|
538
|
-
children: "Select a project from the sidebar to view details."
|
|
539
|
-
}) })
|
|
540
|
-
})]
|
|
541
|
-
})]
|
|
617
|
+
})
|
|
618
|
+
})
|
|
619
|
+
})]
|
|
620
|
+
})
|
|
621
|
+
]
|
|
542
622
|
});
|
|
543
623
|
}
|
|
544
624
|
//#endregion
|
|
545
|
-
export {
|
|
625
|
+
export { I as ProjectsPage };
|
|
546
626
|
|
|
547
627
|
//# sourceMappingURL=ProjectsPage.js.map
|