@burdenoff/microfe-planmagnet 2026.509.103

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 (222) hide show
  1. package/README.md +12 -0
  2. package/dist/dev/main.d.ts +2 -0
  3. package/dist/dev/main.d.ts.map +1 -0
  4. package/dist/generated/global-operations.d.ts +2 -0
  5. package/dist/generated/global-operations.d.ts.map +1 -0
  6. package/dist/generated/global-types.d.ts +21253 -0
  7. package/dist/generated/global-types.d.ts.map +1 -0
  8. package/dist/generated/wspace-operations.d.ts +8370 -0
  9. package/dist/generated/wspace-operations.d.ts.map +1 -0
  10. package/dist/generated/wspace-types.d.ts +4182 -0
  11. package/dist/generated/wspace-types.d.ts.map +1 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +5 -0
  15. package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js +24 -0
  16. package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +1 -0
  17. package/dist/node_modules/@apollo/client/errors/utils.js +16 -0
  18. package/dist/node_modules/@apollo/client/errors/utils.js.map +1 -0
  19. package/dist/planmagnet/PlanMagnetRoot.d.ts +5 -0
  20. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -0
  21. package/dist/planmagnet/PlanMagnetRoot.js +292 -0
  22. package/dist/planmagnet/PlanMagnetRoot.js.map +1 -0
  23. package/dist/planmagnet/PlanMagnetRoutes.d.ts +2 -0
  24. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -0
  25. package/dist/planmagnet/PlanMagnetRoutes.js +211 -0
  26. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -0
  27. package/dist/planmagnet/index.d.ts +5 -0
  28. package/dist/planmagnet/index.d.ts.map +1 -0
  29. package/dist/planmagnet/index.js +3 -0
  30. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts +2 -0
  31. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -0
  32. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +312 -0
  33. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +1 -0
  34. package/dist/planmagnet/pages/CollaborationCollaborationPagePage.d.ts +2 -0
  35. package/dist/planmagnet/pages/CollaborationCollaborationPagePage.d.ts.map +1 -0
  36. package/dist/planmagnet/pages/CollaborationCollaborationPagePage.js +110 -0
  37. package/dist/planmagnet/pages/CollaborationCollaborationPagePage.js.map +1 -0
  38. package/dist/planmagnet/pages/CollaborationCreateChannelPagePage.d.ts +2 -0
  39. package/dist/planmagnet/pages/CollaborationCreateChannelPagePage.d.ts.map +1 -0
  40. package/dist/planmagnet/pages/CollaborationCreateChannelPagePage.js +96 -0
  41. package/dist/planmagnet/pages/CollaborationCreateChannelPagePage.js.map +1 -0
  42. package/dist/planmagnet/pages/CollaborationFilesPagePage.d.ts +2 -0
  43. package/dist/planmagnet/pages/CollaborationFilesPagePage.d.ts.map +1 -0
  44. package/dist/planmagnet/pages/CollaborationFilesPagePage.js +112 -0
  45. package/dist/planmagnet/pages/CollaborationFilesPagePage.js.map +1 -0
  46. package/dist/planmagnet/pages/CollaborationMessagesPagePage.d.ts +2 -0
  47. package/dist/planmagnet/pages/CollaborationMessagesPagePage.d.ts.map +1 -0
  48. package/dist/planmagnet/pages/CollaborationMessagesPagePage.js +141 -0
  49. package/dist/planmagnet/pages/CollaborationMessagesPagePage.js.map +1 -0
  50. package/dist/planmagnet/pages/CollaborationNewDiscussionPagePage.d.ts +2 -0
  51. package/dist/planmagnet/pages/CollaborationNewDiscussionPagePage.d.ts.map +1 -0
  52. package/dist/planmagnet/pages/CollaborationNewDiscussionPagePage.js +124 -0
  53. package/dist/planmagnet/pages/CollaborationNewDiscussionPagePage.js.map +1 -0
  54. package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts +2 -0
  55. package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +1 -0
  56. package/dist/planmagnet/pages/DashboardDashboardPagePage.js +350 -0
  57. package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +1 -0
  58. package/dist/planmagnet/pages/MeetingsScheduleMeetingPagePage.d.ts +2 -0
  59. package/dist/planmagnet/pages/MeetingsScheduleMeetingPagePage.d.ts.map +1 -0
  60. package/dist/planmagnet/pages/MeetingsScheduleMeetingPagePage.js +290 -0
  61. package/dist/planmagnet/pages/MeetingsScheduleMeetingPagePage.js.map +1 -0
  62. package/dist/planmagnet/pages/ProductsCreateProductPagePage.d.ts +2 -0
  63. package/dist/planmagnet/pages/ProductsCreateProductPagePage.d.ts.map +1 -0
  64. package/dist/planmagnet/pages/ProductsCreateProductPagePage.js +189 -0
  65. package/dist/planmagnet/pages/ProductsCreateProductPagePage.js.map +1 -0
  66. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.d.ts +2 -0
  67. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.d.ts.map +1 -0
  68. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.js +151 -0
  69. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.js.map +1 -0
  70. package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts +2 -0
  71. package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts.map +1 -0
  72. package/dist/planmagnet/pages/ProductsEditProductPagePage.js +257 -0
  73. package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +1 -0
  74. package/dist/planmagnet/pages/ProductsEditReleasePagePage.d.ts +2 -0
  75. package/dist/planmagnet/pages/ProductsEditReleasePagePage.d.ts.map +1 -0
  76. package/dist/planmagnet/pages/ProductsEditReleasePagePage.js +221 -0
  77. package/dist/planmagnet/pages/ProductsEditReleasePagePage.js.map +1 -0
  78. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.d.ts +2 -0
  79. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.d.ts.map +1 -0
  80. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js +284 -0
  81. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js.map +1 -0
  82. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts +2 -0
  83. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +1 -0
  84. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js +291 -0
  85. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +1 -0
  86. package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts +2 -0
  87. package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts.map +1 -0
  88. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js +257 -0
  89. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +1 -0
  90. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.d.ts +2 -0
  91. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.d.ts.map +1 -0
  92. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js +222 -0
  93. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js.map +1 -0
  94. package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts +2 -0
  95. package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -0
  96. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +288 -0
  97. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -0
  98. package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts +2 -0
  99. package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +1 -0
  100. package/dist/planmagnet/pages/ProductsProductsPagePage.js +225 -0
  101. package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -0
  102. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts +2 -0
  103. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts.map +1 -0
  104. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js +262 -0
  105. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js.map +1 -0
  106. package/dist/planmagnet/pages/ProductsReleasesPagePage.d.ts +2 -0
  107. package/dist/planmagnet/pages/ProductsReleasesPagePage.d.ts.map +1 -0
  108. package/dist/planmagnet/pages/ProductsReleasesPagePage.js +162 -0
  109. package/dist/planmagnet/pages/ProductsReleasesPagePage.js.map +1 -0
  110. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.d.ts +2 -0
  111. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.d.ts.map +1 -0
  112. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js +342 -0
  113. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js.map +1 -0
  114. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.d.ts +2 -0
  115. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.d.ts.map +1 -0
  116. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js +233 -0
  117. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js.map +1 -0
  118. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.d.ts +2 -0
  119. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.d.ts.map +1 -0
  120. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js +193 -0
  121. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js.map +1 -0
  122. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.d.ts +2 -0
  123. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.d.ts.map +1 -0
  124. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js +116 -0
  125. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js.map +1 -0
  126. package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.d.ts +2 -0
  127. package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.d.ts.map +1 -0
  128. package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.js +199 -0
  129. package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.js.map +1 -0
  130. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.d.ts +2 -0
  131. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.d.ts.map +1 -0
  132. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +197 -0
  133. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js.map +1 -0
  134. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.d.ts +2 -0
  135. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.d.ts.map +1 -0
  136. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js +173 -0
  137. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js.map +1 -0
  138. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.d.ts +2 -0
  139. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.d.ts.map +1 -0
  140. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js +119 -0
  141. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js.map +1 -0
  142. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts +2 -0
  143. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -0
  144. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +257 -0
  145. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -0
  146. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts +2 -0
  147. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts.map +1 -0
  148. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +222 -0
  149. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +1 -0
  150. package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts +2 -0
  151. package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +1 -0
  152. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js +142 -0
  153. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js.map +1 -0
  154. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts +2 -0
  155. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -0
  156. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +363 -0
  157. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -0
  158. package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts +2 -0
  159. package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts.map +1 -0
  160. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +176 -0
  161. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +1 -0
  162. package/dist/planmagnet/pages/ReportsCreateReportPagePage.d.ts +2 -0
  163. package/dist/planmagnet/pages/ReportsCreateReportPagePage.d.ts.map +1 -0
  164. package/dist/planmagnet/pages/ReportsCreateReportPagePage.js +173 -0
  165. package/dist/planmagnet/pages/ReportsCreateReportPagePage.js.map +1 -0
  166. package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts +2 -0
  167. package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts.map +1 -0
  168. package/dist/planmagnet/pages/ReportsReportsPagePage.js +221 -0
  169. package/dist/planmagnet/pages/ReportsReportsPagePage.js.map +1 -0
  170. package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts +2 -0
  171. package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +1 -0
  172. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +282 -0
  173. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +1 -0
  174. package/dist/planmagnet/pages/TasksCreateTaskPagePage.d.ts +2 -0
  175. package/dist/planmagnet/pages/TasksCreateTaskPagePage.d.ts.map +1 -0
  176. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js +227 -0
  177. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js.map +1 -0
  178. package/dist/planmagnet/pages/TasksEditTaskPagePage.d.ts +2 -0
  179. package/dist/planmagnet/pages/TasksEditTaskPagePage.d.ts.map +1 -0
  180. package/dist/planmagnet/pages/TasksEditTaskPagePage.js +234 -0
  181. package/dist/planmagnet/pages/TasksEditTaskPagePage.js.map +1 -0
  182. package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts +2 -0
  183. package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -0
  184. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +232 -0
  185. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -0
  186. package/dist/planmagnet/pages/TasksTasksPagePage.d.ts +2 -0
  187. package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +1 -0
  188. package/dist/planmagnet/pages/TasksTasksPagePage.js +206 -0
  189. package/dist/planmagnet/pages/TasksTasksPagePage.js.map +1 -0
  190. package/dist/planmagnet/pages/TeamCreateTeamPagePage.d.ts +2 -0
  191. package/dist/planmagnet/pages/TeamCreateTeamPagePage.d.ts.map +1 -0
  192. package/dist/planmagnet/pages/TeamCreateTeamPagePage.js +138 -0
  193. package/dist/planmagnet/pages/TeamCreateTeamPagePage.js.map +1 -0
  194. package/dist/planmagnet/pages/TeamInviteMemberPagePage.d.ts +2 -0
  195. package/dist/planmagnet/pages/TeamInviteMemberPagePage.d.ts.map +1 -0
  196. package/dist/planmagnet/pages/TeamInviteMemberPagePage.js +161 -0
  197. package/dist/planmagnet/pages/TeamInviteMemberPagePage.js.map +1 -0
  198. package/dist/planmagnet/pages/TeamTeamPagePage.d.ts +2 -0
  199. package/dist/planmagnet/pages/TeamTeamPagePage.d.ts.map +1 -0
  200. package/dist/planmagnet/pages/TeamTeamPagePage.js +203 -0
  201. package/dist/planmagnet/pages/TeamTeamPagePage.js.map +1 -0
  202. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.d.ts +2 -0
  203. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.d.ts.map +1 -0
  204. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.js +97 -0
  205. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.js.map +1 -0
  206. package/dist/planmagnet/providers/PlanMagnetProvider.d.ts +31 -0
  207. package/dist/planmagnet/providers/PlanMagnetProvider.d.ts.map +1 -0
  208. package/dist/planmagnet/providers/PlanMagnetProvider.js +119 -0
  209. package/dist/planmagnet/providers/PlanMagnetProvider.js.map +1 -0
  210. package/dist/planmagnet/store/planmagnetStore.d.ts +30 -0
  211. package/dist/planmagnet/store/planmagnetStore.d.ts.map +1 -0
  212. package/dist/planmagnet/store/planmagnetStore.js +42 -0
  213. package/dist/planmagnet/store/planmagnetStore.js.map +1 -0
  214. package/dist/planmagnet/types/index.d.ts +317 -0
  215. package/dist/planmagnet/types/index.d.ts.map +1 -0
  216. package/dist/planmagnet/utils/cn.d.ts +4 -0
  217. package/dist/planmagnet/utils/cn.d.ts.map +1 -0
  218. package/dist/planmagnet/utils/navigation.d.ts +2 -0
  219. package/dist/planmagnet/utils/navigation.d.ts.map +1 -0
  220. package/dist/planmagnet/utils/navigation.js +8 -0
  221. package/dist/planmagnet/utils/navigation.js.map +1 -0
  222. package/package.json +107 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectsMilestonesPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProjectsMilestonesPagePage.tsx"],"names":[],"mappings":"AA4CA,wBAAgB,0BAA0B,4CAkGzC"}
