@burdenoff/microfe-planmagnet 2026.924.2 → 2026.924.4
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/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoot.js +93 -142
- package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
- package/dist/planmagnet/admin/PlanMagnetAdminRoot.d.ts.map +1 -1
- package/dist/planmagnet/admin/PlanMagnetAdminRoot.js +150 -149
- package/dist/planmagnet/admin/PlanMagnetAdminRoot.js.map +1 -1
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +180 -172
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/DashboardDashboardPagePage.js +113 -116
- package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/planmagnet/pages/GoalsGoalsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/GoalsGoalsPagePage.js +59 -58
- package/dist/planmagnet/pages/GoalsGoalsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js +150 -149
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsEditProductPagePage.js +108 -107
- package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +93 -92
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.js +89 -87
- package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js +94 -93
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsReleasesPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsReleasesPagePage.js +57 -56
- package/dist/planmagnet/pages/ProductsReleasesPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js +82 -81
- package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js +72 -71
- package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js +38 -37
- package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js +72 -71
- package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsMilestonesPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js +47 -46
- package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +120 -119
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +131 -130
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +77 -75
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ReportsReportsPagePage.js +71 -70
- package/dist/planmagnet/pages/ReportsReportsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TeamTeamPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TeamTeamPagePage.js +58 -57
- package/dist/planmagnet/pages/TeamTeamPagePage.js.map +1 -1
- package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.js +81 -72
- package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.js.map +1 -1
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts +15 -0
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts.map +1 -0
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +302 -0
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js.map +1 -0
- package/dist/planmagnet/people/People.d.ts +20 -0
- package/dist/planmagnet/people/People.d.ts.map +1 -0
- package/dist/planmagnet/people/People.js +42 -0
- package/dist/planmagnet/people/People.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { PlanMagnetProvider as e, usePlanMagnet as t } from "../providers/PlanMagnetProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
2
|
+
import { PersonName as n } from "../people/People.js";
|
|
3
|
+
import { useTr as r } from "../../shared/hooks/useTr.js";
|
|
4
|
+
import { cn as i } from "../utils/cn.js";
|
|
5
|
+
import { useMemo as a, useState as o } from "react";
|
|
6
|
+
import { AlertCircle as s, Archive as c, FolderKanban as l, LayoutTemplate as u, Loader2 as d, Zap as f } from "lucide-react";
|
|
7
|
+
import { gql as p } from "@apollo/client";
|
|
8
|
+
import { useMutation as m, useQuery as h } from "@apollo/client/react";
|
|
9
|
+
import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
|
|
10
|
+
import { Badge as y, Button as b, Card as x, CardContent as S, CardHeader as C, CardTitle as w, Checkbox as T, Skeleton as E } from "@burdenoff/fe-libs/ui";
|
|
10
11
|
//#region src/planmagnet/admin/PlanMagnetAdminRoot.tsx
|
|
11
|
-
var
|
|
12
|
+
var D = p`
|
|
12
13
|
query AdminPlanmagnetProjects($workspaceId: ID!) {
|
|
13
14
|
planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {
|
|
14
15
|
items {
|
|
@@ -23,7 +24,7 @@ var E = f`
|
|
|
23
24
|
totalCount
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
|
-
`,
|
|
27
|
+
`, O = p`
|
|
27
28
|
query AdminPlanmagnetBoards($workspaceId: ID!) {
|
|
28
29
|
planmagnetBoards(workspaceId: $workspaceId, pagination: { first: 100 }) {
|
|
29
30
|
items {
|
|
@@ -35,7 +36,7 @@ var E = f`
|
|
|
35
36
|
totalCount
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
|
-
`,
|
|
39
|
+
`, k = p`
|
|
39
40
|
query AdminPlanmagnetAutomationRules($workspaceId: ID!) {
|
|
40
41
|
planmagnetAutomationRules(workspaceId: $workspaceId, pagination: { first: 100 }) {
|
|
41
42
|
items {
|
|
@@ -50,7 +51,7 @@ var E = f`
|
|
|
50
51
|
totalCount
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
|
-
`,
|
|
54
|
+
`, A = p`
|
|
54
55
|
mutation AdminArchiveProjectr($id: ID!) {
|
|
55
56
|
planmagnetUpdateProjectr(id: $id, input: { status: ARCHIVED }) {
|
|
56
57
|
id
|
|
@@ -58,7 +59,7 @@ var E = f`
|
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
`;
|
|
61
|
-
function
|
|
62
|
+
function j(e) {
|
|
62
63
|
switch (e) {
|
|
63
64
|
case "ACTIVE": return "success";
|
|
64
65
|
case "ARCHIVED": return "secondary";
|
|
@@ -69,7 +70,7 @@ function A(e) {
|
|
|
69
70
|
default: return "default";
|
|
70
71
|
}
|
|
71
72
|
}
|
|
72
|
-
function
|
|
73
|
+
function M(e) {
|
|
73
74
|
switch (e) {
|
|
74
75
|
case "ACTIVE": return "success";
|
|
75
76
|
case "PAUSED": return "warning";
|
|
@@ -78,7 +79,7 @@ function j(e) {
|
|
|
78
79
|
default: return "default";
|
|
79
80
|
}
|
|
80
81
|
}
|
|
81
|
-
function
|
|
82
|
+
function N(e) {
|
|
82
83
|
if (!e) return "—";
|
|
83
84
|
try {
|
|
84
85
|
return new Date(e).toLocaleDateString();
|
|
@@ -86,44 +87,44 @@ function M(e) {
|
|
|
86
87
|
return e;
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
|
-
function
|
|
90
|
+
function P(e) {
|
|
90
91
|
return e.toLowerCase().replace(/_/g, " ");
|
|
91
92
|
}
|
|
92
|
-
function
|
|
93
|
+
function F(e) {
|
|
93
94
|
return e.toLowerCase().replace(/_/g, " ");
|
|
94
95
|
}
|
|
95
|
-
function
|
|
96
|
-
let o = Math.min(100, Math.round(n / Math.max(1,
|
|
97
|
-
return /* @__PURE__ */
|
|
96
|
+
function I({ icon: e, label: t, used: n, limit: r, className: a }) {
|
|
97
|
+
let o = Math.min(100, Math.round(n / Math.max(1, r) * 100));
|
|
98
|
+
return /* @__PURE__ */ _(x, {
|
|
98
99
|
className: a,
|
|
99
|
-
children: /* @__PURE__ */
|
|
100
|
+
children: /* @__PURE__ */ v(S, {
|
|
100
101
|
className: "pt-6",
|
|
101
102
|
children: [
|
|
102
|
-
/* @__PURE__ */
|
|
103
|
+
/* @__PURE__ */ v("div", {
|
|
103
104
|
className: "flex items-center gap-2 text-muted-foreground",
|
|
104
|
-
children: [/* @__PURE__ */
|
|
105
|
+
children: [/* @__PURE__ */ _(e, { className: "h-4 w-4" }), /* @__PURE__ */ _("span", {
|
|
105
106
|
className: "text-sm",
|
|
106
107
|
children: t
|
|
107
108
|
})]
|
|
108
109
|
}),
|
|
109
|
-
/* @__PURE__ */
|
|
110
|
+
/* @__PURE__ */ v("div", {
|
|
110
111
|
className: "mt-2 flex items-baseline gap-2",
|
|
111
|
-
children: [/* @__PURE__ */
|
|
112
|
+
children: [/* @__PURE__ */ _("span", {
|
|
112
113
|
className: "text-2xl font-semibold",
|
|
113
114
|
children: n
|
|
114
|
-
}), /* @__PURE__ */
|
|
115
|
+
}), /* @__PURE__ */ v("span", {
|
|
115
116
|
className: "text-sm text-muted-foreground",
|
|
116
|
-
children: ["/ ",
|
|
117
|
+
children: ["/ ", r]
|
|
117
118
|
})]
|
|
118
119
|
}),
|
|
119
|
-
/* @__PURE__ */
|
|
120
|
+
/* @__PURE__ */ _("div", {
|
|
120
121
|
className: "mt-3 h-2 w-full overflow-hidden rounded-full bg-muted",
|
|
121
|
-
children: /* @__PURE__ */
|
|
122
|
-
className:
|
|
122
|
+
children: /* @__PURE__ */ _("div", {
|
|
123
|
+
className: i("h-full rounded-full transition-all", o >= 90 ? "bg-destructive" : o >= 70 ? "bg-warning" : "bg-success"),
|
|
123
124
|
style: { width: `${o}%` }
|
|
124
125
|
})
|
|
125
126
|
}),
|
|
126
|
-
/* @__PURE__ */
|
|
127
|
+
/* @__PURE__ */ v("p", {
|
|
127
128
|
className: "mt-2 text-xs text-muted-foreground",
|
|
128
129
|
children: [o, "% used"]
|
|
129
130
|
})
|
|
@@ -131,32 +132,32 @@ function F({ icon: e, label: t, used: n, limit: i, className: a }) {
|
|
|
131
132
|
})
|
|
132
133
|
});
|
|
133
134
|
}
|
|
134
|
-
function
|
|
135
|
-
return /* @__PURE__ */
|
|
135
|
+
function L() {
|
|
136
|
+
return /* @__PURE__ */ v("div", {
|
|
136
137
|
className: "space-y-3",
|
|
137
|
-
children: [/* @__PURE__ */
|
|
138
|
+
children: [/* @__PURE__ */ _(E, { className: "h-8 w-1/3" }), /* @__PURE__ */ _(E, { className: "h-32 w-full" })]
|
|
138
139
|
});
|
|
139
140
|
}
|
|
140
|
-
function
|
|
141
|
-
return t.length === 0 ? /* @__PURE__ */
|
|
141
|
+
function R({ columns: e, data: t, emptyState: n }) {
|
|
142
|
+
return t.length === 0 ? /* @__PURE__ */ _("div", {
|
|
142
143
|
className: "py-8 text-center text-sm text-muted-foreground",
|
|
143
144
|
children: n
|
|
144
|
-
}) : /* @__PURE__ */
|
|
145
|
+
}) : /* @__PURE__ */ _("div", {
|
|
145
146
|
className: "overflow-x-auto",
|
|
146
|
-
children: /* @__PURE__ */
|
|
147
|
+
children: /* @__PURE__ */ v("table", {
|
|
147
148
|
className: "w-full text-sm",
|
|
148
|
-
children: [/* @__PURE__ */
|
|
149
|
+
children: [/* @__PURE__ */ _("thead", {
|
|
149
150
|
className: "bg-muted/50",
|
|
150
|
-
children: /* @__PURE__ */
|
|
151
|
-
className:
|
|
151
|
+
children: /* @__PURE__ */ _("tr", { children: e.map((e) => /* @__PURE__ */ _("th", {
|
|
152
|
+
className: i("px-4 py-3 text-left font-medium text-muted-foreground", e.className),
|
|
152
153
|
children: e.header
|
|
153
154
|
}, e.key)) })
|
|
154
|
-
}), /* @__PURE__ */
|
|
155
|
+
}), /* @__PURE__ */ _("tbody", {
|
|
155
156
|
className: "divide-y",
|
|
156
|
-
children: t.map((t) => /* @__PURE__ */
|
|
157
|
+
children: t.map((t) => /* @__PURE__ */ _("tr", {
|
|
157
158
|
className: "hover:bg-muted/30",
|
|
158
|
-
children: e.map((e) => /* @__PURE__ */
|
|
159
|
-
className:
|
|
159
|
+
children: e.map((e) => /* @__PURE__ */ _("td", {
|
|
160
|
+
className: i("px-4 py-3", e.className),
|
|
160
161
|
children: e.cell(t)
|
|
161
162
|
}, `${t.id}-${e.key}`))
|
|
162
163
|
}, t.id))
|
|
@@ -164,131 +165,131 @@ function L({ columns: e, data: t, emptyState: n }) {
|
|
|
164
165
|
})
|
|
165
166
|
});
|
|
166
167
|
}
|
|
167
|
-
function
|
|
168
|
-
let { workspaceId: e } = t(),
|
|
168
|
+
function z() {
|
|
169
|
+
let { workspaceId: e } = t(), i = r(), [p, E] = o(/* @__PURE__ */ new Set()), [z, B] = o(!1), [V, H] = o(null), U = h(D, {
|
|
169
170
|
variables: { workspaceId: e ?? "" },
|
|
170
171
|
skip: !e
|
|
171
|
-
}),
|
|
172
|
+
}), W = h(O, {
|
|
172
173
|
variables: { workspaceId: e ?? "" },
|
|
173
174
|
skip: !e
|
|
174
|
-
}),
|
|
175
|
+
}), G = h(k, {
|
|
175
176
|
variables: { workspaceId: e ?? "" },
|
|
176
177
|
skip: !e
|
|
177
|
-
}), [
|
|
178
|
-
|
|
178
|
+
}), [K] = m(A), q = U.data?.planmagnetProjects.items ?? [], J = W.data?.planmagnetBoards.items ?? [], Y = G.data?.planmagnetAutomationRules.items ?? [], X = a(() => q.filter((e) => e.status === "ACTIVE"), [q]), Z = (e) => {
|
|
179
|
+
E((t) => {
|
|
179
180
|
let n = new Set(t);
|
|
180
181
|
return n.has(e) ? n.delete(e) : n.add(e), n;
|
|
181
182
|
});
|
|
182
|
-
},
|
|
183
|
-
let e =
|
|
184
|
-
|
|
185
|
-
},
|
|
186
|
-
if (
|
|
187
|
-
|
|
183
|
+
}, Q = () => {
|
|
184
|
+
let e = X.filter((e) => e.status !== "ARCHIVED");
|
|
185
|
+
p.size === e.length ? E(/* @__PURE__ */ new Set()) : E(new Set(e.map((e) => e.id)));
|
|
186
|
+
}, $ = async () => {
|
|
187
|
+
if (p.size !== 0) {
|
|
188
|
+
B(!0), H(null);
|
|
188
189
|
try {
|
|
189
|
-
await Promise.all(Array.from(
|
|
190
|
+
await Promise.all(Array.from(p).map((e) => K({ variables: { id: e } }))), await U.refetch(), E(/* @__PURE__ */ new Set());
|
|
190
191
|
} catch (e) {
|
|
191
|
-
|
|
192
|
+
H(e instanceof Error ? e.message : i("planmagnet.admin.archive.unknownError", "Bulk archive failed"));
|
|
192
193
|
} finally {
|
|
193
|
-
|
|
194
|
+
B(!1);
|
|
194
195
|
}
|
|
195
196
|
}
|
|
196
197
|
};
|
|
197
|
-
if (!e) return /* @__PURE__ */
|
|
198
|
+
if (!e) return /* @__PURE__ */ _("div", {
|
|
198
199
|
className: "min-h-screen bg-background",
|
|
199
|
-
children: /* @__PURE__ */
|
|
200
|
+
children: /* @__PURE__ */ v("div", {
|
|
200
201
|
className: "flex min-h-[320px] flex-col items-center justify-center gap-3 text-muted-foreground",
|
|
201
|
-
children: [/* @__PURE__ */
|
|
202
|
+
children: [/* @__PURE__ */ _(s, { className: "h-8 w-8" }), /* @__PURE__ */ _("p", { children: i("planmagnet.admin.noWorkspace", "Select a workspace to manage PlanMagnet admin settings.") })]
|
|
202
203
|
})
|
|
203
204
|
});
|
|
204
|
-
let
|
|
205
|
-
return /* @__PURE__ */
|
|
205
|
+
let ee = U.loading || W.loading || G.loading;
|
|
206
|
+
return /* @__PURE__ */ _("div", {
|
|
206
207
|
className: "min-h-screen bg-background",
|
|
207
|
-
children: /* @__PURE__ */
|
|
208
|
+
children: /* @__PURE__ */ v("div", {
|
|
208
209
|
className: "mx-auto max-w-7xl space-y-6 p-6",
|
|
209
210
|
children: [
|
|
210
|
-
/* @__PURE__ */
|
|
211
|
+
/* @__PURE__ */ _("div", {
|
|
211
212
|
className: "flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",
|
|
212
|
-
children: /* @__PURE__ */
|
|
213
|
+
children: /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("h1", {
|
|
213
214
|
className: "text-2xl font-semibold tracking-tight",
|
|
214
|
-
children:
|
|
215
|
-
}), /* @__PURE__ */
|
|
215
|
+
children: i("planmagnet.admin.title", "PlanMagnet Admin")
|
|
216
|
+
}), /* @__PURE__ */ _("p", {
|
|
216
217
|
className: "text-sm text-muted-foreground",
|
|
217
|
-
children:
|
|
218
|
+
children: i("planmagnet.admin.purpose", "Workspace quota overview, bulk project archive, and automation rule audit.")
|
|
218
219
|
})] })
|
|
219
220
|
}),
|
|
220
|
-
/* @__PURE__ */
|
|
221
|
+
/* @__PURE__ */ v("div", {
|
|
221
222
|
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",
|
|
222
223
|
children: [
|
|
223
|
-
/* @__PURE__ */
|
|
224
|
-
icon: c,
|
|
225
|
-
label: r("planmagnet.admin.quota.projects", "Projects"),
|
|
226
|
-
used: K.length,
|
|
227
|
-
limit: 50
|
|
228
|
-
}),
|
|
229
|
-
/* @__PURE__ */ g(F, {
|
|
224
|
+
/* @__PURE__ */ _(I, {
|
|
230
225
|
icon: l,
|
|
231
|
-
label:
|
|
226
|
+
label: i("planmagnet.admin.quota.projects", "Projects"),
|
|
232
227
|
used: q.length,
|
|
233
|
-
limit:
|
|
228
|
+
limit: 50
|
|
234
229
|
}),
|
|
235
|
-
/* @__PURE__ */
|
|
236
|
-
icon:
|
|
237
|
-
label:
|
|
230
|
+
/* @__PURE__ */ _(I, {
|
|
231
|
+
icon: u,
|
|
232
|
+
label: i("planmagnet.admin.quota.boards", "Boards"),
|
|
238
233
|
used: J.length,
|
|
234
|
+
limit: 100
|
|
235
|
+
}),
|
|
236
|
+
/* @__PURE__ */ _(I, {
|
|
237
|
+
icon: f,
|
|
238
|
+
label: i("planmagnet.admin.quota.automationRules", "Automation Rules"),
|
|
239
|
+
used: Y.length,
|
|
239
240
|
limit: 25
|
|
240
241
|
})
|
|
241
242
|
]
|
|
242
243
|
}),
|
|
243
|
-
|
|
244
|
+
ee ? /* @__PURE__ */ _(L, {}) : /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ v(x, { children: [/* @__PURE__ */ v(C, {
|
|
244
245
|
className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
245
|
-
children: [/* @__PURE__ */
|
|
246
|
+
children: [/* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _(w, { children: i("planmagnet.admin.archive.title", "Bulk Project Archive") }), /* @__PURE__ */ _("p", {
|
|
246
247
|
className: "text-sm text-muted-foreground",
|
|
247
|
-
children:
|
|
248
|
-
})] }), /* @__PURE__ */
|
|
248
|
+
children: i("planmagnet.admin.archive.subtitle", "Select active projects and archive them in one action.")
|
|
249
|
+
})] }), /* @__PURE__ */ v(b, {
|
|
249
250
|
size: "sm",
|
|
250
251
|
variant: "destructive",
|
|
251
|
-
disabled:
|
|
252
|
-
onClick:
|
|
252
|
+
disabled: p.size === 0 || z,
|
|
253
|
+
onClick: $,
|
|
253
254
|
children: [
|
|
254
|
-
|
|
255
|
-
|
|
255
|
+
z ? /* @__PURE__ */ _(d, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ _(c, { className: "mr-2 h-4 w-4" }),
|
|
256
|
+
i("planmagnet.admin.archive.action", "Archive"),
|
|
256
257
|
" (",
|
|
257
|
-
|
|
258
|
+
p.size,
|
|
258
259
|
")"
|
|
259
260
|
]
|
|
260
261
|
})]
|
|
261
|
-
}), /* @__PURE__ */
|
|
262
|
+
}), /* @__PURE__ */ v(S, { children: [V && /* @__PURE__ */ v("div", {
|
|
262
263
|
className: "mb-4 flex items-center gap-2 rounded-md bg-destructive/10 p-3 text-sm text-destructive",
|
|
263
|
-
children: [/* @__PURE__ */
|
|
264
|
-
}), /* @__PURE__ */
|
|
264
|
+
children: [/* @__PURE__ */ _(s, { className: "h-4 w-4" }), V]
|
|
265
|
+
}), /* @__PURE__ */ _("div", {
|
|
265
266
|
className: "rounded-md border",
|
|
266
|
-
children: /* @__PURE__ */
|
|
267
|
-
data:
|
|
267
|
+
children: /* @__PURE__ */ _(R, {
|
|
268
|
+
data: X,
|
|
268
269
|
columns: [
|
|
269
270
|
{
|
|
270
271
|
key: "select",
|
|
271
|
-
header: /* @__PURE__ */
|
|
272
|
-
checked:
|
|
273
|
-
onCheckedChange:
|
|
274
|
-
"aria-label":
|
|
272
|
+
header: /* @__PURE__ */ _(T, {
|
|
273
|
+
checked: X.length > 0 && p.size === X.length,
|
|
274
|
+
onCheckedChange: Q,
|
|
275
|
+
"aria-label": i("planmagnet.admin.archive.selectAll", "Select all active projects")
|
|
275
276
|
}),
|
|
276
|
-
cell: (e) => /* @__PURE__ */
|
|
277
|
-
checked:
|
|
278
|
-
onCheckedChange: () =>
|
|
279
|
-
"aria-label":
|
|
277
|
+
cell: (e) => /* @__PURE__ */ _(T, {
|
|
278
|
+
checked: p.has(e.id),
|
|
279
|
+
onCheckedChange: () => Z(e.id),
|
|
280
|
+
"aria-label": i("planmagnet.admin.archive.selectProject", "Select project")
|
|
280
281
|
}),
|
|
281
282
|
className: "w-12"
|
|
282
283
|
},
|
|
283
284
|
{
|
|
284
285
|
key: "name",
|
|
285
|
-
header:
|
|
286
|
-
cell: (e) => /* @__PURE__ */
|
|
286
|
+
header: i("planmagnet.admin.archive.column.name", "Project"),
|
|
287
|
+
cell: (e) => /* @__PURE__ */ v("div", {
|
|
287
288
|
className: "flex flex-col",
|
|
288
|
-
children: [/* @__PURE__ */
|
|
289
|
+
children: [/* @__PURE__ */ _("span", {
|
|
289
290
|
className: "font-medium",
|
|
290
291
|
children: e.name
|
|
291
|
-
}), /* @__PURE__ */
|
|
292
|
+
}), /* @__PURE__ */ _("span", {
|
|
292
293
|
className: "text-xs text-muted-foreground font-mono",
|
|
293
294
|
children: e.key
|
|
294
295
|
})]
|
|
@@ -296,110 +297,110 @@ function R() {
|
|
|
296
297
|
},
|
|
297
298
|
{
|
|
298
299
|
key: "status",
|
|
299
|
-
header:
|
|
300
|
-
cell: (e) => /* @__PURE__ */
|
|
301
|
-
variant:
|
|
300
|
+
header: i("planmagnet.admin.archive.column.status", "Status"),
|
|
301
|
+
cell: (e) => /* @__PURE__ */ _(y, {
|
|
302
|
+
variant: j(e.status),
|
|
302
303
|
children: e.status.toLowerCase().replace("_", " ")
|
|
303
304
|
})
|
|
304
305
|
},
|
|
305
306
|
{
|
|
306
307
|
key: "methodology",
|
|
307
|
-
header:
|
|
308
|
-
cell: (e) => /* @__PURE__ */
|
|
308
|
+
header: i("planmagnet.admin.archive.column.methodology", "Methodology"),
|
|
309
|
+
cell: (e) => /* @__PURE__ */ _("span", {
|
|
309
310
|
className: "text-sm capitalize",
|
|
310
|
-
children:
|
|
311
|
+
children: P(e.methodology)
|
|
311
312
|
})
|
|
312
313
|
},
|
|
313
314
|
{
|
|
314
315
|
key: "owner",
|
|
315
|
-
header:
|
|
316
|
-
cell: (e) => /* @__PURE__ */
|
|
316
|
+
header: i("planmagnet.admin.archive.column.owner", "Owner"),
|
|
317
|
+
cell: (e) => /* @__PURE__ */ _("span", {
|
|
317
318
|
className: "text-sm text-muted-foreground font-mono",
|
|
318
|
-
children: e.ownerId
|
|
319
|
+
children: /* @__PURE__ */ _(n, { id: e.ownerId })
|
|
319
320
|
})
|
|
320
321
|
},
|
|
321
322
|
{
|
|
322
323
|
key: "created",
|
|
323
|
-
header:
|
|
324
|
-
cell: (e) => /* @__PURE__ */
|
|
324
|
+
header: i("planmagnet.admin.archive.column.created", "Created"),
|
|
325
|
+
cell: (e) => /* @__PURE__ */ _("span", {
|
|
325
326
|
className: "text-sm",
|
|
326
|
-
children:
|
|
327
|
+
children: N(e.createdAt)
|
|
327
328
|
})
|
|
328
329
|
}
|
|
329
330
|
],
|
|
330
|
-
emptyState:
|
|
331
|
+
emptyState: i("planmagnet.admin.archive.empty", "No active projects to archive.")
|
|
331
332
|
})
|
|
332
|
-
})] })] }), /* @__PURE__ */
|
|
333
|
+
})] })] }), /* @__PURE__ */ v(x, { children: [/* @__PURE__ */ v(C, { children: [/* @__PURE__ */ _(w, { children: i("planmagnet.admin.automation.title", "Automation Rule Audit") }), /* @__PURE__ */ _("p", {
|
|
333
334
|
className: "text-sm text-muted-foreground",
|
|
334
|
-
children:
|
|
335
|
-
})] }), /* @__PURE__ */
|
|
335
|
+
children: i("planmagnet.admin.automation.subtitle", "Review rule health, execution counts, and last run timestamps.")
|
|
336
|
+
})] }), /* @__PURE__ */ _(S, { children: /* @__PURE__ */ _("div", {
|
|
336
337
|
className: "rounded-md border",
|
|
337
|
-
children: /* @__PURE__ */
|
|
338
|
-
data:
|
|
338
|
+
children: /* @__PURE__ */ _(R, {
|
|
339
|
+
data: Y,
|
|
339
340
|
columns: [
|
|
340
341
|
{
|
|
341
342
|
key: "name",
|
|
342
|
-
header:
|
|
343
|
-
cell: (e) => /* @__PURE__ */
|
|
343
|
+
header: i("planmagnet.admin.automation.column.name", "Rule"),
|
|
344
|
+
cell: (e) => /* @__PURE__ */ _("span", {
|
|
344
345
|
className: "font-medium",
|
|
345
346
|
children: e.name
|
|
346
347
|
})
|
|
347
348
|
},
|
|
348
349
|
{
|
|
349
350
|
key: "trigger",
|
|
350
|
-
header:
|
|
351
|
-
cell: (e) => /* @__PURE__ */
|
|
351
|
+
header: i("planmagnet.admin.automation.column.trigger", "Trigger"),
|
|
352
|
+
cell: (e) => /* @__PURE__ */ _("span", {
|
|
352
353
|
className: "text-sm",
|
|
353
|
-
children:
|
|
354
|
+
children: F(e.triggerType)
|
|
354
355
|
})
|
|
355
356
|
},
|
|
356
357
|
{
|
|
357
358
|
key: "status",
|
|
358
|
-
header:
|
|
359
|
-
cell: (e) => /* @__PURE__ */
|
|
360
|
-
variant:
|
|
359
|
+
header: i("planmagnet.admin.automation.column.status", "Status"),
|
|
360
|
+
cell: (e) => /* @__PURE__ */ _(y, {
|
|
361
|
+
variant: M(e.status),
|
|
361
362
|
children: e.status.toLowerCase()
|
|
362
363
|
})
|
|
363
364
|
},
|
|
364
365
|
{
|
|
365
366
|
key: "executions",
|
|
366
|
-
header:
|
|
367
|
-
cell: (e) => /* @__PURE__ */
|
|
367
|
+
header: i("planmagnet.admin.automation.column.executions", "Executions"),
|
|
368
|
+
cell: (e) => /* @__PURE__ */ _("span", {
|
|
368
369
|
className: "text-sm",
|
|
369
370
|
children: e.executionCount
|
|
370
371
|
})
|
|
371
372
|
},
|
|
372
373
|
{
|
|
373
374
|
key: "lastRun",
|
|
374
|
-
header:
|
|
375
|
-
cell: (e) => /* @__PURE__ */
|
|
375
|
+
header: i("planmagnet.admin.automation.column.lastRun", "Last Run"),
|
|
376
|
+
cell: (e) => /* @__PURE__ */ _("span", {
|
|
376
377
|
className: "text-sm",
|
|
377
|
-
children:
|
|
378
|
+
children: N(e.lastExecutedAt)
|
|
378
379
|
})
|
|
379
380
|
},
|
|
380
381
|
{
|
|
381
382
|
key: "created",
|
|
382
|
-
header:
|
|
383
|
-
cell: (e) => /* @__PURE__ */
|
|
383
|
+
header: i("planmagnet.admin.automation.column.created", "Created"),
|
|
384
|
+
cell: (e) => /* @__PURE__ */ _("span", {
|
|
384
385
|
className: "text-sm",
|
|
385
|
-
children:
|
|
386
|
+
children: N(e.createdAt)
|
|
386
387
|
})
|
|
387
388
|
}
|
|
388
389
|
],
|
|
389
|
-
emptyState:
|
|
390
|
+
emptyState: i("planmagnet.admin.automation.empty", "No automation rules found.")
|
|
390
391
|
})
|
|
391
392
|
}) })] })] })
|
|
392
393
|
]
|
|
393
394
|
})
|
|
394
395
|
});
|
|
395
396
|
}
|
|
396
|
-
function
|
|
397
|
-
return /* @__PURE__ */
|
|
397
|
+
function B(t) {
|
|
398
|
+
return /* @__PURE__ */ _(e, {
|
|
398
399
|
...t,
|
|
399
|
-
children: /* @__PURE__ */
|
|
400
|
+
children: /* @__PURE__ */ _(z, {})
|
|
400
401
|
});
|
|
401
402
|
}
|
|
402
403
|
//#endregion
|
|
403
|
-
export {
|
|
404
|
+
export { B as PlanMagnetAdminRoot };
|
|
404
405
|
|
|
405
406
|
//# sourceMappingURL=PlanMagnetAdminRoot.js.map
|