@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,350 @@
1
+ import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
+ import { AlertTriangle as t, ArrowUpRight as n, Calendar as r, CheckSquare as i, FolderKanban as a, LayoutDashboard as o, TrendingUp as s, Users as c, Zap as l } from "lucide-react";
3
+ import { gql as u } from "@apollo/client";
4
+ import { useQuery as d } from "@apollo/client/react";
5
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
6
+ import { useI18n as m } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
+ import { Badge as h, Card as g, CardContent as _, CardHeader as v, CardTitle as y } from "@burdenoff/fe-libs/ui";
8
+ //#region src/planmagnet/pages/DashboardDashboardPagePage.tsx
9
+ var b = u`
10
+ query GetDashboardData($workspaceId: ID!) {
11
+ planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 50 }) {
12
+ items {
13
+ id
14
+ name
15
+ description
16
+ key
17
+ status
18
+ methodology
19
+ ownerId
20
+ startDate
21
+ endDate
22
+ tags
23
+ createdAt
24
+ }
25
+ totalCount
26
+ }
27
+ planmagnetSprints(workspaceId: $workspaceId, pagination: { first: 50 }) {
28
+ items {
29
+ id
30
+ name
31
+ projectId
32
+ status
33
+ startDate
34
+ endDate
35
+ goal
36
+ capacity
37
+ velocity
38
+ workItems {
39
+ id
40
+ status
41
+ storyPoints
42
+ }
43
+ }
44
+ totalCount
45
+ }
46
+ planmagnetMilestones(workspaceId: $workspaceId, pagination: { first: 50 }) {
47
+ items {
48
+ id
49
+ name
50
+ description
51
+ projectId
52
+ status
53
+ dueDate
54
+ ownerId
55
+ createdAt
56
+ }
57
+ totalCount
58
+ }
59
+ planmagnetWorkItems(workspaceId: $workspaceId, pagination: { first: 20 }) {
60
+ items {
61
+ id
62
+ key
63
+ description
64
+ status
65
+ priority
66
+ storyPoints
67
+ assigneeId
68
+ projectId
69
+ labels
70
+ createdAt
71
+ }
72
+ totalCount
73
+ }
74
+ }
75
+ `;
76
+ function x() {
77
+ let { workspaceId: u } = e(), { t: x } = m(), { data: S, loading: C, error: w } = d(b, { variables: { workspaceId: u ?? "default" } });
78
+ if (C) return /* @__PURE__ */ f("div", {
79
+ className: "flex items-center justify-center p-12",
80
+ children: /* @__PURE__ */ f("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
81
+ });
82
+ if (w) return /* @__PURE__ */ p("div", {
83
+ className: "p-6 text-red-500",
84
+ children: [
85
+ x("planmagnet.dashboard.errorLoading", "Error loading dashboard"),
86
+ ": ",
87
+ w.message
88
+ ]
89
+ });
90
+ let T = S?.planmagnetProjects?.items ?? [], E = S?.planmagnetSprints?.items ?? [], D = S?.planmagnetMilestones?.items ?? [], O = S?.planmagnetWorkItems?.items ?? [], k = T.filter((e) => e.status === "ACTIVE");
91
+ T.filter((e) => e.status === "COMPLETED");
92
+ let A = E.filter((e) => e.status === "ACTIVE"), j = D.filter((e) => e.status === "PENDING" || e.status === "IN_PROGRESS").slice(0, 4), M = O.slice(0, 5), N = [
93
+ {
94
+ label: x("planmagnet.dashboard.metrics.totalProjects.label", "Total Projects"),
95
+ value: String(T.length),
96
+ trend: `${k.length} ${x("planmagnet.dashboard.metrics.totalProjects.trend", "active")}`
97
+ },
98
+ {
99
+ label: x("planmagnet.dashboard.metrics.activeSprints.label", "Active Sprints"),
100
+ value: String(A.length),
101
+ trend: `${E.length} ${x("planmagnet.dashboard.metrics.activeSprints.trend", "total")}`
102
+ },
103
+ {
104
+ label: x("planmagnet.dashboard.metrics.workItems.label", "Work Items"),
105
+ value: String(S?.planmagnetWorkItems?.totalCount ?? 0),
106
+ trend: x("planmagnet.dashboard.metrics.workItems.trend", "across all projects")
107
+ },
108
+ {
109
+ label: x("planmagnet.dashboard.metrics.milestones.label", "Milestones"),
110
+ value: String(D.length),
111
+ trend: `${j.length} ${x("planmagnet.dashboard.metrics.milestones.trend", "upcoming")}`
112
+ }
113
+ ];
114
+ return /* @__PURE__ */ p("div", {
115
+ className: "space-y-6 p-6",
116
+ children: [
117
+ /* @__PURE__ */ f("div", {
118
+ className: "flex items-center justify-between",
119
+ children: /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ p("h1", {
120
+ className: "text-2xl font-semibold flex items-center gap-2",
121
+ children: [/* @__PURE__ */ f(o, { className: "h-6 w-6" }), x("planmagnet.dashboard.title", "Dashboard")]
122
+ }), /* @__PURE__ */ f("p", {
123
+ className: "text-sm text-muted-foreground mt-1",
124
+ children: x("planmagnet.dashboard.subtitle", "Welcome back! Here is your project overview.")
125
+ })] })
126
+ }),
127
+ /* @__PURE__ */ f("div", {
128
+ className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
129
+ children: N.map((e) => /* @__PURE__ */ p(g, { children: [/* @__PURE__ */ p(v, {
130
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
131
+ children: [/* @__PURE__ */ f(y, {
132
+ className: "text-sm font-medium",
133
+ children: e.label
134
+ }), /* @__PURE__ */ f(s, { className: "h-4 w-4 text-muted-foreground" })]
135
+ }), /* @__PURE__ */ p(_, { children: [/* @__PURE__ */ f("div", {
136
+ className: "text-2xl font-bold",
137
+ children: e.value
138
+ }), /* @__PURE__ */ f("p", {
139
+ className: "text-xs text-muted-foreground",
140
+ children: e.trend
141
+ })] })] }, e.label))
142
+ }),
143
+ /* @__PURE__ */ p("div", {
144
+ className: "grid gap-6 lg:grid-cols-12",
145
+ children: [/* @__PURE__ */ p(g, {
146
+ className: "lg:col-span-8",
147
+ children: [/* @__PURE__ */ f(v, { children: /* @__PURE__ */ p(y, {
148
+ className: "flex items-center gap-2 text-base",
149
+ children: [/* @__PURE__ */ f(l, { className: "h-5 w-5 text-blue-500" }), x("planmagnet.dashboard.activeSprints.title", "Active Sprints")]
150
+ }) }), /* @__PURE__ */ p(_, {
151
+ className: "space-y-4",
152
+ children: [A.map((e) => {
153
+ let t = e.workItems.reduce((e, t) => e + (t.storyPoints ?? 0), 0), n = e.workItems.filter((e) => e.status === "DONE").reduce((e, t) => e + (t.storyPoints ?? 0), 0), r = e.workItems.length, i = e.workItems.filter((e) => e.status === "DONE").length, a = t > 0 ? Math.round(n / t * 100) : 0;
154
+ return /* @__PURE__ */ p("div", {
155
+ className: "rounded-lg border p-4",
156
+ children: [
157
+ /* @__PURE__ */ p("div", {
158
+ className: "flex items-center justify-between mb-2",
159
+ children: [/* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("p", {
160
+ className: "font-medium",
161
+ children: e.name
162
+ }), /* @__PURE__ */ p("p", {
163
+ className: "text-xs text-muted-foreground",
164
+ children: [
165
+ x("planmagnet.dashboard.shared.project", "Project"),
166
+ ": ",
167
+ e.projectId
168
+ ]
169
+ })] }), /* @__PURE__ */ p(h, {
170
+ variant: "secondary",
171
+ children: [
172
+ n,
173
+ "/",
174
+ t,
175
+ " ",
176
+ x("planmagnet.dashboard.shared.pointsShort", "pts")
177
+ ]
178
+ })]
179
+ }),
180
+ /* @__PURE__ */ f("div", {
181
+ className: "w-full h-2 bg-muted rounded-full overflow-hidden",
182
+ children: /* @__PURE__ */ f("div", {
183
+ className: "h-full bg-primary rounded-full transition-all",
184
+ style: { width: `${a}%` }
185
+ })
186
+ }),
187
+ /* @__PURE__ */ p("div", {
188
+ className: "flex items-center justify-between mt-2 text-xs text-muted-foreground",
189
+ children: [/* @__PURE__ */ p("span", { children: [
190
+ i,
191
+ "/",
192
+ r,
193
+ " ",
194
+ x("planmagnet.dashboard.shared.tasks", "tasks")
195
+ ] }), /* @__PURE__ */ p("span", { children: [
196
+ e.startDate ? new Date(e.startDate).toLocaleDateString() : "—",
197
+ " -",
198
+ " ",
199
+ e.endDate ? new Date(e.endDate).toLocaleDateString() : "—"
200
+ ] })]
201
+ })
202
+ ]
203
+ }, e.id);
204
+ }), A.length === 0 && /* @__PURE__ */ f("p", {
205
+ className: "text-sm text-muted-foreground text-center py-4",
206
+ children: x("planmagnet.dashboard.activeSprints.empty", "No active sprints.")
207
+ })]
208
+ })]
209
+ }), /* @__PURE__ */ p("div", {
210
+ className: "lg:col-span-4 space-y-6",
211
+ children: [T.filter((e) => e.status === "ON_HOLD").length > 0 && /* @__PURE__ */ p(g, { children: [/* @__PURE__ */ f(v, { children: /* @__PURE__ */ p(y, {
212
+ className: "flex items-center gap-2 text-base",
213
+ children: [/* @__PURE__ */ f(t, { className: "h-5 w-5 text-orange-500" }), x("planmagnet.dashboard.onHoldProjects.title", "On-Hold Projects")]
214
+ }) }), /* @__PURE__ */ f(_, {
215
+ className: "space-y-3",
216
+ children: T.filter((e) => e.status === "ON_HOLD").map((e) => /* @__PURE__ */ p("div", {
217
+ className: "flex items-center justify-between rounded border p-2",
218
+ children: [/* @__PURE__ */ f("div", { children: /* @__PURE__ */ f("p", {
219
+ className: "text-sm font-medium",
220
+ children: e.name
221
+ }) }), /* @__PURE__ */ f(h, {
222
+ variant: "destructive",
223
+ children: e.status.toLowerCase().replace("_", " ")
224
+ })]
225
+ }, e.id))
226
+ })] }), /* @__PURE__ */ p(g, { children: [/* @__PURE__ */ f(v, { children: /* @__PURE__ */ p(y, {
227
+ className: "flex items-center gap-2 text-base",
228
+ children: [/* @__PURE__ */ f(r, { className: "h-5 w-5 text-green-500" }), x("planmagnet.dashboard.upcomingMilestones.title", "Upcoming Milestones")]
229
+ }) }), /* @__PURE__ */ p(_, {
230
+ className: "space-y-3",
231
+ children: [j.map((e) => /* @__PURE__ */ p("div", {
232
+ className: "flex items-start gap-3 rounded border p-2",
233
+ children: [/* @__PURE__ */ p("div", {
234
+ className: "flex-1 min-w-0",
235
+ children: [
236
+ /* @__PURE__ */ f("p", {
237
+ className: "text-sm font-medium truncate",
238
+ children: e.name
239
+ }),
240
+ /* @__PURE__ */ p("p", {
241
+ className: "text-xs text-muted-foreground",
242
+ children: [
243
+ x("planmagnet.dashboard.shared.project", "Project"),
244
+ ": ",
245
+ e.projectId
246
+ ]
247
+ }),
248
+ /* @__PURE__ */ p("p", {
249
+ className: "text-xs text-muted-foreground",
250
+ children: [
251
+ x("planmagnet.dashboard.shared.due", "Due"),
252
+ " ",
253
+ e.dueDate ? new Date(e.dueDate).toLocaleDateString() : "—"
254
+ ]
255
+ })
256
+ ]
257
+ }), /* @__PURE__ */ f(h, {
258
+ variant: "secondary",
259
+ className: "text-xs flex-shrink-0 capitalize",
260
+ children: e.status.toLowerCase().replace("_", " ")
261
+ })]
262
+ }, e.id)), j.length === 0 && /* @__PURE__ */ f("p", {
263
+ className: "text-sm text-muted-foreground text-center py-2",
264
+ children: x("planmagnet.dashboard.upcomingMilestones.empty", "No upcoming milestones.")
265
+ })]
266
+ })] })]
267
+ })]
268
+ }),
269
+ /* @__PURE__ */ p("div", {
270
+ className: "grid gap-6 lg:grid-cols-2",
271
+ children: [/* @__PURE__ */ p(g, { children: [/* @__PURE__ */ f(v, { children: /* @__PURE__ */ p(y, {
272
+ className: "flex items-center gap-2 text-base",
273
+ children: [/* @__PURE__ */ f(i, { className: "h-5 w-5 text-purple-500" }), x("planmagnet.dashboard.recentWorkItems.title", "Recent Work Items")]
274
+ }) }), /* @__PURE__ */ p(_, {
275
+ className: "space-y-3",
276
+ children: [M.map((e) => /* @__PURE__ */ p("div", {
277
+ className: "flex items-center justify-between rounded border p-2",
278
+ children: [/* @__PURE__ */ p("div", {
279
+ className: "min-w-0 flex-1",
280
+ children: [/* @__PURE__ */ f("p", {
281
+ className: "text-sm font-medium truncate",
282
+ children: e.key
283
+ }), /* @__PURE__ */ p("p", {
284
+ className: "text-xs text-muted-foreground",
285
+ children: [
286
+ e.projectId,
287
+ " ",
288
+ e.assigneeId ? `\u00b7 ${e.assigneeId}` : ""
289
+ ]
290
+ })]
291
+ }), /* @__PURE__ */ p("div", {
292
+ className: "flex items-center gap-2 flex-shrink-0",
293
+ children: [/* @__PURE__ */ p(h, {
294
+ variant: "outline",
295
+ className: "text-xs",
296
+ children: [
297
+ e.storyPoints ?? 0,
298
+ " ",
299
+ x("planmagnet.dashboard.shared.pointsShort", "pts")
300
+ ]
301
+ }), /* @__PURE__ */ f(h, {
302
+ variant: "secondary",
303
+ className: "text-xs capitalize",
304
+ children: e.status.toLowerCase().replace("_", " ")
305
+ })]
306
+ })]
307
+ }, e.id)), M.length === 0 && /* @__PURE__ */ f("p", {
308
+ className: "text-sm text-muted-foreground text-center py-4",
309
+ children: x("planmagnet.dashboard.recentWorkItems.empty", "No work items yet.")
310
+ })]
311
+ })] }), /* @__PURE__ */ p(g, { children: [/* @__PURE__ */ f(v, { children: /* @__PURE__ */ p(y, {
312
+ className: "flex items-center gap-2 text-base",
313
+ children: [/* @__PURE__ */ f(a, { className: "h-5 w-5 text-cyan-500" }), x("planmagnet.dashboard.projectStatus.title", "Project Status")]
314
+ }) }), /* @__PURE__ */ p(_, {
315
+ className: "space-y-3",
316
+ children: [k.map((e) => /* @__PURE__ */ p("div", {
317
+ className: "flex items-center justify-between rounded border p-2",
318
+ children: [/* @__PURE__ */ p("div", {
319
+ className: "min-w-0 flex-1",
320
+ children: [/* @__PURE__ */ f("p", {
321
+ className: "text-sm font-medium truncate",
322
+ children: e.name
323
+ }), /* @__PURE__ */ f("p", {
324
+ className: "text-xs text-muted-foreground capitalize",
325
+ children: e.status.toLowerCase().replace("_", " ")
326
+ })]
327
+ }), /* @__PURE__ */ p("div", {
328
+ className: "flex items-center gap-2 ml-3 flex-shrink-0",
329
+ children: [
330
+ /* @__PURE__ */ f(c, { className: "h-3 w-3 text-muted-foreground" }),
331
+ /* @__PURE__ */ f("span", {
332
+ className: "text-xs text-muted-foreground",
333
+ children: e.ownerId
334
+ }),
335
+ /* @__PURE__ */ f(n, { className: "h-3 w-3 text-muted-foreground" })
336
+ ]
337
+ })]
338
+ }, e.id)), k.length === 0 && /* @__PURE__ */ f("p", {
339
+ className: "text-sm text-muted-foreground text-center py-4",
340
+ children: x("planmagnet.dashboard.projectStatus.empty", "No active projects.")
341
+ })]
342
+ })] })]
343
+ })
344
+ ]
345
+ });
346
+ }
347
+ //#endregion
348
+ export { x as DashboardDashboardPagePage };
349
+
350
+ //# sourceMappingURL=DashboardDashboardPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardDashboardPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/DashboardDashboardPagePage.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 { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n LayoutDashboard,\n FolderKanban,\n CheckSquare,\n Zap,\n Users,\n Calendar,\n TrendingUp,\n AlertTriangle,\n ArrowUpRight,\n} from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\nconst GET_DASHBOARD_DATA = gql`\n query GetDashboardData($workspaceId: ID!) {\n planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 50 }) {\n items {\n id\n name\n description\n key\n status\n methodology\n ownerId\n startDate\n endDate\n tags\n createdAt\n }\n totalCount\n }\n planmagnetSprints(workspaceId: $workspaceId, pagination: { first: 50 }) {\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 status\n storyPoints\n }\n }\n totalCount\n }\n planmagnetMilestones(workspaceId: $workspaceId, pagination: { first: 50 }) {\n items {\n id\n name\n description\n projectId\n status\n dueDate\n ownerId\n createdAt\n }\n totalCount\n }\n planmagnetWorkItems(workspaceId: $workspaceId, pagination: { first: 20 }) {\n items {\n id\n key\n description\n status\n priority\n storyPoints\n assigneeId\n projectId\n labels\n createdAt\n }\n totalCount\n }\n }\n`;\n\nexport function DashboardDashboardPagePage() {\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_DASHBOARD_DATA, {\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.dashboard.errorLoading', 'Error loading dashboard')}: {error.message}\n </div>\n );\n\n const projects = data?.planmagnetProjects?.items ?? [];\n const sprints = data?.planmagnetSprints?.items ?? [];\n const milestones = data?.planmagnetMilestones?.items ?? [];\n const workItems = data?.planmagnetWorkItems?.items ?? [];\n\n const activeProjects = projects.filter((p: { status: string }) => p.status === 'ACTIVE');\n const completedProjects = projects.filter((p: { status: string }) => p.status === 'COMPLETED');\n const activeSprints = sprints.filter((s: { status: string }) => s.status === 'ACTIVE');\n const upcomingMilestones = milestones\n .filter((m: { status: string }) => m.status === 'PENDING' || m.status === 'IN_PROGRESS')\n .slice(0, 4);\n const recentWorkItems = workItems.slice(0, 5);\n\n const metrics = [\n {\n label: t('planmagnet.dashboard.metrics.totalProjects.label', 'Total Projects'),\n value: String(projects.length),\n trend: `${activeProjects.length} ${t('planmagnet.dashboard.metrics.totalProjects.trend', 'active')}`,\n },\n {\n label: t('planmagnet.dashboard.metrics.activeSprints.label', 'Active Sprints'),\n value: String(activeSprints.length),\n trend: `${sprints.length} ${t('planmagnet.dashboard.metrics.activeSprints.trend', 'total')}`,\n },\n {\n label: t('planmagnet.dashboard.metrics.workItems.label', 'Work Items'),\n value: String(data?.planmagnetWorkItems?.totalCount ?? 0),\n trend: t('planmagnet.dashboard.metrics.workItems.trend', 'across all projects'),\n },\n {\n label: t('planmagnet.dashboard.metrics.milestones.label', 'Milestones'),\n value: String(milestones.length),\n trend: `${upcomingMilestones.length} ${t('planmagnet.dashboard.metrics.milestones.trend', 'upcoming')}`,\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 flex items-center gap-2\">\n <LayoutDashboard className=\"h-6 w-6\" />\n {t('planmagnet.dashboard.title', 'Dashboard')}\n </h1>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {t('planmagnet.dashboard.subtitle', 'Welcome back! Here is your project overview.')}\n </p>\n </div>\n </div>\n\n {/* KPI Metrics */}\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n {metrics.map((m) => (\n <Card key={m.label}>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">{m.label}</CardTitle>\n <TrendingUp className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{m.value}</div>\n <p className=\"text-xs text-muted-foreground\">{m.trend}</p>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-12\">\n {/* Active Sprints */}\n <Card className=\"lg:col-span-8\">\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Zap className=\"h-5 w-5 text-blue-500\" />\n {t('planmagnet.dashboard.activeSprints.title', 'Active Sprints')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {activeSprints.map(\n (sprint: {\n id: string;\n name: string;\n projectId: string;\n capacity: number | null;\n velocity: number | null;\n startDate: string | null;\n endDate: string | null;\n workItems: { id: string; status: string; storyPoints: number | null }[];\n }) => {\n const totalPoints = sprint.workItems.reduce(\n (sum: number, wi: { storyPoints: number | null }) => sum + (wi.storyPoints ?? 0),\n 0\n );\n const completedPoints = sprint.workItems\n .filter((wi: { status: string }) => wi.status === 'DONE')\n .reduce(\n (sum: number, wi: { storyPoints: number | null }) =>\n sum + (wi.storyPoints ?? 0),\n 0\n );\n const totalTasks = sprint.workItems.length;\n const completedTasks = sprint.workItems.filter(\n (wi: { status: string }) => wi.status === 'DONE'\n ).length;\n const pct = totalPoints > 0 ? Math.round((completedPoints / totalPoints) * 100) : 0;\n return (\n <div key={sprint.id} className=\"rounded-lg border p-4\">\n <div className=\"flex items-center justify-between mb-2\">\n <div>\n <p className=\"font-medium\">{sprint.name}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.dashboard.shared.project', 'Project')}: {sprint.projectId}\n </p>\n </div>\n <Badge variant=\"secondary\">\n {completedPoints}/{totalPoints}{' '}\n {t('planmagnet.dashboard.shared.pointsShort', 'pts')}\n </Badge>\n </div>\n <div className=\"w-full h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-primary rounded-full transition-all\"\n style={{ width: `${pct}%` }}\n />\n </div>\n <div className=\"flex items-center justify-between mt-2 text-xs text-muted-foreground\">\n <span>\n {completedTasks}/{totalTasks}{' '}\n {t('planmagnet.dashboard.shared.tasks', 'tasks')}\n </span>\n <span>\n {sprint.startDate ? new Date(sprint.startDate).toLocaleDateString() : '—'} -{' '}\n {sprint.endDate ? new Date(sprint.endDate).toLocaleDateString() : '—'}\n </span>\n </div>\n </div>\n );\n }\n )}\n {activeSprints.length === 0 && (\n <p className=\"text-sm text-muted-foreground text-center py-4\">\n {t('planmagnet.dashboard.activeSprints.empty', 'No active sprints.')}\n </p>\n )}\n </CardContent>\n </Card>\n\n {/* Sidebar */}\n <div className=\"lg:col-span-4 space-y-6\">\n {/* On-Hold Projects */}\n {projects.filter((p: { status: string }) => p.status === 'ON_HOLD').length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <AlertTriangle className=\"h-5 w-5 text-orange-500\" />\n {t('planmagnet.dashboard.onHoldProjects.title', 'On-Hold Projects')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {projects\n .filter((p: { status: string }) => p.status === 'ON_HOLD')\n .map((p: { id: string; name: string; status: string }) => (\n <div\n key={p.id}\n className=\"flex items-center justify-between rounded border p-2\"\n >\n <div>\n <p className=\"text-sm font-medium\">{p.name}</p>\n </div>\n <Badge variant=\"destructive\">\n {p.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n ))}\n </CardContent>\n </Card>\n )}\n\n {/* Upcoming Milestones */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Calendar className=\"h-5 w-5 text-green-500\" />\n {t('planmagnet.dashboard.upcomingMilestones.title', 'Upcoming Milestones')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {upcomingMilestones.map(\n (ms: {\n id: string;\n name: string;\n projectId: string;\n dueDate: string | null;\n status: string;\n }) => (\n <div key={ms.id} className=\"flex items-start gap-3 rounded border p-2\">\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">{ms.name}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.dashboard.shared.project', 'Project')}: {ms.projectId}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.dashboard.shared.due', 'Due')}{' '}\n {ms.dueDate ? new Date(ms.dueDate).toLocaleDateString() : '—'}\n </p>\n </div>\n <Badge variant=\"secondary\" className=\"text-xs flex-shrink-0 capitalize\">\n {ms.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n )\n )}\n {upcomingMilestones.length === 0 && (\n <p className=\"text-sm text-muted-foreground text-center py-2\">\n {t('planmagnet.dashboard.upcomingMilestones.empty', 'No upcoming milestones.')}\n </p>\n )}\n </CardContent>\n </Card>\n </div>\n </div>\n\n {/* Recent Work Items & Project Status */}\n <div className=\"grid gap-6 lg:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <CheckSquare className=\"h-5 w-5 text-purple-500\" />\n {t('planmagnet.dashboard.recentWorkItems.title', 'Recent Work Items')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {recentWorkItems.map(\n (item: {\n id: string;\n key: string;\n description: string | null;\n status: string;\n storyPoints: number | null;\n assigneeId: string | null;\n projectId: string;\n }) => (\n <div key={item.id} className=\"flex items-center justify-between rounded border p-2\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium truncate\">{item.key}</p>\n <p className=\"text-xs text-muted-foreground\">\n {item.projectId} {item.assigneeId ? `\\u00b7 ${item.assigneeId}` : ''}\n </p>\n </div>\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n <Badge variant=\"outline\" className=\"text-xs\">\n {item.storyPoints ?? 0} {t('planmagnet.dashboard.shared.pointsShort', 'pts')}\n </Badge>\n <Badge variant=\"secondary\" className=\"text-xs capitalize\">\n {item.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n </div>\n )\n )}\n {recentWorkItems.length === 0 && (\n <p className=\"text-sm text-muted-foreground text-center py-4\">\n {t('planmagnet.dashboard.recentWorkItems.empty', 'No work items yet.')}\n </p>\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <FolderKanban className=\"h-5 w-5 text-cyan-500\" />\n {t('planmagnet.dashboard.projectStatus.title', 'Project Status')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {activeProjects.map(\n (p: { id: string; name: string; status: string; ownerId: string }) => (\n <div key={p.id} className=\"flex items-center justify-between rounded border p-2\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium truncate\">{p.name}</p>\n <p className=\"text-xs text-muted-foreground capitalize\">\n {p.status.toLowerCase().replace('_', ' ')}\n </p>\n </div>\n <div className=\"flex items-center gap-2 ml-3 flex-shrink-0\">\n <Users className=\"h-3 w-3 text-muted-foreground\" />\n <span className=\"text-xs text-muted-foreground\">{p.ownerId}</span>\n <ArrowUpRight className=\"h-3 w-3 text-muted-foreground\" />\n </div>\n </div>\n )\n )}\n {activeProjects.length === 0 && (\n <p className=\"text-sm text-muted-foreground text-center py-4\">\n {t('planmagnet.dashboard.projectStatus.empty', 'No active projects.')}\n </p>\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 MeetingsScheduleMeetingPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=MeetingsScheduleMeetingPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MeetingsScheduleMeetingPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/MeetingsScheduleMeetingPagePage.tsx"],"names":[],"mappings":"AAiEA,wBAAgB,+BAA+B,4CAwN9C"}