@@ -0,0 +1,119 @@
1
+ import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
+ import { useState as t } from "react";
3
+ import { Calendar as n, Target as r, User as i } from "lucide-react";
4
+ import { gql as a } from "@apollo/client";
5
+ import { useQuery as o } from "@apollo/client/react";
6
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
7
+ import { Card as l, CardContent as u, CardHeader as d, CardTitle as f } from "@burdenoff/fe-libs/ui";
8
+ //#region src/planmagnet/pages/ProjectsMilestonesPagePage.tsx
9
+ var p = a`
10
+ query GetMilestones($workspaceId: ID!, $filter: MilestoneFilter) {
11
+ planmagnetMilestones(workspaceId: $workspaceId, filter: $filter, pagination: { first: 100 }) {
12
+ items {
13
+ id
14
+ name
15
+ description
16
+ projectId
17
+ status
18
+ dueDate
19
+ ownerId
20
+ createdAt
21
+ }
22
+ totalCount
23
+ }
24
+ }
25
+ `, m = {
26
+ PENDING: "bg-gray-100 text-gray-800",
27
+ IN_PROGRESS: "bg-blue-100 text-blue-800",
28
+ COMPLETED: "bg-green-100 text-green-800",
29
+ MISSED: "bg-red-100 text-red-800",
30
+ CANCELLED: "bg-red-100 text-red-800"
31
+ }, h = [
32
+ "all",
33
+ "PENDING",
34
+ "IN_PROGRESS",
35
+ "COMPLETED",
36
+ "MISSED",
37
+ "CANCELLED"
38
+ ];
39
+ function g() {
40
+ let { workspaceId: a } = e(), [g, _] = t("all"), { data: v, loading: y, error: b } = o(p, { variables: {
41
+ workspaceId: a ?? "default",
42
+ filter: g === "all" ? void 0 : { status: g }
43
+ } });
44
+ if (y) return /* @__PURE__ */ s("div", {
45
+ className: "flex items-center justify-center p-12",
46
+ children: /* @__PURE__ */ s("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
47
+ });
48
+ if (b) return /* @__PURE__ */ c("div", {
49
+ className: "p-6 text-red-500",
50
+ children: ["Error loading milestones: ", b.message]
51
+ });
52
+ let x = v?.planmagnetMilestones?.items ?? [], S = v?.planmagnetMilestones?.totalCount ?? 0;
53
+ return /* @__PURE__ */ c("div", {
54
+ className: "space-y-6 p-6",
55
+ children: [
56
+ /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
57
+ className: "text-2xl font-semibold",
58
+ children: "Milestones"
59
+ }), /* @__PURE__ */ c("p", {
60
+ className: "text-sm text-muted-foreground",
61
+ children: [S, " milestones across all projects"]
62
+ })] }),
63
+ /* @__PURE__ */ s("div", {
64
+ className: "flex gap-1",
65
+ children: h.map((e) => /* @__PURE__ */ s("button", {
66
+ onClick: () => _(e),
67
+ className: `px-3 py-1.5 text-sm rounded-md capitalize ${g === e ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-muted"}`,
68
+ children: e === "all" ? "All" : e.toLowerCase().replace("_", " ")
69
+ }, e))
70
+ }),
71
+ /* @__PURE__ */ s("div", {
72
+ className: "grid grid-cols-1 md:grid-cols-2 gap-4",
73
+ children: x.map((e) => /* @__PURE__ */ c(l, { children: [/* @__PURE__ */ s(d, {
74
+ className: "pb-2",
75
+ children: /* @__PURE__ */ c("div", {
76
+ className: "flex items-center justify-between",
77
+ children: [/* @__PURE__ */ c(f, {
78
+ className: "text-base flex items-center gap-2",
79
+ children: [/* @__PURE__ */ s(r, { className: "h-4 w-4 text-primary" }), e.name]
80
+ }), /* @__PURE__ */ s("span", {
81
+ className: `text-xs px-2 py-0.5 rounded-full capitalize ${m[e.status] ?? "bg-gray-100"}`,
82
+ children: e.status.toLowerCase().replace("_", " ")
83
+ })]
84
+ })
85
+ }), /* @__PURE__ */ c(u, {
86
+ className: "space-y-3",
87
+ children: [
88
+ /* @__PURE__ */ s("p", {
89
+ className: "text-sm text-muted-foreground",
90
+ children: e.description ?? "No description"
91
+ }),
92
+ /* @__PURE__ */ c("div", {
93
+ className: "flex gap-3 text-xs text-muted-foreground",
94
+ children: [/* @__PURE__ */ c("span", {
95
+ className: "flex items-center gap-1",
96
+ children: [/* @__PURE__ */ s(n, { className: "h-3 w-3" }), e.dueDate ? new Date(e.dueDate).toLocaleDateString() : "No due date"]
97
+ }), e.ownerId && /* @__PURE__ */ c("span", {
98
+ className: "flex items-center gap-1",
99
+ children: [/* @__PURE__ */ s(i, { className: "h-3 w-3" }), e.ownerId]
100
+ })]
101
+ }),
102
+ /* @__PURE__ */ c("div", {
103
+ className: "text-xs text-muted-foreground",
104
+ children: ["Project: ", e.projectId]
105
+ })
106
+ ]
107
+ })] }, e.id))
108
+ }),
109
+ x.length === 0 && /* @__PURE__ */ s("p", {
110
+ className: "text-center text-muted-foreground py-8",
111
+ children: "No milestones found."
112
+ })
113
+ ]
114
+ });
115
+ }
116
+ //#endregion
117
+ export { g as ProjectsMilestonesPagePage };
118
+
119
+ //# sourceMappingURL=ProjectsMilestonesPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectsMilestonesPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProjectsMilestonesPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { Target, Calendar, User } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\nconst GET_MILESTONES = gql`\n query GetMilestones($workspaceId: ID!, $filter: MilestoneFilter) {\n planmagnetMilestones(workspaceId: $workspaceId, filter: $filter, pagination: { first: 100 }) {\n items {\n id\n name\n description\n projectId\n status\n dueDate\n ownerId\n createdAt\n }\n totalCount\n }\n }\n`;\n\nconst statusColor: Record<string, string> = {\n PENDING: 'bg-gray-100 text-gray-800',\n IN_PROGRESS: 'bg-blue-100 text-blue-800',\n COMPLETED: 'bg-green-100 text-green-800',\n MISSED: 'bg-red-100 text-red-800',\n CANCELLED: 'bg-red-100 text-red-800',\n};\n\nconst milestoneStatuses = [\n 'all',\n 'PENDING',\n 'IN_PROGRESS',\n 'COMPLETED',\n 'MISSED',\n 'CANCELLED',\n] as const;\n\nexport function ProjectsMilestonesPagePage() {\n const { workspaceId } = usePlanMagnet();\n const [filter, setFilter] = useState<string>('all');\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(GET_MILESTONES, {\n variables: {\n workspaceId: workspaceId ?? 'default',\n filter: filter !== 'all' ? { status: filter } : undefined,\n },\n });\n\n if (loading)\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n if (error)\n return <div className=\"p-6 text-red-500\">Error loading milestones: {error.message}</div>;\n\n const milestones = data?.planmagnetMilestones?.items ?? [];\n const totalCount = data?.planmagnetMilestones?.totalCount ?? 0;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Milestones</h1>\n <p className=\"text-sm text-muted-foreground\">{totalCount} milestones across all projects</p>\n </div>\n <div className=\"flex gap-1\">\n {milestoneStatuses.map((s) => (\n <button\n key={s}\n onClick={() => setFilter(s)}\n className={`px-3 py-1.5 text-sm rounded-md capitalize ${filter === s ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-muted'}`}\n >\n {s === 'all' ? 'All' : s.toLowerCase().replace('_', ' ')}\n </button>\n ))}\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {milestones.map(\n (ms: {\n id: string;\n name: string;\n description: string | null;\n projectId: string;\n status: string;\n dueDate: string | null;\n ownerId: string | null;\n }) => (\n <Card key={ms.id}>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base flex items-center gap-2\">\n <Target className=\"h-4 w-4 text-primary\" />\n {ms.name}\n </CardTitle>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[ms.status] ?? 'bg-gray-100'}`}\n >\n {ms.status.toLowerCase().replace('_', ' ')}\n </span>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n {ms.description ?? 'No description'}\n </p>\n <div className=\"flex gap-3 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n {ms.dueDate ? new Date(ms.dueDate).toLocaleDateString() : 'No due date'}\n </span>\n {ms.ownerId && (\n <span className=\"flex items-center gap-1\">\n <User className=\"h-3 w-3\" />\n {ms.ownerId}\n </span>\n )}\n </div>\n <div className=\"text-xs text-muted-foreground\">Project: {ms.projectId}</div>\n </CardContent>\n </Card>\n )\n )}\n </div>\n {milestones.length === 0 && (\n <p className=\"text-center text-muted-foreground py-8\">No milestones found.</p>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AASA,IAAM,IAAiB,CAAG;;;;;;;;;;;;;;;;GAkBpB,IAAsC;CAC1C,SAAS;CACT,aAAa;CACb,WAAW;CACX,QAAQ;CACR,WAAW;CACZ,EAEK,IAAoB;CACxB;CACA;CACA;CACA;CACA;CACA;CACD;AAED,SAAgB,IAA6B;CAC3C,IAAM,EAAE,mBAAgB,GAAe,EACjC,CAAC,GAAQ,KAAa,EAAiB,MAAM,EAE7C,EACJ,SACA,YACA,aAGA,EAA8B,GAAgB,EAC5C,WAAW;EACT,aAAa,KAAe;EAC5B,QAAQ,MAAW,QAA6B,KAAA,IAArB,EAAE,QAAQ,GAAQ;EAC9C,EACF,CAAC;AAEJ,KAAI,EACF,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD,EAAK,WAAU,kFAAmF,CAAA;EAC9F,CAAA;AAEV,KAAI,EACF,QAAO,kBAAC,OAAD;EAAK,WAAU;YAAf,CAAkC,8BAA2B,EAAM,QAAc;;CAE1F,IAAM,IAAa,GAAM,sBAAsB,SAAS,EAAE,EACpD,IAAa,GAAM,sBAAsB,cAAc;AAE7D,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAyB;IAAe,CAAA,EACtD,kBAAC,KAAD;IAAG,WAAU;cAAb,CAA8C,GAAW,kCAAmC;MACxF,EAAA,CAAA;GACN,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAkB,KAAK,MACtB,kBAAC,UAAD;KAEE,eAAe,EAAU,EAAE;KAC3B,WAAW,6CAA6C,MAAW,IAAI,uCAAuC;eAE7G,MAAM,QAAQ,QAAQ,EAAE,aAAa,CAAC,QAAQ,KAAK,IAAI;KACjD,EALF,EAKE,CACT;IACE,CAAA;GACN,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAW,KACT,MASC,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;KAAY,WAAU;eACpB,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD;OAAW,WAAU;iBAArB,CACE,kBAAC,GAAD,EAAQ,WAAU,wBAAyB,CAAA,EAC1C,EAAG,KACM;UACZ,kBAAC,QAAD;OACE,WAAW,+CAA+C,EAAY,EAAG,WAAW;iBAEnF,EAAG,OAAO,aAAa,CAAC,QAAQ,KAAK,IAAI;OACrC,CAAA,CACH;;KACK,CAAA,EACb,kBAAC,GAAD;KAAa,WAAU;eAAvB;MACE,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAG,eAAe;OACjB,CAAA;MACJ,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAhB,CACE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA,EAC/B,EAAG,UAAU,IAAI,KAAK,EAAG,QAAQ,CAAC,oBAAoB,GAAG,cACrD;WACN,EAAG,WACF,kBAAC,QAAD;QAAM,WAAU;kBAAhB,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAC3B,EAAG,QACC;UAEL;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CAA+C,aAAU,EAAG,UAAgB;;MAChE;OACT,EAAA,EAhCI,EAAG,GAgCP,CAEV;IACG,CAAA;GACL,EAAW,WAAW,KACrB,kBAAC,KAAD;IAAG,WAAU;cAAyC;IAAwB,CAAA;GAE5E"}
@@ -0,0 +1,2 @@
1
+ export declare function ProjectsPlanningDetailPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=ProjectsPlanningDetailPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectsPlanningDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProjectsPlanningDetailPagePage.tsx"],"names":[],"mappings":"AAkCA,wBAAgB,8BAA8B,4CA2K7C"}
@@ -0,0 +1,257 @@
1
+ import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
+ import { BarChart3 as t, CalendarClock as n, FolderKanban as r, Users as i } from "lucide-react";
3
+ import { gql as a } from "@apollo/client";
4
+ import { useQuery as o } from "@apollo/client/react";
5
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
6
+ import { Badge as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p } from "@burdenoff/fe-libs/ui";
7
+ //#region src/planmagnet/pages/ProjectsPlanningDetailPagePage.tsx
8
+ var m = a`
9
+ query GetSprintDetail($workspaceId: ID!) {
10
+ planmagnetSprints(workspaceId: $workspaceId, pagination: { first: 1 }) {
11
+ items {
12
+ id
13
+ name
14
+ projectId
15
+ status
16
+ startDate
17
+ endDate
18
+ goal
19
+ capacity
20
+ velocity
21
+ workItems {
22
+ id
23
+ key
24
+ status
25
+ storyPoints
26
+ assigneeId
27
+ priority
28
+ }
29
+ }
30
+ }
31
+ }
32
+ `;
33
+ function h() {
34
+ let { workspaceId: a } = e(), { data: h, loading: g, error: _ } = o(m, { variables: { workspaceId: a ?? "default" } });
35
+ if (g) return /* @__PURE__ */ s("div", {
36
+ className: "flex items-center justify-center p-12",
37
+ children: /* @__PURE__ */ s("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
38
+ });
39
+ if (_) return /* @__PURE__ */ c("div", {
40
+ className: "p-6 text-red-500",
41
+ children: ["Error loading planning session: ", _.message]
42
+ });
43
+ let v = h?.planmagnetSprints?.items?.[0];
44
+ if (!v) return /* @__PURE__ */ s("div", {
45
+ className: "p-6 text-muted-foreground",
46
+ children: "Planning session not found."
47
+ });
48
+ let y = v.workItems ?? [], b = y.reduce((e, t) => e + (t.storyPoints ?? 0), 0);
49
+ y.filter((e) => e.status === "DONE").reduce((e, t) => e + (t.storyPoints ?? 0), 0);
50
+ let x = v.capacity ?? b, S = x > 0 ? Math.round(b / x * 100) : 0, C = x - b, w = [...new Set(y.map((e) => e.assigneeId).filter(Boolean))];
51
+ return /* @__PURE__ */ c("div", {
52
+ className: "space-y-6 p-6",
53
+ children: [/* @__PURE__ */ c("div", {
54
+ className: "flex items-center justify-between",
55
+ children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
56
+ className: "text-2xl font-semibold",
57
+ children: v.name
58
+ }), /* @__PURE__ */ c("p", {
59
+ className: "text-sm text-muted-foreground",
60
+ children: [
61
+ v.projectId,
62
+ " ·",
63
+ " ",
64
+ v.startDate ? new Date(v.startDate).toLocaleDateString() : "—",
65
+ " -",
66
+ " ",
67
+ v.endDate ? new Date(v.endDate).toLocaleDateString() : "—"
68
+ ]
69
+ })] }), /* @__PURE__ */ s("div", {
70
+ className: "flex gap-2",
71
+ children: /* @__PURE__ */ s(l, {
72
+ className: "capitalize",
73
+ children: v.status.toLowerCase().replace("_", " ")
74
+ })
75
+ })]
76
+ }), /* @__PURE__ */ c("div", {
77
+ className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
78
+ children: [/* @__PURE__ */ c("div", {
79
+ className: "lg:col-span-2 space-y-6",
80
+ children: [/* @__PURE__ */ c(u, { children: [/* @__PURE__ */ s(f, { children: /* @__PURE__ */ s(p, { children: "Capacity Allocation" }) }), /* @__PURE__ */ c(d, {
81
+ className: "space-y-4",
82
+ children: [/* @__PURE__ */ c("div", {
83
+ className: "grid grid-cols-3 gap-4 text-center",
84
+ children: [
85
+ /* @__PURE__ */ c("div", {
86
+ className: "p-4 bg-muted rounded-md",
87
+ children: [/* @__PURE__ */ s("p", {
88
+ className: "text-2xl font-bold",
89
+ children: x
90
+ }), /* @__PURE__ */ s("p", {
91
+ className: "text-xs text-muted-foreground",
92
+ children: "Capacity"
93
+ })]
94
+ }),
95
+ /* @__PURE__ */ c("div", {
96
+ className: "p-4 bg-primary/10 rounded-md",
97
+ children: [/* @__PURE__ */ s("p", {
98
+ className: "text-2xl font-bold text-primary",
99
+ children: b
100
+ }), /* @__PURE__ */ s("p", {
101
+ className: "text-xs text-muted-foreground",
102
+ children: "Allocated"
103
+ })]
104
+ }),
105
+ /* @__PURE__ */ c("div", {
106
+ className: "p-4 bg-muted rounded-md",
107
+ children: [/* @__PURE__ */ s("p", {
108
+ className: "text-2xl font-bold",
109
+ children: C > 0 ? C : 0
110
+ }), /* @__PURE__ */ s("p", {
111
+ className: "text-xs text-muted-foreground",
112
+ children: "Remaining"
113
+ })]
114
+ })
115
+ ]
116
+ }), /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ c("div", {
117
+ className: "flex justify-between text-sm mb-2",
118
+ children: [/* @__PURE__ */ s("span", {
119
+ className: "text-muted-foreground",
120
+ children: "Utilization"
121
+ }), /* @__PURE__ */ c("span", {
122
+ className: "font-medium",
123
+ children: [S, "%"]
124
+ })]
125
+ }), /* @__PURE__ */ s("div", {
126
+ className: "w-full h-4 rounded-full bg-muted overflow-hidden",
127
+ children: /* @__PURE__ */ s("div", {
128
+ className: `h-full rounded-full ${S > 90 ? "bg-red-400" : "bg-green-400"}`,
129
+ style: { width: `${Math.min(S, 100)}%` }
130
+ })
131
+ })] })]
132
+ })] }), /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ s(f, { children: /* @__PURE__ */ c(p, { children: [
133
+ "Team Members (",
134
+ w.length,
135
+ ")"
136
+ ] }) }), /* @__PURE__ */ s(d, { children: /* @__PURE__ */ c("div", {
137
+ className: "grid grid-cols-2 gap-3",
138
+ children: [w.map((e) => /* @__PURE__ */ c("div", {
139
+ className: "flex items-center gap-2 border rounded-md p-2.5",
140
+ children: [/* @__PURE__ */ s("div", {
141
+ className: "h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-medium text-primary",
142
+ children: e.slice(0, 2).toUpperCase()
143
+ }), /* @__PURE__ */ s("span", {
144
+ className: "text-sm truncate",
145
+ children: e
146
+ })]
147
+ }, e)), w.length === 0 && /* @__PURE__ */ s("p", {
148
+ className: "text-sm text-muted-foreground col-span-2 text-center py-4",
149
+ children: "No team members assigned."
150
+ })]
151
+ }) })] })]
152
+ }), /* @__PURE__ */ c(u, { children: [/* @__PURE__ */ s(f, { children: /* @__PURE__ */ s(p, { children: "Session Info" }) }), /* @__PURE__ */ c(d, {
153
+ className: "space-y-3 text-sm",
154
+ children: [
155
+ /* @__PURE__ */ c("div", {
156
+ className: "flex items-center gap-2",
157
+ children: [
158
+ /* @__PURE__ */ s(r, { className: "h-4 w-4 text-muted-foreground" }),
159
+ /* @__PURE__ */ s("span", {
160
+ className: "text-muted-foreground",
161
+ children: "Project:"
162
+ }),
163
+ /* @__PURE__ */ s("span", {
164
+ className: "font-medium",
165
+ children: v.projectId
166
+ })
167
+ ]
168
+ }),
169
+ /* @__PURE__ */ c("div", {
170
+ className: "flex items-center gap-2",
171
+ children: [
172
+ /* @__PURE__ */ s(n, { className: "h-4 w-4 text-muted-foreground" }),
173
+ /* @__PURE__ */ s("span", {
174
+ className: "text-muted-foreground",
175
+ children: "Start:"
176
+ }),
177
+ /* @__PURE__ */ s("span", {
178
+ className: "font-medium",
179
+ children: v.startDate ? new Date(v.startDate).toLocaleDateString() : "Not set"
180
+ })
181
+ ]
182
+ }),
183
+ /* @__PURE__ */ c("div", {
184
+ className: "flex items-center gap-2",
185
+ children: [
186
+ /* @__PURE__ */ s(n, { className: "h-4 w-4 text-muted-foreground" }),
187
+ /* @__PURE__ */ s("span", {
188
+ className: "text-muted-foreground",
189
+ children: "End:"
190
+ }),
191
+ /* @__PURE__ */ s("span", {
192
+ className: "font-medium",
193
+ children: v.endDate ? new Date(v.endDate).toLocaleDateString() : "Not set"
194
+ })
195
+ ]
196
+ }),
197
+ /* @__PURE__ */ c("div", {
198
+ className: "flex items-center gap-2",
199
+ children: [
200
+ /* @__PURE__ */ s(i, { className: "h-4 w-4 text-muted-foreground" }),
201
+ /* @__PURE__ */ s("span", {
202
+ className: "text-muted-foreground",
203
+ children: "Assignees:"
204
+ }),
205
+ /* @__PURE__ */ s("span", {
206
+ className: "font-medium",
207
+ children: w.length
208
+ })
209
+ ]
210
+ }),
211
+ /* @__PURE__ */ c("div", {
212
+ className: "flex items-center gap-2",
213
+ children: [
214
+ /* @__PURE__ */ s(t, { className: "h-4 w-4 text-muted-foreground" }),
215
+ /* @__PURE__ */ s("span", {
216
+ className: "text-muted-foreground",
217
+ children: "Capacity:"
218
+ }),
219
+ /* @__PURE__ */ c("span", {
220
+ className: "font-medium",
221
+ children: [x, " pts"]
222
+ })
223
+ ]
224
+ }),
225
+ v.velocity != null && /* @__PURE__ */ c("div", {
226
+ className: "flex items-center gap-2",
227
+ children: [
228
+ /* @__PURE__ */ s(t, { className: "h-4 w-4 text-muted-foreground" }),
229
+ /* @__PURE__ */ s("span", {
230
+ className: "text-muted-foreground",
231
+ children: "Velocity:"
232
+ }),
233
+ /* @__PURE__ */ c("span", {
234
+ className: "font-medium",
235
+ children: [v.velocity, " pts"]
236
+ })
237
+ ]
238
+ }),
239
+ v.goal && /* @__PURE__ */ c("div", {
240
+ className: "border-t pt-3 mt-3",
241
+ children: [/* @__PURE__ */ s("p", {
242
+ className: "text-muted-foreground text-xs mb-1",
243
+ children: "Goal"
244
+ }), /* @__PURE__ */ s("p", {
245
+ className: "text-sm",
246
+ children: v.goal
247
+ })]
248
+ })
249
+ ]
250
+ })] })]
251
+ })]
252
+ });
253
+ }
254
+ //#endregion
255
+ export { h as ProjectsPlanningDetailPagePage };
256
+
257
+ //# sourceMappingURL=ProjectsPlanningDetailPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectsPlanningDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProjectsPlanningDetailPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { CalendarClock, Users, BarChart3, FolderKanban } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\nconst GET_SPRINT_DETAIL = gql`\n query GetSprintDetail($workspaceId: ID!) {\n planmagnetSprints(workspaceId: $workspaceId, pagination: { first: 1 }) {\n items {\n id\n name\n projectId\n status\n startDate\n endDate\n goal\n capacity\n velocity\n workItems {\n id\n key\n status\n storyPoints\n assigneeId\n priority\n }\n }\n }\n }\n`;\n\nexport function ProjectsPlanningDetailPagePage() {\n const { workspaceId } = usePlanMagnet();\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(GET_SPRINT_DETAIL, {\n variables: { workspaceId: workspaceId ?? 'default' },\n });\n\n if (loading)\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n if (error)\n return <div className=\"p-6 text-red-500\">Error loading planning session: {error.message}</div>;\n\n const sprint = data?.planmagnetSprints?.items?.[0];\n if (!sprint) return <div className=\"p-6 text-muted-foreground\">Planning session not found.</div>;\n\n const workItems = sprint.workItems ?? [];\n const totalPoints = workItems.reduce(\n (sum: number, wi: { storyPoints: number | null }) => sum + (wi.storyPoints ?? 0),\n 0\n );\n const completedPoints = workItems\n .filter((wi: { status: string }) => wi.status === 'DONE')\n .reduce((sum: number, wi: { storyPoints: number | null }) => sum + (wi.storyPoints ?? 0), 0);\n const allocatedCapacity = sprint.capacity ?? totalPoints;\n const capPct = allocatedCapacity > 0 ? Math.round((totalPoints / allocatedCapacity) * 100) : 0;\n const remaining = allocatedCapacity - totalPoints;\n\n // Derive unique assignees from work items\n const uniqueAssignees = [\n ...new Set(\n workItems\n .map((wi: { assigneeId: string | null }) => wi.assigneeId)\n .filter(Boolean) as string[]\n ),\n ];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">{sprint.name}</h1>\n <p className=\"text-sm text-muted-foreground\">\n {sprint.projectId} &middot;{' '}\n {sprint.startDate ? new Date(sprint.startDate).toLocaleDateString() : '—'} -{' '}\n {sprint.endDate ? new Date(sprint.endDate).toLocaleDateString() : '—'}\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Badge className=\"capitalize\">{sprint.status.toLowerCase().replace('_', ' ')}</Badge>\n </div>\n </div>\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Capacity Allocation</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid grid-cols-3 gap-4 text-center\">\n <div className=\"p-4 bg-muted rounded-md\">\n <p className=\"text-2xl font-bold\">{allocatedCapacity}</p>\n <p className=\"text-xs text-muted-foreground\">Capacity</p>\n </div>\n <div className=\"p-4 bg-primary/10 rounded-md\">\n <p className=\"text-2xl font-bold text-primary\">{totalPoints}</p>\n <p className=\"text-xs text-muted-foreground\">Allocated</p>\n </div>\n <div className=\"p-4 bg-muted rounded-md\">\n <p className=\"text-2xl font-bold\">{remaining > 0 ? remaining : 0}</p>\n <p className=\"text-xs text-muted-foreground\">Remaining</p>\n </div>\n </div>\n <div>\n <div className=\"flex justify-between text-sm mb-2\">\n <span className=\"text-muted-foreground\">Utilization</span>\n <span className=\"font-medium\">{capPct}%</span>\n </div>\n <div className=\"w-full h-4 rounded-full bg-muted overflow-hidden\">\n <div\n className={`h-full rounded-full ${capPct > 90 ? 'bg-red-400' : 'bg-green-400'}`}\n style={{ width: `${Math.min(capPct, 100)}%` }}\n />\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Team Members ({uniqueAssignees.length})</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 gap-3\">\n {uniqueAssignees.map((assigneeId: string) => (\n <div key={assigneeId} className=\"flex items-center gap-2 border rounded-md p-2.5\">\n <div className=\"h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-medium text-primary\">\n {assigneeId.slice(0, 2).toUpperCase()}\n </div>\n <span className=\"text-sm truncate\">{assigneeId}</span>\n </div>\n ))}\n {uniqueAssignees.length === 0 && (\n <p className=\"text-sm text-muted-foreground col-span-2 text-center py-4\">\n No team members assigned.\n </p>\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n <Card>\n <CardHeader>\n <CardTitle>Session Info</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <FolderKanban className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Project:</span>\n <span className=\"font-medium\">{sprint.projectId}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <CalendarClock className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Start:</span>\n <span className=\"font-medium\">\n {sprint.startDate ? new Date(sprint.startDate).toLocaleDateString() : 'Not set'}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <CalendarClock className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">End:</span>\n <span className=\"font-medium\">\n {sprint.endDate ? new Date(sprint.endDate).toLocaleDateString() : 'Not set'}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Users className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Assignees:</span>\n <span className=\"font-medium\">{uniqueAssignees.length}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <BarChart3 className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Capacity:</span>\n <span className=\"font-medium\">{allocatedCapacity} pts</span>\n </div>\n {sprint.velocity != null && (\n <div className=\"flex items-center gap-2\">\n <BarChart3 className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Velocity:</span>\n <span className=\"font-medium\">{sprint.velocity} pts</span>\n </div>\n )}\n {sprint.goal && (\n <div className=\"border-t pt-3 mt-3\">\n <p className=\"text-muted-foreground text-xs mb-1\">Goal</p>\n <p className=\"text-sm\">{sprint.goal}</p>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function ProjectsPlanningEditPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=ProjectsPlanningEditPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectsPlanningEditPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProjectsPlanningEditPagePage.tsx"],"names":[],"mappings":"AA8CA,wBAAgB,4BAA4B,4CA+K3C"}
@@ -0,0 +1,222 @@
1
+ import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
+ import { useMemo as t, useState as n } from "react";
3
+ import { ArrowLeft as r, Save as i } from "lucide-react";
4
+ import { gql as a } from "@apollo/client";
5
+ import { useMutation as o, useQuery as s } from "@apollo/client/react";
6
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
7
+ import { Button as u, Card as d, CardContent as f, CardHeader as p, CardTitle as m, Input as h } from "@burdenoff/fe-libs/ui";
8
+ //#region src/planmagnet/pages/ProjectsPlanningEditPagePage.tsx
9
+ var g = a`
10
+ query GetSprintForEdit($workspaceId: ID!) {
11
+ planmagnetSprints(workspaceId: $workspaceId, pagination: { first: 1 }) {
12
+ items {
13
+ id
14
+ name
15
+ projectId
16
+ status
17
+ startDate
18
+ endDate
19
+ goal
20
+ capacity
21
+ }
22
+ }
23
+ planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {
24
+ items {
25
+ id
26
+ name
27
+ }
28
+ }
29
+ }
30
+ `, _ = a`
31
+ mutation UpdateSprint($id: ID!, $input: UpdateSprintInput!) {
32
+ planmagnetUpdateSprint(id: $id, input: $input) {
33
+ id
34
+ name
35
+ status
36
+ startDate
37
+ endDate
38
+ goal
39
+ capacity
40
+ }
41
+ }
42
+ `;
43
+ function v() {
44
+ let { workspaceId: a } = e(), { data: v, loading: y, error: b } = s(g, { variables: { workspaceId: a ?? "default" } }), [x, S] = n(null), C = v?.planmagnetSprints?.items?.[0], w = v?.planmagnetProjects?.items ?? [], T = t(() => ({
45
+ name: C?.name ?? "",
46
+ status: C?.status ?? "PLANNING",
47
+ startDate: C?.startDate ? C.startDate.split("T")[0] : "",
48
+ endDate: C?.endDate ? C.endDate.split("T")[0] : "",
49
+ goal: C?.goal ?? "",
50
+ capacity: C?.capacity?.toString() ?? ""
51
+ }), [C]), [E, D] = n({}), O = {
52
+ ...T,
53
+ ...E
54
+ }, k = (e) => D(e), [A, { loading: j, error: M }] = o(_, {
55
+ refetchQueries: [
56
+ "GetSprints",
57
+ "GetSprintDetail",
58
+ "GetSprintForEdit",
59
+ "GetDashboardData"
60
+ ],
61
+ onCompleted: () => {
62
+ S("Sprint updated successfully.");
63
+ }
64
+ });
65
+ return y ? /* @__PURE__ */ c("div", {
66
+ className: "flex items-center justify-center p-12",
67
+ children: /* @__PURE__ */ c("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
68
+ }) : b ? /* @__PURE__ */ l("div", {
69
+ className: "p-6 text-red-500",
70
+ children: ["Error loading sprint: ", b.message]
71
+ }) : C ? /* @__PURE__ */ l("div", {
72
+ className: "space-y-6 p-6 max-w-4xl",
73
+ children: [
74
+ /* @__PURE__ */ l("div", {
75
+ className: "flex items-center justify-between",
76
+ children: [/* @__PURE__ */ l("div", {
77
+ className: "flex items-center gap-3",
78
+ children: [/* @__PURE__ */ c(u, {
79
+ variant: "ghost",
80
+ size: "sm",
81
+ children: /* @__PURE__ */ c(r, { className: "h-4 w-4" })
82
+ }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
83
+ className: "text-2xl font-semibold",
84
+ children: "Edit Planning Session"
85
+ }), /* @__PURE__ */ c("p", {
86
+ className: "text-sm text-muted-foreground",
87
+ children: C.name
88
+ })] })]
89
+ }), /* @__PURE__ */ l(u, {
90
+ size: "sm",
91
+ onClick: () => {
92
+ C && planmagnetUpdateSprint({ variables: {
93
+ id: C.id,
94
+ input: {
95
+ name: O.name || void 0,
96
+ status: O.status || void 0,
97
+ startDate: O.startDate || void 0,
98
+ endDate: O.endDate || void 0,
99
+ goal: O.goal || void 0,
100
+ capacity: O.capacity ? parseInt(O.capacity, 10) : void 0
101
+ }
102
+ } });
103
+ },
104
+ disabled: j,
105
+ children: [/* @__PURE__ */ c(i, { className: "mr-1 h-4 w-4" }), j ? "Saving..." : "Save Changes"]
106
+ })]
107
+ }),
108
+ x && /* @__PURE__ */ c("div", {
109
+ className: "p-3 bg-green-50 text-green-800 rounded-md text-sm",
110
+ children: x
111
+ }),
112
+ M && /* @__PURE__ */ l("div", {
113
+ className: "p-3 bg-red-50 text-red-800 rounded-md text-sm",
114
+ children: ["Error: ", M.message]
115
+ }),
116
+ /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c(p, { children: /* @__PURE__ */ c(m, { children: "Session Details" }) }), /* @__PURE__ */ l(f, {
117
+ className: "space-y-4",
118
+ children: [
119
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
120
+ className: "text-sm font-medium",
121
+ children: "Name"
122
+ }), /* @__PURE__ */ c(h, {
123
+ value: O.name,
124
+ onChange: (e) => k({
125
+ ...O,
126
+ name: e.target.value
127
+ }),
128
+ className: "mt-1"
129
+ })] }),
130
+ /* @__PURE__ */ l("div", {
131
+ className: "grid grid-cols-2 gap-4",
132
+ children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
133
+ className: "text-sm font-medium",
134
+ children: "Project"
135
+ }), /* @__PURE__ */ c("div", {
136
+ className: "mt-1 w-full rounded-md border border-input bg-muted px-3 py-2 text-sm text-muted-foreground",
137
+ children: w.find((e) => e.id === C.projectId)?.name ?? C.projectId
138
+ })] }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
139
+ className: "text-sm font-medium",
140
+ children: "Status"
141
+ }), /* @__PURE__ */ c("select", {
142
+ className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
143
+ value: O.status,
144
+ onChange: (e) => k({
145
+ ...O,
146
+ status: e.target.value
147
+ }),
148
+ children: [
149
+ "PLANNING",
150
+ "ACTIVE",
151
+ "REVIEW",
152
+ "COMPLETED",
153
+ "CANCELLED"
154
+ ].map((e) => /* @__PURE__ */ c("option", {
155
+ value: e,
156
+ children: e.toLowerCase().replace(/_/g, " ")
157
+ }, e))
158
+ })] })]
159
+ }),
160
+ /* @__PURE__ */ l("div", {
161
+ className: "grid grid-cols-2 gap-4",
162
+ children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
163
+ className: "text-sm font-medium",
164
+ children: "Start Date"
165
+ }), /* @__PURE__ */ c(h, {
166
+ type: "date",
167
+ value: O.startDate,
168
+ onChange: (e) => k({
169
+ ...O,
170
+ startDate: e.target.value
171
+ }),
172
+ className: "mt-1"
173
+ })] }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
174
+ className: "text-sm font-medium",
175
+ children: "End Date"
176
+ }), /* @__PURE__ */ c(h, {
177
+ type: "date",
178
+ value: O.endDate,
179
+ onChange: (e) => k({
180
+ ...O,
181
+ endDate: e.target.value
182
+ }),
183
+ className: "mt-1"
184
+ })] })]
185
+ }),
186
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
187
+ className: "text-sm font-medium",
188
+ children: "Goal"
189
+ }), /* @__PURE__ */ c("textarea", {
190
+ className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[60px]",
191
+ value: O.goal,
192
+ onChange: (e) => k({
193
+ ...O,
194
+ goal: e.target.value
195
+ }),
196
+ placeholder: "Sprint goal..."
197
+ })] }),
198
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
199
+ className: "text-sm font-medium",
200
+ children: "Capacity (story points)"
201
+ }), /* @__PURE__ */ c(h, {
202
+ type: "number",
203
+ value: O.capacity,
204
+ onChange: (e) => k({
205
+ ...O,
206
+ capacity: e.target.value
207
+ }),
208
+ className: "mt-1",
209
+ placeholder: "e.g. 40"
210
+ })] })
211
+ ]
212
+ })] })
213
+ ]
214
+ }) : /* @__PURE__ */ c("div", {
215
+ className: "p-6 text-muted-foreground",
216
+ children: "Planning session not found."
217
+ });
218
+ }
219
+ //#endregion
220
+ export { v as ProjectsPlanningEditPagePage };
221
+
222
+ //# sourceMappingURL=ProjectsPlanningEditPagePage.js.map