@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,176 @@
1
+ import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
+ import { CheckSquare as t, FolderKanban as n, Plus as r, TrendingUp as i, Users as a } from "lucide-react";
3
+ import { gql as o } from "@apollo/client";
4
+ import { useQuery as s } from "@apollo/client/react";
5
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
6
+ import { useI18n as u } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
+ import { Badge as d, Button as f, Card as p, CardContent as m, CardHeader as h, CardTitle as g } from "@burdenoff/fe-libs/ui";
8
+ //#region src/planmagnet/pages/ProjectsProjectsPagePage.tsx
9
+ var _ = o`
10
+ query GetProjects($workspaceId: ID!) {
11
+ planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {
12
+ items {
13
+ id
14
+ name
15
+ key
16
+ description
17
+ status
18
+ methodology
19
+ ownerId
20
+ startDate
21
+ endDate
22
+ tags
23
+ createdAt
24
+ }
25
+ totalCount
26
+ }
27
+ }
28
+ `, v = {
29
+ SCRUM: "bg-blue-100 text-blue-800",
30
+ KANBAN: "bg-purple-100 text-purple-800",
31
+ WATERFALL: "bg-gray-100 text-gray-800",
32
+ HYBRID: "bg-teal-100 text-teal-800",
33
+ AGILE: "bg-indigo-100 text-indigo-800",
34
+ CUSTOM: "bg-amber-100 text-amber-800"
35
+ }, y = (e) => e === "ACTIVE" ? "default" : "secondary";
36
+ function b() {
37
+ let { workspaceId: o } = e(), { t: b } = u(), { data: x, loading: S, error: C } = s(_, { variables: { workspaceId: o ?? "default" } });
38
+ if (S) return /* @__PURE__ */ c("div", {
39
+ className: "flex items-center justify-center p-12",
40
+ children: /* @__PURE__ */ c("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
41
+ });
42
+ if (C) return /* @__PURE__ */ l("div", {
43
+ className: "p-6 text-red-500",
44
+ children: [
45
+ b("planmagnet.projects.errorLoading", "Error loading projects"),
46
+ ": ",
47
+ C.message
48
+ ]
49
+ });
50
+ let w = x?.planmagnetProjects?.items ?? [], T = {
51
+ total: w.length,
52
+ active: w.filter((e) => e.status === "ACTIVE").length,
53
+ completed: w.filter((e) => e.status === "COMPLETED").length,
54
+ onHold: w.filter((e) => e.status === "ON_HOLD").length
55
+ };
56
+ return /* @__PURE__ */ l("div", {
57
+ className: "space-y-6 p-6",
58
+ children: [
59
+ /* @__PURE__ */ l("div", {
60
+ className: "flex items-center justify-between",
61
+ children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
62
+ className: "text-2xl font-semibold",
63
+ children: b("planmagnet.projects.title", "All Projects")
64
+ }), /* @__PURE__ */ c("p", {
65
+ className: "text-sm text-muted-foreground",
66
+ children: b("planmagnet.projects.subtitle", "Manage and track all projects across teams")
67
+ })] }), /* @__PURE__ */ l(f, {
68
+ size: "sm",
69
+ children: [/* @__PURE__ */ c(r, { className: "mr-1 h-4 w-4" }), b("planmagnet.projects.actions.newProject", "New Project")]
70
+ })]
71
+ }),
72
+ /* @__PURE__ */ c("div", {
73
+ className: "grid grid-cols-2 md:grid-cols-4 gap-4",
74
+ children: [
75
+ {
76
+ label: b("planmagnet.projects.metrics.totalProjects", "Total Projects"),
77
+ value: T.total,
78
+ icon: n
79
+ },
80
+ {
81
+ label: b("planmagnet.projects.metrics.active", "Active"),
82
+ value: T.active,
83
+ icon: i
84
+ },
85
+ {
86
+ label: b("planmagnet.projects.metrics.completed", "Completed"),
87
+ value: T.completed,
88
+ icon: t
89
+ },
90
+ {
91
+ label: b("planmagnet.projects.metrics.onHold", "On Hold"),
92
+ value: T.onHold,
93
+ icon: i
94
+ }
95
+ ].map((e) => /* @__PURE__ */ c(p, { children: /* @__PURE__ */ l(m, {
96
+ className: "pt-4",
97
+ children: [/* @__PURE__ */ l("div", {
98
+ className: "flex items-center gap-2 text-muted-foreground text-sm",
99
+ children: [/* @__PURE__ */ c(e.icon, { className: "h-4 w-4" }), e.label]
100
+ }), /* @__PURE__ */ c("p", {
101
+ className: "text-xl font-semibold mt-1",
102
+ children: e.value
103
+ })]
104
+ }) }, e.label))
105
+ }),
106
+ /* @__PURE__ */ c("div", {
107
+ className: "grid grid-cols-1 md:grid-cols-2 gap-4",
108
+ children: w.map((e) => /* @__PURE__ */ l(p, { children: [/* @__PURE__ */ c(h, {
109
+ className: "pb-2",
110
+ children: /* @__PURE__ */ l("div", {
111
+ className: "flex items-center justify-between",
112
+ children: [/* @__PURE__ */ c(g, {
113
+ className: "text-base",
114
+ children: e.name
115
+ }), /* @__PURE__ */ c("span", {
116
+ className: "text-xs text-muted-foreground font-mono",
117
+ children: e.key
118
+ })]
119
+ })
120
+ }), /* @__PURE__ */ l(m, {
121
+ className: "space-y-3",
122
+ children: [
123
+ /* @__PURE__ */ c("p", {
124
+ className: "text-sm text-muted-foreground",
125
+ children: e.description ?? b("planmagnet.projects.shared.noDescription", "No description")
126
+ }),
127
+ /* @__PURE__ */ l("div", {
128
+ className: "flex gap-2",
129
+ children: [/* @__PURE__ */ c(d, {
130
+ variant: y(e.status),
131
+ className: "capitalize",
132
+ children: e.status.toLowerCase().replace("_", " ")
133
+ }), /* @__PURE__ */ c("span", {
134
+ className: `text-xs px-2 py-0.5 rounded-full capitalize ${v[e.methodology] ?? "bg-gray-100"}`,
135
+ children: e.methodology.toLowerCase()
136
+ })]
137
+ }),
138
+ e.tags.length > 0 && /* @__PURE__ */ c("div", {
139
+ className: "flex gap-1 flex-wrap",
140
+ children: e.tags.map((e) => /* @__PURE__ */ c(d, {
141
+ variant: "outline",
142
+ className: "text-xs",
143
+ children: e
144
+ }, e))
145
+ }),
146
+ /* @__PURE__ */ l("div", {
147
+ className: "flex justify-between text-xs text-muted-foreground border-t pt-2",
148
+ children: [/* @__PURE__ */ l("span", {
149
+ className: "flex items-center gap-1",
150
+ children: [
151
+ /* @__PURE__ */ c(a, { className: "h-3 w-3" }),
152
+ b("planmagnet.projects.shared.owner", "Owner"),
153
+ ": ",
154
+ e.ownerId
155
+ ]
156
+ }), /* @__PURE__ */ l("span", { children: [
157
+ e.startDate ? new Date(e.startDate).toLocaleDateString() : "—",
158
+ " -",
159
+ " ",
160
+ e.endDate ? new Date(e.endDate).toLocaleDateString() : "—"
161
+ ] })]
162
+ })
163
+ ]
164
+ })] }, e.id))
165
+ }),
166
+ w.length === 0 && /* @__PURE__ */ c("p", {
167
+ className: "text-center text-muted-foreground py-8",
168
+ children: b("planmagnet.projects.empty", "No projects found.")
169
+ })
170
+ ]
171
+ });
172
+ }
173
+ //#endregion
174
+ export { b as ProjectsProjectsPagePage };
175
+
176
+ //# sourceMappingURL=ProjectsProjectsPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectsProjectsPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProjectsProjectsPagePage.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, Button } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { FolderKanban, Plus, Users, CheckSquare, TrendingUp } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\nconst GET_PROJECTS = gql`\n query GetProjects($workspaceId: ID!) {\n planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n key\n description\n status\n methodology\n ownerId\n startDate\n endDate\n tags\n createdAt\n }\n totalCount\n }\n }\n`;\n\nconst methodColor: Record<string, string> = {\n SCRUM: 'bg-blue-100 text-blue-800',\n KANBAN: 'bg-purple-100 text-purple-800',\n WATERFALL: 'bg-gray-100 text-gray-800',\n HYBRID: 'bg-teal-100 text-teal-800',\n AGILE: 'bg-indigo-100 text-indigo-800',\n CUSTOM: 'bg-amber-100 text-amber-800',\n};\n\nconst statusVariant = (status: string) => (status === 'ACTIVE' ? 'default' : 'secondary');\n\nexport function ProjectsProjectsPagePage() {\n const { workspaceId } = usePlanMagnet();\n const { t } = useI18n();\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_PROJECTS, {\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 (\n <div className=\"p-6 text-red-500\">\n {t('planmagnet.projects.errorLoading', 'Error loading projects')}: {error.message}\n </div>\n );\n\n const projects = data?.planmagnetProjects?.items ?? [];\n\n const stats = {\n total: projects.length,\n active: projects.filter((p: { status: string }) => p.status === 'ACTIVE').length,\n completed: projects.filter((p: { status: string }) => p.status === 'COMPLETED').length,\n onHold: projects.filter((p: { status: string }) => p.status === 'ON_HOLD').length,\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\">\n {t('planmagnet.projects.title', 'All Projects')}\n </h1>\n <p className=\"text-sm text-muted-foreground\">\n {t('planmagnet.projects.subtitle', 'Manage and track all projects across teams')}\n </p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-1 h-4 w-4\" />\n {t('planmagnet.projects.actions.newProject', 'New Project')}\n </Button>\n </div>\n\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n {[\n {\n label: t('planmagnet.projects.metrics.totalProjects', 'Total Projects'),\n value: stats.total,\n icon: FolderKanban,\n },\n {\n label: t('planmagnet.projects.metrics.active', 'Active'),\n value: stats.active,\n icon: TrendingUp,\n },\n {\n label: t('planmagnet.projects.metrics.completed', 'Completed'),\n value: stats.completed,\n icon: CheckSquare,\n },\n {\n label: t('planmagnet.projects.metrics.onHold', 'On Hold'),\n value: stats.onHold,\n icon: TrendingUp,\n },\n ].map((s) => (\n <Card key={s.label}>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground text-sm\">\n <s.icon className=\"h-4 w-4\" />\n {s.label}\n </div>\n <p className=\"text-xl font-semibold mt-1\">{s.value}</p>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {projects.map(\n (project: {\n id: string;\n name: string;\n key: string;\n description: string | null;\n status: string;\n methodology: string;\n ownerId: string;\n startDate: string | null;\n endDate: string | null;\n tags: string[];\n }) => {\n return (\n <Card key={project.id}>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{project.name}</CardTitle>\n <span className=\"text-xs text-muted-foreground font-mono\">{project.key}</span>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n {project.description ??\n t('planmagnet.projects.shared.noDescription', 'No description')}\n </p>\n <div className=\"flex gap-2\">\n <Badge variant={statusVariant(project.status)} className=\"capitalize\">\n {project.status.toLowerCase().replace('_', ' ')}\n </Badge>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${methodColor[project.methodology] ?? 'bg-gray-100'}`}\n >\n {project.methodology.toLowerCase()}\n </span>\n </div>\n {project.tags.length > 0 && (\n <div className=\"flex gap-1 flex-wrap\">\n {project.tags.map((tag: string) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n <div className=\"flex justify-between text-xs text-muted-foreground border-t pt-2\">\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {t('planmagnet.projects.shared.owner', 'Owner')}: {project.ownerId}\n </span>\n <span>\n {project.startDate ? new Date(project.startDate).toLocaleDateString() : '—'} -{' '}\n {project.endDate ? new Date(project.endDate).toLocaleDateString() : '—'}\n </span>\n </div>\n </CardContent>\n </Card>\n );\n }\n )}\n </div>\n {projects.length === 0 && (\n <p className=\"text-center text-muted-foreground py-8\">\n {t('planmagnet.projects.empty', 'No projects found.')}\n </p>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function ReportsCreateReportPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=ReportsCreateReportPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportsCreateReportPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ReportsCreateReportPagePage.tsx"],"names":[],"mappings":"AAgCA,wBAAgB,2BAA2B,4CA8I1C"}
@@ -0,0 +1,173 @@
1
+ import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
2
+ import { useState as n } from "react";
3
+ import { BarChart3 as r, Save as i, X as a } from "lucide-react";
4
+ import { gql as o } from "@apollo/client";
5
+ import { 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/ReportsCreateReportPagePage.tsx
9
+ var g = o`
10
+ query GetProjectsForReport($workspaceId: ID!, $pagination: PaginationInput) {
11
+ planmagnetProjects(workspaceId: $workspaceId, pagination: $pagination) {
12
+ items {
13
+ id
14
+ name
15
+ key
16
+ }
17
+ totalCount
18
+ }
19
+ }
20
+ `;
21
+ function _() {
22
+ let { workspaceId: o } = e(), _ = t(), { data: v, loading: y, error: b } = s(g, {
23
+ variables: {
24
+ workspaceId: o,
25
+ pagination: { first: 100 }
26
+ },
27
+ skip: !o
28
+ }), [x, S] = n({
29
+ name: "",
30
+ description: "",
31
+ type: "velocity",
32
+ projectId: "",
33
+ schedule: "weekly"
34
+ }), C = [
35
+ "velocity",
36
+ "burndown",
37
+ "burnup",
38
+ "cumulative_flow",
39
+ "cycle_time",
40
+ "lead_time",
41
+ "custom"
42
+ ], w = [
43
+ "daily",
44
+ "weekly",
45
+ "monthly"
46
+ ], T = v?.planmagnetProjects?.items ?? [];
47
+ return y ? /* @__PURE__ */ c("div", {
48
+ className: "flex items-center justify-center p-12",
49
+ children: /* @__PURE__ */ c("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
50
+ }) : b ? /* @__PURE__ */ l("div", {
51
+ className: "p-6 text-red-500",
52
+ children: ["Error: ", b.message]
53
+ }) : /* @__PURE__ */ l("div", {
54
+ className: "space-y-6 p-6 max-w-4xl",
55
+ children: [/* @__PURE__ */ l("div", {
56
+ className: "flex items-center justify-between",
57
+ children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
58
+ className: "text-2xl font-semibold",
59
+ children: "Create Report"
60
+ }), /* @__PURE__ */ c("p", {
61
+ className: "text-sm text-muted-foreground",
62
+ children: "Configure a new automated report."
63
+ })] }), /* @__PURE__ */ l("div", {
64
+ className: "flex gap-2",
65
+ children: [/* @__PURE__ */ l(u, {
66
+ variant: "outline",
67
+ size: "sm",
68
+ onClick: () => _("/reports"),
69
+ children: [/* @__PURE__ */ c(a, { className: "mr-1 h-4 w-4" }), "Cancel"]
70
+ }), /* @__PURE__ */ l(u, {
71
+ size: "sm",
72
+ onClick: () => {
73
+ x.name.trim() && _("/reports");
74
+ },
75
+ children: [/* @__PURE__ */ c(i, { className: "mr-1 h-4 w-4" }), "Create Report"]
76
+ })]
77
+ })]
78
+ }), /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c(p, { children: /* @__PURE__ */ l(m, {
79
+ className: "flex items-center gap-2",
80
+ children: [/* @__PURE__ */ c(r, { className: "h-4 w-4" }), "Report Configuration"]
81
+ }) }), /* @__PURE__ */ l(f, {
82
+ className: "space-y-4",
83
+ children: [
84
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
85
+ className: "text-sm font-medium",
86
+ children: "Report Name"
87
+ }), /* @__PURE__ */ c(h, {
88
+ value: x.name,
89
+ onChange: (e) => S({
90
+ ...x,
91
+ name: e.target.value
92
+ }),
93
+ className: "mt-1",
94
+ placeholder: "e.g. Sprint Velocity Report"
95
+ })] }),
96
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
97
+ className: "text-sm font-medium",
98
+ children: "Description"
99
+ }), /* @__PURE__ */ c("textarea", {
100
+ className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[80px]",
101
+ value: x.description,
102
+ onChange: (e) => S({
103
+ ...x,
104
+ description: e.target.value
105
+ }),
106
+ placeholder: "What does this report track?"
107
+ })] }),
108
+ /* @__PURE__ */ l("div", {
109
+ className: "grid grid-cols-3 gap-4",
110
+ children: [
111
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
112
+ className: "text-sm font-medium",
113
+ children: "Type"
114
+ }), /* @__PURE__ */ c("select", {
115
+ className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
116
+ value: x.type,
117
+ onChange: (e) => S({
118
+ ...x,
119
+ type: e.target.value
120
+ }),
121
+ children: C.map((e) => /* @__PURE__ */ c("option", {
122
+ value: e,
123
+ children: e.replace("_", " ")
124
+ }, e))
125
+ })] }),
126
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
127
+ className: "text-sm font-medium",
128
+ children: "Project (optional)"
129
+ }), /* @__PURE__ */ l("select", {
130
+ className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
131
+ value: x.projectId,
132
+ onChange: (e) => S({
133
+ ...x,
134
+ projectId: e.target.value
135
+ }),
136
+ children: [/* @__PURE__ */ c("option", {
137
+ value: "",
138
+ children: "All projects"
139
+ }), T.map((e) => /* @__PURE__ */ l("option", {
140
+ value: e.id,
141
+ children: [
142
+ e.name,
143
+ " (",
144
+ e.key,
145
+ ")"
146
+ ]
147
+ }, e.id))]
148
+ })] }),
149
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
150
+ className: "text-sm font-medium",
151
+ children: "Schedule"
152
+ }), /* @__PURE__ */ c("select", {
153
+ className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
154
+ value: x.schedule,
155
+ onChange: (e) => S({
156
+ ...x,
157
+ schedule: e.target.value
158
+ }),
159
+ children: w.map((e) => /* @__PURE__ */ c("option", {
160
+ value: e,
161
+ children: e
162
+ }, e))
163
+ })] })
164
+ ]
165
+ })
166
+ ]
167
+ })] })]
168
+ });
169
+ }
170
+ //#endregion
171
+ export { _ as ReportsCreateReportPagePage };
172
+
173
+ //# sourceMappingURL=ReportsCreateReportPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportsCreateReportPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ReportsCreateReportPagePage.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, Button, Input } from '@burdenoff/fe-libs/ui';\nimport { Save, X, BarChart3 } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\n\nconst GET_PROJECTS_FOR_REPORT = gql`\n query GetProjectsForReport($workspaceId: ID!, $pagination: PaginationInput) {\n planmagnetProjects(workspaceId: $workspaceId, pagination: $pagination) {\n items {\n id\n name\n key\n }\n totalCount\n }\n }\n`;\n\ninterface ProjectNode {\n id: string;\n name: string;\n key: string;\n}\n\ninterface ProjectsData {\n projects: { items: ProjectNode[]; totalCount: number };\n}\n\nexport function ReportsCreateReportPagePage() {\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n\n const { data, loading, error } = useQuery<ProjectsData>(GET_PROJECTS_FOR_REPORT, {\n variables: {\n workspaceId,\n pagination: { first: 100 },\n },\n skip: !workspaceId,\n });\n\n const [form, setForm] = useState({\n name: '',\n description: '',\n type: 'velocity',\n projectId: '',\n schedule: 'weekly',\n });\n const types = [\n 'velocity',\n 'burndown',\n 'burnup',\n 'cumulative_flow',\n 'cycle_time',\n 'lead_time',\n 'custom',\n ] as const;\n const schedules = ['daily', 'weekly', 'monthly'] as const;\n\n const projects = data?.planmagnetProjects?.items ?? [];\n\n const handleCreate = () => {\n if (!form.name.trim()) return;\n navigate('/reports');\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 }\n\n if (error) {\n return <div className=\"p-6 text-red-500\">Error: {error.message}</div>;\n }\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Create Report</h1>\n <p className=\"text-sm text-muted-foreground\">Configure a new automated report.</p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => navigate('/reports')}>\n <X className=\"mr-1 h-4 w-4\" />\n Cancel\n </Button>\n <Button size=\"sm\" onClick={handleCreate}>\n <Save className=\"mr-1 h-4 w-4\" />\n Create Report\n </Button>\n </div>\n </div>\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <BarChart3 className=\"h-4 w-4\" />\n Report Configuration\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <label className=\"text-sm font-medium\">Report Name</label>\n <Input\n value={form.name}\n onChange={(e) => setForm({ ...form, name: e.target.value })}\n className=\"mt-1\"\n placeholder=\"e.g. Sprint Velocity Report\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Description</label>\n <textarea\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[80px]\"\n value={form.description}\n onChange={(e) => setForm({ ...form, description: e.target.value })}\n placeholder=\"What does this report track?\"\n />\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Type</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.type}\n onChange={(e) => setForm({ ...form, type: e.target.value })}\n >\n {types.map((t) => (\n <option key={t} value={t}>\n {t.replace('_', ' ')}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Project (optional)</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.projectId}\n onChange={(e) => setForm({ ...form, projectId: e.target.value })}\n >\n <option value=\"\">All projects</option>\n {projects.map((p) => (\n <option key={p.id} value={p.id}>\n {p.name} ({p.key})\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Schedule</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.schedule}\n onChange={(e) => setForm({ ...form, schedule: e.target.value })}\n >\n {schedules.map((s) => (\n <option key={s} value={s}>\n {s}\n </option>\n ))}\n </select>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function ReportsReportsPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=ReportsReportsPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportsReportsPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ReportsReportsPagePage.tsx"],"names":[],"mappings":"AA6FA,wBAAgB,sBAAsB,4CAoKrC"}
@@ -0,0 +1,221 @@
1
+ import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
2
+ import { useState as n } from "react";
3
+ import { BarChart3 as r, Calendar as i, Clock as a, Plus as o } from "lucide-react";
4
+ import { gql as s } from "@apollo/client";
5
+ import { useQuery as c } from "@apollo/client/react";
6
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
7
+ import { Button as d, Card as f, CardContent as p, CardHeader as m, CardTitle as h } from "@burdenoff/fe-libs/ui";
8
+ //#region src/planmagnet/pages/ReportsReportsPagePage.tsx
9
+ var g = s`
10
+ query GetReportsData(
11
+ $workspaceId: ID!
12
+ $projectPagination: PaginationInput
13
+ $sprintPagination: PaginationInput
14
+ $workItemPagination: PaginationInput
15
+ ) {
16
+ planmagnetProjects(workspaceId: $workspaceId, pagination: $projectPagination) {
17
+ items {
18
+ id
19
+ name
20
+ key
21
+ status
22
+ methodology
23
+ startDate
24
+ endDate
25
+ }
26
+ totalCount
27
+ }
28
+ planmagnetSprints(workspaceId: $workspaceId, pagination: $sprintPagination) {
29
+ items {
30
+ id
31
+ name
32
+ status
33
+ velocity
34
+ startDate
35
+ endDate
36
+ }
37
+ totalCount
38
+ }
39
+ planmagnetWorkItems(workspaceId: $workspaceId, pagination: $workItemPagination) {
40
+ items {
41
+ id
42
+ status
43
+ storyPoints
44
+ createdAt
45
+ }
46
+ totalCount
47
+ }
48
+ }
49
+ `, _ = {
50
+ velocity: "bg-blue-100 text-blue-800",
51
+ burndown: "bg-orange-100 text-orange-800",
52
+ burnup: "bg-green-100 text-green-800",
53
+ cumulative_flow: "bg-purple-100 text-purple-800",
54
+ cycle_time: "bg-yellow-100 text-yellow-800",
55
+ lead_time: "bg-pink-100 text-pink-800",
56
+ project_status: "bg-gray-100 text-gray-800"
57
+ };
58
+ function v() {
59
+ let { workspaceId: s, currentUser: v } = e(), y = t(), [b, x] = n("all"), { data: S, loading: C, error: w } = c(g, {
60
+ variables: {
61
+ workspaceId: s,
62
+ projectPagination: { first: 100 },
63
+ sprintPagination: { first: 100 },
64
+ workItemPagination: { first: 500 }
65
+ },
66
+ skip: !s
67
+ });
68
+ if (C) return /* @__PURE__ */ l("div", {
69
+ className: "flex items-center justify-center p-12",
70
+ children: /* @__PURE__ */ l("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
71
+ });
72
+ if (w) return /* @__PURE__ */ u("div", {
73
+ className: "p-6 text-red-500",
74
+ children: ["Error: ", w.message]
75
+ });
76
+ let T = S?.planmagnetProjects?.items ?? [], E = S?.planmagnetSprints?.items ?? [];
77
+ S?.planmagnetWorkItems?.items;
78
+ let D = E.filter((e) => e.status === "COMPLETED"), O = E.filter((e) => e.status === "ACTIVE"), k = v?.name ?? v?.firstName ?? "System", A = [
79
+ ...D.map((e) => ({
80
+ id: `velocity-${e.id}`,
81
+ name: `${e.name} Velocity Report`,
82
+ description: `Velocity analysis for ${e.name} (${e.velocity ?? 0} pts)`,
83
+ type: "velocity",
84
+ createdBy: k,
85
+ lastRun: e.endDate ?? "",
86
+ schedule: null
87
+ })),
88
+ ...O.map((e) => ({
89
+ id: `burndown-${e.id}`,
90
+ name: `${e.name} Burndown`,
91
+ description: `Active burndown tracking for ${e.name}`,
92
+ type: "burndown",
93
+ createdBy: k,
94
+ lastRun: (/* @__PURE__ */ new Date()).toISOString().split("T")[0],
95
+ schedule: "daily"
96
+ })),
97
+ ...T.filter((e) => e.status === "ACTIVE").map((e) => ({
98
+ id: `status-${e.id}`,
99
+ name: `${e.name} Status Report`,
100
+ description: `Project status overview for ${e.key}`,
101
+ type: "project_status",
102
+ createdBy: k,
103
+ lastRun: (/* @__PURE__ */ new Date()).toISOString().split("T")[0],
104
+ schedule: "weekly"
105
+ }))
106
+ ], j = ["all", ...new Set(A.map((e) => e.type))], M = b === "all" ? A : A.filter((e) => e.type === b), N = A.filter((e) => e.schedule).length, P = (/* @__PURE__ */ new Date()).toISOString().split("T")[0], F = A.filter((e) => e.lastRun === P).length;
107
+ return /* @__PURE__ */ u("div", {
108
+ className: "space-y-6 p-6",
109
+ children: [
110
+ /* @__PURE__ */ u("div", {
111
+ className: "flex items-center justify-between",
112
+ children: [/* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("h1", {
113
+ className: "text-2xl font-semibold",
114
+ children: "Reports"
115
+ }), /* @__PURE__ */ u("p", {
116
+ className: "text-sm text-muted-foreground",
117
+ children: [A.length, " reports configured"]
118
+ })] }), /* @__PURE__ */ u(d, {
119
+ size: "sm",
120
+ onClick: () => y("/reports/create"),
121
+ children: [/* @__PURE__ */ l(o, { className: "mr-1 h-4 w-4" }), "New Report"]
122
+ })]
123
+ }),
124
+ /* @__PURE__ */ u("div", {
125
+ className: "grid grid-cols-3 gap-4",
126
+ children: [
127
+ /* @__PURE__ */ l(f, { children: /* @__PURE__ */ u(p, {
128
+ className: "pt-4",
129
+ children: [/* @__PURE__ */ l("p", {
130
+ className: "text-xs text-muted-foreground",
131
+ children: "Total Reports"
132
+ }), /* @__PURE__ */ l("p", {
133
+ className: "text-xl font-bold",
134
+ children: A.length
135
+ })]
136
+ }) }),
137
+ /* @__PURE__ */ l(f, { children: /* @__PURE__ */ u(p, {
138
+ className: "pt-4",
139
+ children: [/* @__PURE__ */ l("p", {
140
+ className: "text-xs text-muted-foreground",
141
+ children: "Scheduled"
142
+ }), /* @__PURE__ */ l("p", {
143
+ className: "text-xl font-bold",
144
+ children: N
145
+ })]
146
+ }) }),
147
+ /* @__PURE__ */ l(f, { children: /* @__PURE__ */ u(p, {
148
+ className: "pt-4",
149
+ children: [/* @__PURE__ */ l("p", {
150
+ className: "text-xs text-muted-foreground",
151
+ children: "Run Today"
152
+ }), /* @__PURE__ */ l("p", {
153
+ className: "text-xl font-bold",
154
+ children: F
155
+ })]
156
+ }) })
157
+ ]
158
+ }),
159
+ /* @__PURE__ */ l("div", {
160
+ className: "flex gap-1",
161
+ children: j.map((e) => /* @__PURE__ */ l("button", {
162
+ onClick: () => x(e),
163
+ className: `px-3 py-1.5 text-sm rounded-md capitalize ${b === e ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-muted"}`,
164
+ children: e === "all" ? "All" : e.replace("_", " ")
165
+ }, e))
166
+ }),
167
+ /* @__PURE__ */ u("div", {
168
+ className: "grid grid-cols-1 md:grid-cols-2 gap-4",
169
+ children: [M.map((e) => /* @__PURE__ */ u(f, { children: [/* @__PURE__ */ l(m, {
170
+ className: "pb-2",
171
+ children: /* @__PURE__ */ u("div", {
172
+ className: "flex items-center justify-between",
173
+ children: [/* @__PURE__ */ u(h, {
174
+ className: "text-base flex items-center gap-2",
175
+ children: [/* @__PURE__ */ l(r, { className: "h-4 w-4 text-primary" }), e.name]
176
+ }), /* @__PURE__ */ l("span", {
177
+ className: `text-xs px-2 py-0.5 rounded-full capitalize ${_[e.type] ?? "bg-gray-100"}`,
178
+ children: e.type.replace("_", " ")
179
+ })]
180
+ })
181
+ }), /* @__PURE__ */ u(p, {
182
+ className: "space-y-2",
183
+ children: [/* @__PURE__ */ l("p", {
184
+ className: "text-sm text-muted-foreground",
185
+ children: e.description
186
+ }), /* @__PURE__ */ u("div", {
187
+ className: "flex gap-3 text-xs text-muted-foreground",
188
+ children: [
189
+ e.schedule && /* @__PURE__ */ u("span", {
190
+ className: "flex items-center gap-1",
191
+ children: [/* @__PURE__ */ l(a, { className: "h-3 w-3" }), e.schedule]
192
+ }),
193
+ e.lastRun && /* @__PURE__ */ u("span", {
194
+ className: "flex items-center gap-1",
195
+ children: [
196
+ /* @__PURE__ */ l(i, { className: "h-3 w-3" }),
197
+ "Last: ",
198
+ e.lastRun
199
+ ]
200
+ }),
201
+ /* @__PURE__ */ l("span", {
202
+ className: "flex items-center gap-1",
203
+ children: e.createdBy
204
+ })
205
+ ]
206
+ })]
207
+ })] }, e.id)), M.length === 0 && /* @__PURE__ */ u("div", {
208
+ className: "col-span-2 text-center py-12",
209
+ children: [/* @__PURE__ */ l(r, { className: "h-12 w-12 text-muted-foreground mx-auto mb-3" }), /* @__PURE__ */ l("p", {
210
+ className: "text-sm text-muted-foreground",
211
+ children: "No reports found for the selected filter."
212
+ })]
213
+ })]
214
+ })
215
+ ]
216
+ });
217
+ }
218
+ //#endregion
219
+ export { v as ReportsReportsPagePage };
220
+
221
+ //# sourceMappingURL=ReportsReportsPagePage.js.map