@burdenoff/microfe-planmagnet 2026.927.3 → 2026.927.5

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