@burdenoff/microfe-workspaces 2026.625.1 → 2026.625.2

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