@burdenoff/microfe-workspaces 2026.627.1 → 2026.711.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/components/ProjectCard.js +174 -155
- package/dist/components/ProjectCard.js.map +1 -1
- package/dist/components/RenameProjectDialog.js +82 -0
- package/dist/components/RenameProjectDialog.js.map +1 -0
- package/dist/generated/wspace-operations.js +11 -0
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/pages/ProjectDetailPage.js +244 -226
- package/dist/pages/ProjectDetailPage.js.map +1 -1
- package/dist/pages/ProjectsListPage.js +16 -15
- package/dist/pages/ProjectsListPage.js.map +1 -1
- package/dist/pages/dashboard/DashboardGrid.js +60 -48
- package/dist/pages/dashboard/DashboardGrid.js.map +1 -1
- package/dist/pages/dashboard/DashboardPage.js +107 -82
- package/dist/pages/dashboard/DashboardPage.js.map +1 -1
- package/dist/pages/dashboard/WidgetWrapper.js +2 -2
- package/dist/pages/dashboard/WidgetWrapper.js.map +1 -1
- package/dist/pages/dashboard/config.js +82 -0
- package/dist/pages/dashboard/config.js.map +1 -1
- package/dist/pages/dashboard/widgets/QuickActionsWidget.js +66 -23
- package/dist/pages/dashboard/widgets/QuickActionsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/TipsWidget.js +68 -30
- package/dist/pages/dashboard/widgets/TipsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/WorkflowRunsWidget.js +139 -0
- package/dist/pages/dashboard/widgets/WorkflowRunsWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/WorkflowsOverviewWidget.js +91 -0
- package/dist/pages/dashboard/widgets/WorkflowsOverviewWidget.js.map +1 -0
- package/package.json +1 -1
|
@@ -9,89 +9,90 @@ import { useProject as ie, useProjectMembersCount as ae } from "../hooks/useProj
|
|
|
9
9
|
import { useArchiveProject as oe, useDeleteProject as se, useTagProject as ce, useUnarchiveProject as le, useUntagProject as ue, useUpdateProject as de } from "../hooks/useProjectMutations.js";
|
|
10
10
|
import { formatDate as i } from "../utils/formatters.js";
|
|
11
11
|
import { getProjectDisplayTags as fe, toProjectTag as a } from "../utils/projectTags.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
12
|
+
import { RenameProjectDialog as pe } from "../components/RenameProjectDialog.js";
|
|
13
|
+
import { useWorkspaceActivity as me } from "../hooks/useWorkspaceActivity.js";
|
|
14
|
+
import { ProjectTagsWidget as he } from "../components/tags/ProjectTagsWidget.js";
|
|
14
15
|
import { ProjectMemberPickerDialog as o } from "../components/ProjectMemberPickerDialog.js";
|
|
15
|
-
import { useMemo as
|
|
16
|
-
import { Activity as
|
|
17
|
-
import { jsx as
|
|
18
|
-
import { AlertDialog as
|
|
19
|
-
import { useNavigate as
|
|
20
|
-
import { useI18n as
|
|
16
|
+
import { useMemo as ge, useState as s } from "react";
|
|
17
|
+
import { Activity as c, Archive as l, ArrowLeft as u, Clock as d, FolderKanban as f, MoreVertical as _e, Pencil as ve, UserPlus as p, Users as m } from "lucide-react";
|
|
18
|
+
import { jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
19
|
+
import { AlertDialog as ye, AlertDialogAction as be, AlertDialogCancel as xe, AlertDialogContent as Se, AlertDialogDescription as Ce, AlertDialogFooter as we, AlertDialogHeader as Te, AlertDialogTitle as Ee, Badge as _, Button as v, CardContent as y, CardHeader as b, CardTitle as x, DropdownMenu as De, DropdownMenuContent as Oe, DropdownMenuItem as S, DropdownMenuSeparator as C, DropdownMenuTrigger as w, EntityIdModal as T, GlassCard as E, IllustratedEmptyState as ke, NextSteps as Ae, PagePurpose as je, ShowMore as Me, Skeleton as D, useEntityIdModal as Ne } from "@burdenoff/fe-libs/ui";
|
|
20
|
+
import { useNavigate as Pe, useParams as O } from "react-router-dom";
|
|
21
|
+
import { useI18n as Fe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
21
22
|
//#region src/pages/ProjectDetailPage.tsx
|
|
22
|
-
function
|
|
23
|
-
let { t:
|
|
23
|
+
function k() {
|
|
24
|
+
let { t: k } = Fe(), A = Ne(), { workspaceId: j, projectId: M } = O();
|
|
24
25
|
te("workspaces.project-detail", {
|
|
25
|
-
workspaceId:
|
|
26
|
-
projectId:
|
|
26
|
+
workspaceId: j,
|
|
27
|
+
projectId: M,
|
|
27
28
|
requireParams: !0
|
|
28
29
|
});
|
|
29
|
-
let
|
|
30
|
-
tags:
|
|
31
|
-
tagAssignments:
|
|
32
|
-
}), [
|
|
33
|
-
if (
|
|
30
|
+
let N = Pe(), { basePath: P = "/workspaces" } = e(), { withCurrentSearch: F } = ee(), { data: I, isLoading: Ie, error: Le } = ie(M || "", j), [Re, L] = s(!1), [R, z] = s(!1), [B, V] = s(!1), { mutate: ze, isPending: H } = oe(j), { mutate: Be, isPending: U } = le(j), { mutate: Ve, isPending: W } = se(j), { mutateAsync: He, isPending: Ue } = ce(j), { mutateAsync: We, isPending: Ge } = ue(j), { mutateAsync: Ke, isPending: qe } = de(j), { canViewProject: Je, canUpdateProject: G, canDeleteProject: K, canArchiveProject: q, canListProjectMembers: J, canAddProjectMember: Y, isLoading: Ye } = re(), { data: Xe } = ae(M || "", j), X = ge(() => fe({
|
|
31
|
+
tags: I?.tags ?? [],
|
|
32
|
+
tagAssignments: I?.tagAssignments
|
|
33
|
+
}), [I?.tags, I?.tagAssignments]), { data: Ze } = me(j), Qe = (Ze ?? []).filter((e) => e.resourceId === M || e.resourceType?.toLowerCase() === "project").length, $e = X;
|
|
34
|
+
if (Ye) return /* @__PURE__ */ g("div", {
|
|
34
35
|
className: "space-y-4 p-6",
|
|
35
|
-
children: [/* @__PURE__ */
|
|
36
|
+
children: [/* @__PURE__ */ h(D, { className: "h-10 w-1/3" }), /* @__PURE__ */ h(D, { className: "h-64" })]
|
|
36
37
|
});
|
|
37
|
-
if (!
|
|
38
|
+
if (!Je) return /* @__PURE__ */ h("div", {
|
|
38
39
|
className: "flex items-center justify-center min-h-[400px]",
|
|
39
|
-
children: /* @__PURE__ */
|
|
40
|
+
children: /* @__PURE__ */ g("div", {
|
|
40
41
|
className: "text-center space-y-2",
|
|
41
|
-
children: [/* @__PURE__ */
|
|
42
|
+
children: [/* @__PURE__ */ h("h2", {
|
|
42
43
|
className: "text-lg font-semibold",
|
|
43
|
-
children: n(
|
|
44
|
-
}), /* @__PURE__ */
|
|
44
|
+
children: n(k, "projectDetail.accessDenied", "Access Denied")
|
|
45
|
+
}), /* @__PURE__ */ h("p", {
|
|
45
46
|
className: "text-sm text-text-secondary",
|
|
46
|
-
children: n(
|
|
47
|
+
children: n(k, "projectDetail.noPermissionToViewProject", "You don't have permission to view this project.")
|
|
47
48
|
})]
|
|
48
49
|
})
|
|
49
50
|
});
|
|
50
51
|
let Z = () => {
|
|
51
|
-
|
|
52
|
-
},
|
|
53
|
-
|
|
52
|
+
N(F(`${P}/${j}/projects`));
|
|
53
|
+
}, et = () => {
|
|
54
|
+
I && (I.archived ? Be(I.id, { onError: (e) => {
|
|
54
55
|
console.error("Failed to unarchive project:", e);
|
|
55
|
-
} }) :
|
|
56
|
+
} }) : ze(I.id, { onError: (e) => {
|
|
56
57
|
console.error("Failed to archive project:", e);
|
|
57
58
|
} }));
|
|
58
|
-
},
|
|
59
|
-
|
|
59
|
+
}, tt = () => {
|
|
60
|
+
I && (ne("medium"), Ve(I.id, {
|
|
60
61
|
onSuccess: () => {
|
|
61
|
-
r("success"),
|
|
62
|
+
r("success"), L(!1), N(F(`${P}/${j}/projects`));
|
|
62
63
|
},
|
|
63
64
|
onError: (e) => {
|
|
64
65
|
r("error"), console.error("Failed to delete project:", e);
|
|
65
66
|
}
|
|
66
67
|
}));
|
|
67
68
|
}, Q = () => {
|
|
68
|
-
|
|
69
|
+
N(F(`${P}/${j}/projects/${M}/members`));
|
|
69
70
|
}, $ = async (e) => {
|
|
70
|
-
if (!
|
|
71
|
+
if (!I) return;
|
|
71
72
|
let t = e.map((e) => a(e));
|
|
72
73
|
try {
|
|
73
|
-
await
|
|
74
|
-
id:
|
|
74
|
+
await Ke({
|
|
75
|
+
id: I.id,
|
|
75
76
|
input: { tags: t }
|
|
76
77
|
});
|
|
77
78
|
} catch (e) {
|
|
78
79
|
r("warning"), console.error("Failed to sync legacy project tag mirror after updating structured project tags:", e);
|
|
79
80
|
}
|
|
80
|
-
},
|
|
81
|
-
if (
|
|
82
|
-
await
|
|
83
|
-
entityId:
|
|
81
|
+
}, nt = async (e) => {
|
|
82
|
+
if (I) try {
|
|
83
|
+
await He({
|
|
84
|
+
entityId: I.id,
|
|
84
85
|
tagId: e.id
|
|
85
86
|
}), await $([...X, a(e)]);
|
|
86
87
|
} catch (e) {
|
|
87
88
|
throw r("error"), e;
|
|
88
89
|
}
|
|
89
|
-
},
|
|
90
|
-
if (!
|
|
91
|
-
let t =
|
|
90
|
+
}, rt = async (e) => {
|
|
91
|
+
if (!I) return;
|
|
92
|
+
let t = I.tagAssignments?.find((t) => t.tagId === e)?.id;
|
|
92
93
|
try {
|
|
93
|
-
await
|
|
94
|
-
entityId:
|
|
94
|
+
await We({
|
|
95
|
+
entityId: I.id,
|
|
95
96
|
tagId: e,
|
|
96
97
|
assignmentId: t
|
|
97
98
|
}), await $(X.filter((t) => t.tagId !== e && t.id !== e));
|
|
@@ -99,129 +100,137 @@ function M() {
|
|
|
99
100
|
throw r("error"), e;
|
|
100
101
|
}
|
|
101
102
|
};
|
|
102
|
-
return
|
|
103
|
+
return Ie ? /* @__PURE__ */ g("div", {
|
|
103
104
|
className: "space-y-4 sm:space-y-6 p-3 sm:p-6",
|
|
104
105
|
children: [
|
|
105
|
-
/* @__PURE__ */
|
|
106
|
-
/* @__PURE__ */
|
|
107
|
-
/* @__PURE__ */
|
|
106
|
+
/* @__PURE__ */ h(D, { className: "h-10 w-32" }),
|
|
107
|
+
/* @__PURE__ */ h(D, { className: "h-10 w-1/3" }),
|
|
108
|
+
/* @__PURE__ */ g("div", {
|
|
108
109
|
className: "grid grid-cols-1 md:grid-cols-3 gap-4",
|
|
109
110
|
children: [
|
|
110
|
-
/* @__PURE__ */
|
|
111
|
-
/* @__PURE__ */
|
|
112
|
-
/* @__PURE__ */
|
|
111
|
+
/* @__PURE__ */ h(D, { className: "h-32" }),
|
|
112
|
+
/* @__PURE__ */ h(D, { className: "h-32" }),
|
|
113
|
+
/* @__PURE__ */ h(D, { className: "h-32" })
|
|
113
114
|
]
|
|
114
115
|
}),
|
|
115
|
-
/* @__PURE__ */
|
|
116
|
+
/* @__PURE__ */ h(D, { className: "h-48" })
|
|
116
117
|
]
|
|
117
|
-
}) :
|
|
118
|
+
}) : Le || !I ? /* @__PURE__ */ g("div", {
|
|
118
119
|
className: "space-y-4 p-6",
|
|
119
|
-
children: [/* @__PURE__ */
|
|
120
|
+
children: [/* @__PURE__ */ g(v, {
|
|
120
121
|
variant: "ghost",
|
|
121
122
|
onClick: Z,
|
|
122
123
|
className: "gap-2",
|
|
123
|
-
children: [/* @__PURE__ */
|
|
124
|
-
}), /* @__PURE__ */
|
|
124
|
+
children: [/* @__PURE__ */ h(u, { size: 20 }), n(k, "projectDetail.backToProjects", "Back to Projects")]
|
|
125
|
+
}), /* @__PURE__ */ h(ke, {
|
|
125
126
|
illustration: "empty-search",
|
|
126
|
-
title: n(
|
|
127
|
-
description: n(
|
|
128
|
-
action: /* @__PURE__ */
|
|
127
|
+
title: n(k, "projectDetail.projectNotFound", "Project not found"),
|
|
128
|
+
description: n(k, "projectDetail.projectNotFoundDescription", "The project you're looking for doesn't exist or you don't have permission to view it."),
|
|
129
|
+
action: /* @__PURE__ */ g(v, {
|
|
129
130
|
onClick: Z,
|
|
130
|
-
children: [/* @__PURE__ */
|
|
131
|
+
children: [/* @__PURE__ */ h(u, {
|
|
131
132
|
size: 16,
|
|
132
133
|
className: "mr-2"
|
|
133
|
-
}), n(
|
|
134
|
+
}), n(k, "projectDetail.backToProjects", "Back to Projects")]
|
|
134
135
|
})
|
|
135
136
|
})]
|
|
136
|
-
}) : /* @__PURE__ */
|
|
137
|
+
}) : /* @__PURE__ */ g("div", {
|
|
137
138
|
className: "space-y-4 sm:space-y-6 p-3 sm:p-6",
|
|
138
139
|
children: [
|
|
139
|
-
/* @__PURE__ */
|
|
140
|
+
/* @__PURE__ */ g("div", {
|
|
140
141
|
className: "flex flex-col sm:flex-row sm:items-start sm:justify-between gap-3",
|
|
141
|
-
children: [/* @__PURE__ */
|
|
142
|
-
/* @__PURE__ */
|
|
142
|
+
children: [/* @__PURE__ */ g("div", { children: [
|
|
143
|
+
/* @__PURE__ */ g(v, {
|
|
143
144
|
variant: "ghost",
|
|
144
145
|
onClick: Z,
|
|
145
146
|
className: "gap-2 mb-2 -ml-2",
|
|
146
|
-
children: [/* @__PURE__ */
|
|
147
|
+
children: [/* @__PURE__ */ h(u, { size: 20 }), n(k, "projectDetail.backToProjects", "Back to Projects")]
|
|
147
148
|
}),
|
|
148
|
-
/* @__PURE__ */
|
|
149
|
+
/* @__PURE__ */ g("div", {
|
|
149
150
|
className: "flex items-center gap-3",
|
|
150
|
-
children: [/* @__PURE__ */
|
|
151
|
+
children: [/* @__PURE__ */ h("div", {
|
|
151
152
|
className: "p-3 rounded-lg bg-action-primary-bg/10",
|
|
152
|
-
children: /* @__PURE__ */
|
|
153
|
+
children: /* @__PURE__ */ h(f, {
|
|
153
154
|
className: "text-primary",
|
|
154
155
|
size: 28
|
|
155
156
|
})
|
|
156
|
-
}), /* @__PURE__ */
|
|
157
|
+
}), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("h1", {
|
|
157
158
|
className: "text-2xl sm:text-3xl font-bold",
|
|
158
|
-
children:
|
|
159
|
-
}), /* @__PURE__ */
|
|
159
|
+
children: I.name
|
|
160
|
+
}), /* @__PURE__ */ h("p", {
|
|
160
161
|
className: "text-sm text-text-secondary font-mono",
|
|
161
|
-
children:
|
|
162
|
+
children: I.key
|
|
162
163
|
})] })]
|
|
163
164
|
}),
|
|
164
|
-
/* @__PURE__ */
|
|
165
|
+
/* @__PURE__ */ g("div", {
|
|
165
166
|
className: "flex items-center gap-2 mt-3",
|
|
166
|
-
children: [/* @__PURE__ */
|
|
167
|
-
className: `border ${t(
|
|
168
|
-
children:
|
|
169
|
-
}),
|
|
167
|
+
children: [/* @__PURE__ */ h(_, {
|
|
168
|
+
className: `border ${t(I.status)}`,
|
|
169
|
+
children: I.status
|
|
170
|
+
}), I.archived && /* @__PURE__ */ g(_, {
|
|
170
171
|
variant: "outline",
|
|
171
172
|
className: "border-workspace-archived-border text-workspace-archived-text",
|
|
172
|
-
children: [/* @__PURE__ */
|
|
173
|
+
children: [/* @__PURE__ */ h(l, {
|
|
173
174
|
size: 12,
|
|
174
175
|
className: "mr-1"
|
|
175
|
-
}), n(
|
|
176
|
+
}), n(k, "projectDetail.archived", "Archived")]
|
|
176
177
|
})]
|
|
177
178
|
})
|
|
178
|
-
] }), /* @__PURE__ */
|
|
179
|
+
] }), /* @__PURE__ */ h("div", {
|
|
179
180
|
className: "flex items-center gap-2",
|
|
180
|
-
children: /* @__PURE__ */
|
|
181
|
+
children: /* @__PURE__ */ g(De, { children: [/* @__PURE__ */ h(w, {
|
|
181
182
|
asChild: !0,
|
|
182
|
-
children: /* @__PURE__ */
|
|
183
|
+
children: /* @__PURE__ */ h(v, {
|
|
183
184
|
variant: "outline",
|
|
184
185
|
size: "icon",
|
|
185
|
-
"aria-label": n(
|
|
186
|
-
children: /* @__PURE__ */
|
|
186
|
+
"aria-label": n(k, "projectDetail.openProjectActionsAriaLabel", "Open project actions"),
|
|
187
|
+
children: /* @__PURE__ */ h(_e, { size: 20 })
|
|
187
188
|
})
|
|
188
|
-
}), /* @__PURE__ */
|
|
189
|
+
}), /* @__PURE__ */ g(Oe, {
|
|
189
190
|
align: "end",
|
|
190
191
|
children: [
|
|
191
|
-
|
|
192
|
-
onClick:
|
|
193
|
-
|
|
194
|
-
children: [/* @__PURE__ */ g(u, {
|
|
192
|
+
G && /* @__PURE__ */ g(S, {
|
|
193
|
+
onClick: () => V(!0),
|
|
194
|
+
children: [/* @__PURE__ */ h(ve, {
|
|
195
195
|
size: 16,
|
|
196
196
|
className: "mr-2"
|
|
197
|
-
}),
|
|
197
|
+
}), n(k, "projectDetail.renameProject", "Rename Project")]
|
|
198
198
|
}),
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
onClick:
|
|
199
|
+
G && (q || K) && /* @__PURE__ */ h(C, {}),
|
|
200
|
+
q && /* @__PURE__ */ g(S, {
|
|
201
|
+
onClick: et,
|
|
202
|
+
disabled: H || U,
|
|
203
|
+
children: [/* @__PURE__ */ h(l, {
|
|
204
|
+
size: 16,
|
|
205
|
+
className: "mr-2"
|
|
206
|
+
}), H || U ? n(k, "projectDetail.processing", "Processing...") : I.archived ? n(k, "projectDetail.unarchive", "Unarchive") : n(k, "projectDetail.archive", "Archive")]
|
|
207
|
+
}),
|
|
208
|
+
q && K && /* @__PURE__ */ h(C, {}),
|
|
209
|
+
K && /* @__PURE__ */ h(S, {
|
|
210
|
+
onClick: () => L(!0),
|
|
202
211
|
className: "text-status-error-text",
|
|
203
|
-
children: n(
|
|
212
|
+
children: n(k, "projectDetail.deleteProject", "Delete Project")
|
|
204
213
|
})
|
|
205
214
|
]
|
|
206
215
|
})] })
|
|
207
216
|
})]
|
|
208
217
|
}),
|
|
209
|
-
/* @__PURE__ */
|
|
210
|
-
/* @__PURE__ */
|
|
218
|
+
/* @__PURE__ */ h(je, { children: n(k, "projectDetail.purpose", "This is a single project — a focused stream of work within its workspace. From here you can manage the people working on it, organise it with tags so it surfaces in filters and reports, and keep track of related activity. Use the menu in the top-right to archive or delete it when it wraps up.") }),
|
|
219
|
+
/* @__PURE__ */ h(Ae, {
|
|
211
220
|
storageKey: "workspaces-project-detail",
|
|
212
221
|
steps: [
|
|
213
222
|
...Y ? [{
|
|
214
223
|
id: "add-member",
|
|
215
|
-
label: n(
|
|
216
|
-
description: n(
|
|
217
|
-
icon: /* @__PURE__ */
|
|
218
|
-
onClick: () =>
|
|
224
|
+
label: n(k, "projectDetail.stepAddMember", "Add people to the project"),
|
|
225
|
+
description: n(k, "projectDetail.stepAddMemberDesc", "Pull in the teammates who will actually work on this project."),
|
|
226
|
+
icon: /* @__PURE__ */ h(p, { size: 16 }),
|
|
227
|
+
onClick: () => z(!0)
|
|
219
228
|
}] : [],
|
|
220
229
|
{
|
|
221
230
|
id: "tag-project",
|
|
222
|
-
label: n(
|
|
223
|
-
description: n(
|
|
224
|
-
icon: /* @__PURE__ */
|
|
231
|
+
label: n(k, "projectDetail.stepTag", "Tag the project"),
|
|
232
|
+
description: n(k, "projectDetail.stepTagDesc", "Add tags so this project shows up in the right filters and views."),
|
|
233
|
+
icon: /* @__PURE__ */ h(f, { size: 16 }),
|
|
225
234
|
onClick: () => {
|
|
226
235
|
document.getElementById("project-tags-section")?.scrollIntoView({
|
|
227
236
|
behavior: "smooth",
|
|
@@ -231,231 +240,231 @@ function M() {
|
|
|
231
240
|
},
|
|
232
241
|
...J ? [{
|
|
233
242
|
id: "manage-members",
|
|
234
|
-
label: n(
|
|
235
|
-
description: n(
|
|
236
|
-
icon: /* @__PURE__ */
|
|
243
|
+
label: n(k, "projectDetail.stepManageMembers", "Review project members"),
|
|
244
|
+
description: n(k, "projectDetail.stepManageMembersDesc", "See who has access and adjust their project roles."),
|
|
245
|
+
icon: /* @__PURE__ */ h(m, { size: 16 }),
|
|
237
246
|
onClick: Q
|
|
238
247
|
}] : [],
|
|
239
248
|
{
|
|
240
249
|
id: "review-activity",
|
|
241
|
-
label: n(
|
|
242
|
-
description: n(
|
|
243
|
-
icon: /* @__PURE__ */
|
|
244
|
-
onClick: () =>
|
|
250
|
+
label: n(k, "projectDetail.stepActivity", "Check recent activity"),
|
|
251
|
+
description: n(k, "projectDetail.stepActivityDesc", "Catch up on what has changed across the workspace."),
|
|
252
|
+
icon: /* @__PURE__ */ h(c, { size: 16 }),
|
|
253
|
+
onClick: () => N(F(`${P}/${j}/activity`))
|
|
245
254
|
}
|
|
246
255
|
]
|
|
247
256
|
}),
|
|
248
|
-
/* @__PURE__ */
|
|
257
|
+
/* @__PURE__ */ g("div", {
|
|
249
258
|
className: "grid grid-cols-1 lg:grid-cols-3 gap-4 sm:gap-6",
|
|
250
|
-
children: [/* @__PURE__ */
|
|
259
|
+
children: [/* @__PURE__ */ g("div", {
|
|
251
260
|
className: "lg:col-span-2 space-y-4 sm:space-y-6",
|
|
252
|
-
children: [/* @__PURE__ */
|
|
261
|
+
children: [/* @__PURE__ */ g("div", {
|
|
253
262
|
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
|
254
|
-
children: [/* @__PURE__ */
|
|
263
|
+
children: [/* @__PURE__ */ g(E, {
|
|
255
264
|
treatment: "metric",
|
|
256
265
|
glow: !0,
|
|
257
|
-
children: [/* @__PURE__ */
|
|
266
|
+
children: [/* @__PURE__ */ h(b, {
|
|
258
267
|
className: "flex flex-row items-center justify-between pb-2",
|
|
259
|
-
children: /* @__PURE__ */
|
|
268
|
+
children: /* @__PURE__ */ g(x, {
|
|
260
269
|
className: "flex items-center gap-2 text-sm font-medium text-text-secondary",
|
|
261
|
-
children: [/* @__PURE__ */
|
|
270
|
+
children: [/* @__PURE__ */ h(m, {
|
|
262
271
|
size: 18,
|
|
263
272
|
className: "text-text-muted"
|
|
264
|
-
}), n(
|
|
273
|
+
}), n(k, "projectDetail.membersCardTitle", "Members")]
|
|
265
274
|
})
|
|
266
|
-
}), /* @__PURE__ */
|
|
275
|
+
}), /* @__PURE__ */ g(y, {
|
|
267
276
|
className: "space-y-4",
|
|
268
277
|
children: [
|
|
269
|
-
/* @__PURE__ */
|
|
278
|
+
/* @__PURE__ */ h("p", {
|
|
270
279
|
className: "text-3xl font-bold tabular-nums",
|
|
271
|
-
children:
|
|
280
|
+
children: Xe ?? 0
|
|
272
281
|
}),
|
|
273
|
-
/* @__PURE__ */
|
|
282
|
+
/* @__PURE__ */ h("p", {
|
|
274
283
|
className: "text-sm text-text-muted",
|
|
275
|
-
children: n(
|
|
284
|
+
children: n(k, "projectDetail.projectMembers", "Project members")
|
|
276
285
|
}),
|
|
277
|
-
Y || J ? /* @__PURE__ */
|
|
286
|
+
Y || J ? /* @__PURE__ */ g("div", {
|
|
278
287
|
className: "flex flex-wrap gap-2",
|
|
279
|
-
children: [Y ? /* @__PURE__ */
|
|
288
|
+
children: [Y ? /* @__PURE__ */ g(v, {
|
|
280
289
|
size: "sm",
|
|
281
|
-
onClick: () =>
|
|
282
|
-
children: [/* @__PURE__ */
|
|
290
|
+
onClick: () => z(!0),
|
|
291
|
+
children: [/* @__PURE__ */ h(p, {
|
|
283
292
|
size: 16,
|
|
284
293
|
className: "mr-2"
|
|
285
|
-
}), n(
|
|
286
|
-
}) : null, J ? /* @__PURE__ */
|
|
294
|
+
}), n(k, "projectDetail.addProjectMember", "Add Member")]
|
|
295
|
+
}) : null, J ? /* @__PURE__ */ g(v, {
|
|
287
296
|
variant: "outline",
|
|
288
297
|
size: "sm",
|
|
289
298
|
onClick: Q,
|
|
290
|
-
children: [/* @__PURE__ */
|
|
299
|
+
children: [/* @__PURE__ */ h(m, {
|
|
291
300
|
size: 16,
|
|
292
301
|
className: "mr-2"
|
|
293
|
-
}), n(
|
|
302
|
+
}), n(k, "projectDetail.manageProjectMembers", "Manage Members")]
|
|
294
303
|
}) : null]
|
|
295
304
|
}) : null
|
|
296
305
|
]
|
|
297
306
|
})]
|
|
298
|
-
}), /* @__PURE__ */
|
|
307
|
+
}), /* @__PURE__ */ g(E, {
|
|
299
308
|
treatment: "metric",
|
|
300
|
-
children: [/* @__PURE__ */
|
|
309
|
+
children: [/* @__PURE__ */ h(b, {
|
|
301
310
|
className: "flex flex-row items-center justify-between pb-2",
|
|
302
|
-
children: /* @__PURE__ */
|
|
311
|
+
children: /* @__PURE__ */ g(x, {
|
|
303
312
|
className: "flex items-center gap-2 text-sm font-medium text-text-secondary",
|
|
304
|
-
children: [/* @__PURE__ */
|
|
313
|
+
children: [/* @__PURE__ */ h(c, {
|
|
305
314
|
size: 18,
|
|
306
315
|
className: "text-text-muted"
|
|
307
|
-
}), n(
|
|
316
|
+
}), n(k, "projectDetail.activityCardTitle", "Activity")]
|
|
308
317
|
})
|
|
309
|
-
}), /* @__PURE__ */
|
|
318
|
+
}), /* @__PURE__ */ g(y, { children: [/* @__PURE__ */ h("p", {
|
|
310
319
|
className: "text-3xl font-bold tabular-nums",
|
|
311
|
-
children:
|
|
312
|
-
}), /* @__PURE__ */
|
|
320
|
+
children: Qe
|
|
321
|
+
}), /* @__PURE__ */ h("p", {
|
|
313
322
|
className: "text-sm text-text-muted",
|
|
314
|
-
children: n(
|
|
323
|
+
children: n(k, "projectDetail.recentActivityItems", "Recent activity items")
|
|
315
324
|
})] })]
|
|
316
325
|
})]
|
|
317
|
-
}), /* @__PURE__ */
|
|
326
|
+
}), /* @__PURE__ */ g(E, {
|
|
318
327
|
treatment: "plain",
|
|
319
328
|
id: "project-tags-section",
|
|
320
329
|
className: "border-border-seam",
|
|
321
|
-
children: [/* @__PURE__ */
|
|
330
|
+
children: [/* @__PURE__ */ h(b, { children: /* @__PURE__ */ h(x, { children: n(k, "projectDetail.tagsTitle", "Tags") }) }), /* @__PURE__ */ g(y, {
|
|
322
331
|
className: "space-y-3",
|
|
323
|
-
children: [/* @__PURE__ */
|
|
332
|
+
children: [/* @__PURE__ */ h("p", {
|
|
324
333
|
className: "text-sm text-text-muted",
|
|
325
|
-
children: n(
|
|
326
|
-
}), /* @__PURE__ */
|
|
334
|
+
children: n(k, "projectDetail.tagsDescription", "Use universal tags to classify and filter this project across the workspace.")
|
|
335
|
+
}), /* @__PURE__ */ h(he, {
|
|
327
336
|
entityType: "Project",
|
|
328
|
-
entityId:
|
|
329
|
-
workspaceId:
|
|
330
|
-
tags:
|
|
331
|
-
onAdd:
|
|
332
|
-
onRemove:
|
|
333
|
-
className:
|
|
337
|
+
entityId: I.id,
|
|
338
|
+
workspaceId: j,
|
|
339
|
+
tags: $e,
|
|
340
|
+
onAdd: nt,
|
|
341
|
+
onRemove: rt,
|
|
342
|
+
className: Ue || Ge || qe ? "pointer-events-none opacity-75" : void 0
|
|
334
343
|
})]
|
|
335
344
|
})]
|
|
336
345
|
})]
|
|
337
|
-
}), /* @__PURE__ */
|
|
346
|
+
}), /* @__PURE__ */ h("aside", {
|
|
338
347
|
className: "lg:sticky lg:top-6 lg:self-start",
|
|
339
|
-
children: /* @__PURE__ */
|
|
348
|
+
children: /* @__PURE__ */ g(E, {
|
|
340
349
|
treatment: "plain",
|
|
341
350
|
className: "border-border-seam",
|
|
342
|
-
children: [/* @__PURE__ */
|
|
351
|
+
children: [/* @__PURE__ */ h(b, { children: /* @__PURE__ */ h(x, { children: n(k, "projectDetail.projectInformation", "Project Information") }) }), /* @__PURE__ */ g(y, {
|
|
343
352
|
className: "space-y-4",
|
|
344
353
|
children: [
|
|
345
|
-
/* @__PURE__ */
|
|
354
|
+
/* @__PURE__ */ g("div", {
|
|
346
355
|
className: "grid grid-cols-1 gap-4 text-sm",
|
|
347
356
|
children: [
|
|
348
|
-
/* @__PURE__ */
|
|
357
|
+
/* @__PURE__ */ g("div", {
|
|
349
358
|
className: "space-y-1",
|
|
350
|
-
children: [/* @__PURE__ */
|
|
359
|
+
children: [/* @__PURE__ */ g("span", {
|
|
351
360
|
className: "text-text-muted flex items-center gap-2",
|
|
352
|
-
children: [/* @__PURE__ */
|
|
353
|
-
}), /* @__PURE__ */
|
|
361
|
+
children: [/* @__PURE__ */ h(f, { size: 14 }), n(k, "projectDetail.projectId", "Project ID")]
|
|
362
|
+
}), /* @__PURE__ */ h("button", {
|
|
354
363
|
type: "button",
|
|
355
|
-
onClick: () =>
|
|
356
|
-
id:
|
|
357
|
-
name:
|
|
364
|
+
onClick: () => A.show({
|
|
365
|
+
id: I.id,
|
|
366
|
+
name: I.name,
|
|
358
367
|
type: "Project",
|
|
359
|
-
details:
|
|
368
|
+
details: I.key ? [{
|
|
360
369
|
label: "Key",
|
|
361
|
-
value:
|
|
370
|
+
value: I.key
|
|
362
371
|
}] : void 0
|
|
363
372
|
}),
|
|
364
373
|
className: "inline-flex items-center gap-1.5 text-xs font-medium text-text-link hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] rounded",
|
|
365
|
-
children: n(
|
|
374
|
+
children: n(k, "projectDetail.getId", "Get ID")
|
|
366
375
|
})]
|
|
367
376
|
}),
|
|
368
|
-
/* @__PURE__ */
|
|
377
|
+
/* @__PURE__ */ g("div", {
|
|
369
378
|
className: "space-y-1",
|
|
370
|
-
children: [/* @__PURE__ */
|
|
379
|
+
children: [/* @__PURE__ */ g("span", {
|
|
371
380
|
className: "text-text-secondary flex items-center gap-2",
|
|
372
|
-
children: [/* @__PURE__ */
|
|
373
|
-
}), /* @__PURE__ */
|
|
381
|
+
children: [/* @__PURE__ */ h(f, { size: 14 }), n(k, "projectDetail.projectKey", "Project Key")]
|
|
382
|
+
}), /* @__PURE__ */ h("span", {
|
|
374
383
|
className: "font-medium",
|
|
375
|
-
children:
|
|
384
|
+
children: I.key
|
|
376
385
|
})]
|
|
377
386
|
}),
|
|
378
|
-
/* @__PURE__ */
|
|
387
|
+
/* @__PURE__ */ g("div", {
|
|
379
388
|
className: "space-y-1",
|
|
380
|
-
children: [/* @__PURE__ */
|
|
389
|
+
children: [/* @__PURE__ */ g("span", {
|
|
381
390
|
className: "text-text-secondary flex items-center gap-2",
|
|
382
|
-
children: [/* @__PURE__ */
|
|
383
|
-
}), /* @__PURE__ */
|
|
391
|
+
children: [/* @__PURE__ */ h(d, { size: 14 }), n(k, "projectDetail.created", "Created")]
|
|
392
|
+
}), /* @__PURE__ */ h("span", { children: i(I.createdAt) })]
|
|
384
393
|
}),
|
|
385
|
-
/* @__PURE__ */
|
|
394
|
+
/* @__PURE__ */ g("div", {
|
|
386
395
|
className: "space-y-1",
|
|
387
|
-
children: [/* @__PURE__ */
|
|
396
|
+
children: [/* @__PURE__ */ g("span", {
|
|
388
397
|
className: "text-text-secondary flex items-center gap-2",
|
|
389
|
-
children: [/* @__PURE__ */
|
|
390
|
-
}), /* @__PURE__ */
|
|
398
|
+
children: [/* @__PURE__ */ h(d, { size: 14 }), n(k, "projectDetail.lastUpdated", "Last Updated")]
|
|
399
|
+
}), /* @__PURE__ */ h("span", { children: i(I.updatedAt) })]
|
|
391
400
|
}),
|
|
392
|
-
/* @__PURE__ */
|
|
401
|
+
/* @__PURE__ */ g("div", {
|
|
393
402
|
className: "space-y-1",
|
|
394
|
-
children: [/* @__PURE__ */
|
|
403
|
+
children: [/* @__PURE__ */ g("span", {
|
|
395
404
|
className: "text-text-secondary flex items-center gap-2",
|
|
396
|
-
children: [/* @__PURE__ */
|
|
397
|
-
}), /* @__PURE__ */
|
|
405
|
+
children: [/* @__PURE__ */ h(m, { size: 14 }), n(k, "projectDetail.workspaceId", "Workspace ID")]
|
|
406
|
+
}), /* @__PURE__ */ h("span", {
|
|
398
407
|
className: "font-mono text-xs block",
|
|
399
|
-
children:
|
|
408
|
+
children: I.workspaceId
|
|
400
409
|
})]
|
|
401
410
|
}),
|
|
402
|
-
/* @__PURE__ */
|
|
411
|
+
/* @__PURE__ */ g("div", {
|
|
403
412
|
className: "space-y-1",
|
|
404
|
-
children: [/* @__PURE__ */
|
|
413
|
+
children: [/* @__PURE__ */ g("span", {
|
|
405
414
|
className: "text-text-secondary flex items-center gap-2",
|
|
406
|
-
children: [/* @__PURE__ */
|
|
407
|
-
}), /* @__PURE__ */
|
|
415
|
+
children: [/* @__PURE__ */ h(m, { size: 14 }), n(k, "projectDetail.creatorId", "Creator ID")]
|
|
416
|
+
}), /* @__PURE__ */ h("span", {
|
|
408
417
|
className: "font-mono text-xs block",
|
|
409
|
-
children:
|
|
418
|
+
children: I.creatorId
|
|
410
419
|
})]
|
|
411
420
|
})
|
|
412
421
|
]
|
|
413
422
|
}),
|
|
414
|
-
|
|
423
|
+
I.config && Object.keys(I.config).length > 0 && /* @__PURE__ */ g("div", {
|
|
415
424
|
className: "pt-4 border-t border-border-seam",
|
|
416
|
-
children: [/* @__PURE__ */
|
|
425
|
+
children: [/* @__PURE__ */ h("h4", {
|
|
417
426
|
className: "text-sm font-medium mb-2",
|
|
418
|
-
children: n(
|
|
419
|
-
}), /* @__PURE__ */
|
|
427
|
+
children: n(k, "projectDetail.configuration", "Configuration")
|
|
428
|
+
}), /* @__PURE__ */ h("pre", {
|
|
420
429
|
className: "text-xs bg-bg-sunken p-3 rounded-lg overflow-auto",
|
|
421
|
-
children: JSON.stringify(
|
|
430
|
+
children: JSON.stringify(I.config, null, 2)
|
|
422
431
|
})]
|
|
423
432
|
}),
|
|
424
|
-
/* @__PURE__ */
|
|
433
|
+
/* @__PURE__ */ h(Me, {
|
|
425
434
|
collapsedHeight: 0,
|
|
426
|
-
label: n(
|
|
427
|
-
children: /* @__PURE__ */
|
|
435
|
+
label: n(k, "projectDetail.quickActions", "Quick Actions"),
|
|
436
|
+
children: /* @__PURE__ */ g("div", {
|
|
428
437
|
className: "flex flex-col gap-2 pt-2",
|
|
429
438
|
children: [
|
|
430
|
-
J ? /* @__PURE__ */
|
|
439
|
+
J ? /* @__PURE__ */ g(v, {
|
|
431
440
|
variant: "outline",
|
|
432
441
|
size: "sm",
|
|
433
442
|
className: "justify-start",
|
|
434
443
|
onClick: Q,
|
|
435
|
-
children: [/* @__PURE__ */
|
|
444
|
+
children: [/* @__PURE__ */ h(m, {
|
|
436
445
|
size: 16,
|
|
437
446
|
className: "mr-2"
|
|
438
|
-
}), n(
|
|
447
|
+
}), n(k, "projectDetail.projectMembersPage", "Project Members")]
|
|
439
448
|
}) : null,
|
|
440
|
-
/* @__PURE__ */
|
|
449
|
+
/* @__PURE__ */ g(v, {
|
|
441
450
|
variant: "outline",
|
|
442
451
|
size: "sm",
|
|
443
452
|
className: "justify-start",
|
|
444
|
-
onClick: () =>
|
|
445
|
-
children: [/* @__PURE__ */
|
|
453
|
+
onClick: () => N(F(`${P}/${j}/members`)),
|
|
454
|
+
children: [/* @__PURE__ */ h(m, {
|
|
446
455
|
size: 16,
|
|
447
456
|
className: "mr-2"
|
|
448
|
-
}), n(
|
|
457
|
+
}), n(k, "projectDetail.workspaceMembers", "Workspace Members")]
|
|
449
458
|
}),
|
|
450
|
-
/* @__PURE__ */
|
|
459
|
+
/* @__PURE__ */ g(v, {
|
|
451
460
|
variant: "outline",
|
|
452
461
|
size: "sm",
|
|
453
462
|
className: "justify-start",
|
|
454
|
-
onClick: () =>
|
|
455
|
-
children: [/* @__PURE__ */
|
|
463
|
+
onClick: () => N(F(`${P}/${j}/activity`)),
|
|
464
|
+
children: [/* @__PURE__ */ h(c, {
|
|
456
465
|
size: 16,
|
|
457
466
|
className: "mr-2"
|
|
458
|
-
}), n(
|
|
467
|
+
}), n(k, "projectDetail.workspaceActivity", "Workspace Activity")]
|
|
459
468
|
})
|
|
460
469
|
]
|
|
461
470
|
})
|
|
@@ -465,31 +474,40 @@ function M() {
|
|
|
465
474
|
})
|
|
466
475
|
})]
|
|
467
476
|
}),
|
|
468
|
-
/* @__PURE__ */
|
|
469
|
-
open:
|
|
470
|
-
onOpenChange:
|
|
471
|
-
children: /* @__PURE__ */
|
|
472
|
-
disabled:
|
|
473
|
-
children: n(
|
|
474
|
-
}), /* @__PURE__ */
|
|
475
|
-
onClick:
|
|
476
|
-
disabled:
|
|
477
|
+
/* @__PURE__ */ h(ye, {
|
|
478
|
+
open: Re,
|
|
479
|
+
onOpenChange: L,
|
|
480
|
+
children: /* @__PURE__ */ g(Se, { children: [/* @__PURE__ */ g(Te, { children: [/* @__PURE__ */ h(Ee, { children: n(k, "projectDetail.deleteDialogTitle", "Delete Project") }), /* @__PURE__ */ h(Ce, { children: n(k, "projectDetail.deleteConfirmPrefix", "Are you sure you want to delete \"") + I.name + n(k, "projectDetail.deleteConfirmSuffix", "\"? This action cannot be undone and all project data will be permanently removed.") })] }), /* @__PURE__ */ g(we, { children: [/* @__PURE__ */ h(xe, {
|
|
481
|
+
disabled: W,
|
|
482
|
+
children: n(k, "projectDetail.cancel", "Cancel")
|
|
483
|
+
}), /* @__PURE__ */ h(be, {
|
|
484
|
+
onClick: tt,
|
|
485
|
+
disabled: W,
|
|
477
486
|
className: "bg-status-error-bg text-status-error-text hover:bg-status-error-bg/90",
|
|
478
|
-
children:
|
|
487
|
+
children: W ? n(k, "projectDetail.deleting", "Deleting...") : n(k, "projectDetail.deleteProject", "Delete Project")
|
|
479
488
|
})] })] })
|
|
480
489
|
}),
|
|
481
|
-
|
|
482
|
-
open:
|
|
483
|
-
onOpenChange:
|
|
484
|
-
workspaceId:
|
|
485
|
-
projectId:
|
|
486
|
-
projectName:
|
|
490
|
+
j && M && R ? /* @__PURE__ */ h(o, {
|
|
491
|
+
open: R,
|
|
492
|
+
onOpenChange: z,
|
|
493
|
+
workspaceId: j,
|
|
494
|
+
projectId: M,
|
|
495
|
+
projectName: I.name
|
|
487
496
|
}) : null,
|
|
488
|
-
/* @__PURE__ */
|
|
497
|
+
B && /* @__PURE__ */ h(pe, {
|
|
498
|
+
project: {
|
|
499
|
+
id: I.id,
|
|
500
|
+
name: I.name,
|
|
501
|
+
workspaceId: I.workspaceId
|
|
502
|
+
},
|
|
503
|
+
open: B,
|
|
504
|
+
onOpenChange: V
|
|
505
|
+
}),
|
|
506
|
+
/* @__PURE__ */ h(T, { control: A })
|
|
489
507
|
]
|
|
490
508
|
});
|
|
491
509
|
}
|
|
492
510
|
//#endregion
|
|
493
|
-
export {
|
|
511
|
+
export { k as ProjectDetailPage };
|
|
494
512
|
|
|
495
513
|
//# sourceMappingURL=ProjectDetailPage.js.map
|