@burdenoff/microfe-planmagnet 2026.927.4 → 2026.927.6

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 (141) hide show
  1. package/dist/generated/global-types.d.ts +9 -1
  2. package/dist/generated/global-types.d.ts.map +1 -1
  3. package/dist/generated/wspace-operations.d.ts +0 -12
  4. package/dist/generated/wspace-operations.d.ts.map +1 -1
  5. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  6. package/dist/planmagnet/PlanMagnetRoutes.js +14 -10
  7. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  8. package/dist/planmagnet/admin/PlanMagnetAdminRoot.d.ts.map +1 -1
  9. package/dist/planmagnet/admin/PlanMagnetAdminRoot.js +149 -127
  10. package/dist/planmagnet/admin/PlanMagnetAdminRoot.js.map +1 -1
  11. package/dist/planmagnet/board/ProjectBoard.d.ts +2 -0
  12. package/dist/planmagnet/board/ProjectBoard.d.ts.map +1 -1
  13. package/dist/planmagnet/board/ProjectBoard.js +492 -225
  14. package/dist/planmagnet/board/ProjectBoard.js.map +1 -1
  15. package/dist/planmagnet/controls/FeatureControls.d.ts.map +1 -1
  16. package/dist/planmagnet/controls/FeatureControls.js +142 -139
  17. package/dist/planmagnet/controls/FeatureControls.js.map +1 -1
  18. package/dist/planmagnet/controls/FeatureTriage.d.ts +21 -0
  19. package/dist/planmagnet/controls/FeatureTriage.d.ts.map +1 -0
  20. package/dist/planmagnet/controls/FeatureTriage.js +398 -0
  21. package/dist/planmagnet/controls/FeatureTriage.js.map +1 -0
  22. package/dist/planmagnet/controls/MilestoneControls.d.ts.map +1 -1
  23. package/dist/planmagnet/controls/MilestoneControls.js +76 -73
  24. package/dist/planmagnet/controls/MilestoneControls.js.map +1 -1
  25. package/dist/planmagnet/controls/ProjectControls.d.ts.map +1 -1
  26. package/dist/planmagnet/controls/ProjectControls.js +47 -44
  27. package/dist/planmagnet/controls/ProjectControls.js.map +1 -1
  28. package/dist/planmagnet/controls/ReleaseControls.d.ts.map +1 -1
  29. package/dist/planmagnet/controls/ReleaseControls.js +47 -44
  30. package/dist/planmagnet/controls/ReleaseControls.js.map +1 -1
  31. package/dist/planmagnet/controls/WorkItemControls.d.ts.map +1 -1
  32. package/dist/planmagnet/controls/WorkItemControls.js +68 -65
  33. package/dist/planmagnet/controls/WorkItemControls.js.map +1 -1
  34. package/dist/planmagnet/hooks/useCounts.d.ts +39 -0
  35. package/dist/planmagnet/hooks/useCounts.d.ts.map +1 -0
  36. package/dist/planmagnet/hooks/useCounts.js +209 -0
  37. package/dist/planmagnet/hooks/useCounts.js.map +1 -0
  38. package/dist/planmagnet/import/exportColumns.d.ts +52 -0
  39. package/dist/planmagnet/import/exportColumns.d.ts.map +1 -0
  40. package/dist/planmagnet/import/exportColumns.js +81 -0
  41. package/dist/planmagnet/import/exportColumns.js.map +1 -0
  42. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -1
  43. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +255 -242
  44. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  45. package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +1 -1
  46. package/dist/planmagnet/pages/DashboardDashboardPagePage.js +199 -160
  47. package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +1 -1
  48. package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts.map +1 -1
  49. package/dist/planmagnet/pages/DocsDocDetailPagePage.js +147 -144
  50. package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
  51. package/dist/planmagnet/pages/GoalsGoalsPagePage.d.ts.map +1 -1
  52. package/dist/planmagnet/pages/GoalsGoalsPagePage.js +2 -7
  53. package/dist/planmagnet/pages/GoalsGoalsPagePage.js.map +1 -1
  54. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.d.ts.map +1 -1
  55. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js +173 -173
  56. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js.map +1 -1
  57. package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts.map +1 -1
  58. package/dist/planmagnet/pages/ProductsEditProductPagePage.js +120 -117
  59. package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +1 -1
  60. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.d.ts.map +1 -1
  61. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js +97 -117
  62. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js.map +1 -1
  63. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +1 -1
  64. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js +168 -103
  65. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +1 -1
  66. package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts.map +1 -1
  67. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js +117 -103
  68. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +1 -1
  69. package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -1
  70. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +4 -8
  71. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
  72. package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +1 -1
  73. package/dist/planmagnet/pages/ProductsProductsPagePage.js +85 -90
  74. package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -1
  75. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts.map +1 -1
  76. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js +12 -2
  77. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js.map +1 -1
  78. package/dist/planmagnet/pages/ProductsReleasesPagePage.d.ts.map +1 -1
  79. package/dist/planmagnet/pages/ProductsReleasesPagePage.js +2 -2
  80. package/dist/planmagnet/pages/ProductsReleasesPagePage.js.map +1 -1
  81. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.d.ts.map +1 -1
  82. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js +48 -71
  83. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js.map +1 -1
  84. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.d.ts.map +1 -1
  85. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js +17 -13
  86. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js.map +1 -1
  87. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.d.ts.map +1 -1
  88. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js +1 -1
  89. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js.map +1 -1
  90. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +6 -6
  91. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
  92. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +11 -8
  93. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
  94. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +4 -4
  95. package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +1 -1
  96. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js +1 -1
  97. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js.map +1 -1
  98. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
  99. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +152 -139
  100. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
  101. package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts.map +1 -1
  102. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +75 -74
  103. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +1 -1
  104. package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts +7 -0
  105. package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts.map +1 -1
  106. package/dist/planmagnet/pages/ReportsReportsPagePage.js +39 -201
  107. package/dist/planmagnet/pages/ReportsReportsPagePage.js.map +1 -1
  108. package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +1 -1
  109. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +118 -99
  110. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +1 -1
  111. package/dist/planmagnet/pages/TasksImportPagePage.d.ts +2 -0
  112. package/dist/planmagnet/pages/TasksImportPagePage.d.ts.map +1 -0
  113. package/dist/planmagnet/pages/TasksImportPagePage.js +309 -0
  114. package/dist/planmagnet/pages/TasksImportPagePage.js.map +1 -0
  115. package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +1 -1
  116. package/dist/planmagnet/pages/TasksTasksPagePage.js +110 -104
  117. package/dist/planmagnet/pages/TasksTasksPagePage.js.map +1 -1
  118. package/dist/planmagnet/pages/TeamTeamPagePage.d.ts.map +1 -1
  119. package/dist/planmagnet/pages/TeamTeamPagePage.js +99 -177
  120. package/dist/planmagnet/pages/TeamTeamPagePage.js.map +1 -1
  121. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts.map +1 -1
  122. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +8 -4
  123. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js.map +1 -1
  124. package/dist/planmagnet/releases/ReleaseWorkItemsCard.d.ts.map +1 -1
  125. package/dist/planmagnet/releases/ReleaseWorkItemsCard.js +10 -4
  126. package/dist/planmagnet/releases/ReleaseWorkItemsCard.js.map +1 -1
  127. package/dist/planmagnet/roadmaps/RoadmapControls.d.ts.map +1 -1
  128. package/dist/planmagnet/roadmaps/RoadmapControls.js +151 -138
  129. package/dist/planmagnet/roadmaps/RoadmapControls.js.map +1 -1
  130. package/dist/planmagnet/sprints/SprintControls.d.ts.map +1 -1
  131. package/dist/planmagnet/sprints/SprintControls.js +32 -30
  132. package/dist/planmagnet/sprints/SprintControls.js.map +1 -1
  133. package/dist/planmagnet/utils/mutationResult.d.ts +10 -0
  134. package/dist/planmagnet/utils/mutationResult.d.ts.map +1 -1
  135. package/dist/planmagnet/utils/mutationResult.js +2 -1
  136. package/dist/planmagnet/utils/mutationResult.js.map +1 -1
  137. package/dist/planmagnet/utils/rowNavigation.d.ts +2 -0
  138. package/dist/planmagnet/utils/rowNavigation.d.ts.map +1 -1
  139. package/dist/planmagnet/utils/rowNavigation.js +9 -8
  140. package/dist/planmagnet/utils/rowNavigation.js.map +1 -1
  141. package/package.json +1 -1
@@ -1,208 +1,237 @@
1
- import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
- import { PersonName as t } from "../people/People.js";
3
- import { AlertTriangle as n, ArrowUpRight as r, Calendar as i, CheckSquare as a, FolderKanban as o, LayoutDashboard as s, TrendingUp as c, Users as l, Zap as u } from "lucide-react";
4
- import { gql as d } from "@apollo/client";
5
- import { useQuery as f } from "@apollo/client/react";
6
- import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
7
- import { useI18n as g } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
- import { Badge as _, Card as v, CardContent as y, CardHeader as b, CardTitle as x } from "@burdenoff/fe-libs/ui";
1
+ import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
2
+ import { PersonName as n } from "../people/People.js";
3
+ import { countLabel as r, useProjectCounts as i, useSprintCounts as a, workProgress as o } from "../hooks/useCounts.js";
4
+ import { ROW_LINK_CLASS as s, detailPath as c, rowLinkProps as l } from "../utils/rowNavigation.js";
5
+ import { AlertTriangle as u, ArrowUpRight as d, Calendar as f, CheckSquare as p, FolderKanban as m, LayoutDashboard as h, TrendingUp as g, Users as _, Zap as v } from "lucide-react";
6
+ import { gql as y } from "@apollo/client";
7
+ import { useQuery as b } from "@apollo/client/react";
8
+ import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
9
+ import { useI18n as w } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
+ import { Badge as T, Card as E, CardContent as D, CardHeader as O, CardTitle as k } from "@burdenoff/fe-libs/ui";
9
11
  //#region src/planmagnet/pages/DashboardDashboardPagePage.tsx
10
- var S = d`
11
- query GetDashboardData($workspaceId: ID!) {
12
- planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 50 }) {
12
+ var A = y`
13
+ query GetDashboardData($workspaceId: ID!, $today: DateTime) {
14
+ activeProjects: planmagnetProjects(
15
+ workspaceId: $workspaceId
16
+ filter: { status: ACTIVE }
17
+ pagination: { first: 20 }
18
+ ) {
13
19
  items {
14
20
  id
15
21
  name
16
- description
17
- key
18
22
  status
19
- methodology
20
23
  ownerId
21
- startDate
22
- endDate
23
- tags
24
- createdAt
25
24
  }
26
25
  totalCount
27
26
  }
28
- planmagnetSprints(workspaceId: $workspaceId, pagination: { first: 50 }) {
27
+ onHoldProjects: planmagnetProjects(
28
+ workspaceId: $workspaceId
29
+ filter: { status: ON_HOLD }
30
+ pagination: { first: 20 }
31
+ ) {
29
32
  items {
30
33
  id
31
34
  name
32
- projectId
33
- project {
34
- id
35
- name
36
- }
37
35
  status
38
- startDate
39
- endDate
40
- goal
41
- capacity
42
- velocity
43
- workItems {
44
- id
45
- status
46
- storyPoints
47
- }
48
36
  }
49
37
  totalCount
50
38
  }
51
- planmagnetMilestones(workspaceId: $workspaceId, pagination: { first: 50 }) {
39
+ activeSprints: planmagnetSprints(
40
+ workspaceId: $workspaceId
41
+ filter: { status: ACTIVE }
42
+ pagination: { first: 20 }
43
+ ) {
44
+ items {
45
+ ...DashboardSprint
46
+ }
47
+ }
48
+ reviewSprints: planmagnetSprints(
49
+ workspaceId: $workspaceId
50
+ filter: { status: REVIEW }
51
+ pagination: { first: 20 }
52
+ ) {
53
+ items {
54
+ ...DashboardSprint
55
+ }
56
+ }
57
+ upcomingMilestones: planmagnetMilestones(
58
+ workspaceId: $workspaceId
59
+ filter: { open: true, dueFrom: $today }
60
+ orderBy: DUE_SOONEST
61
+ pagination: { first: 4 }
62
+ ) {
52
63
  items {
53
64
  id
54
65
  name
55
- description
56
- projectId
66
+ status
67
+ dueDate
57
68
  project {
58
69
  id
59
70
  name
60
71
  }
61
- status
62
- dueDate
63
- ownerId
64
- createdAt
65
72
  }
66
73
  totalCount
67
74
  }
68
- planmagnetWorkItems(workspaceId: $workspaceId, pagination: { first: 20 }) {
75
+ allMilestones: planmagnetMilestones(workspaceId: $workspaceId, pagination: { first: 1 }) {
76
+ totalCount
77
+ }
78
+ planmagnetWorkItems(workspaceId: $workspaceId, pagination: { first: 5 }) {
69
79
  items {
70
80
  id
71
81
  key
72
- description
82
+ title
73
83
  status
74
- priority
75
84
  storyPoints
76
85
  assigneeId
77
- projectId
78
- labels
79
- createdAt
86
+ project {
87
+ id
88
+ name
89
+ }
80
90
  }
81
91
  totalCount
82
92
  }
83
93
  }
94
+
95
+ fragment DashboardSprint on Sprint {
96
+ id
97
+ name
98
+ status
99
+ startDate
100
+ endDate
101
+ project {
102
+ id
103
+ name
104
+ }
105
+ workItems {
106
+ id
107
+ status
108
+ storyPoints
109
+ }
110
+ }
84
111
  `;
85
- function C() {
86
- let { workspaceId: d } = e(), { t: C } = g(), { data: w, loading: T, error: E } = f(S, { variables: { workspaceId: d ?? "default" } });
87
- if (T && !w) return /* @__PURE__ */ m("div", {
112
+ function j() {
113
+ let { workspaceId: y } = e(), { t: j } = w(), { data: M, loading: N, error: P } = b(A, { variables: {
114
+ workspaceId: y ?? "default",
115
+ today: (/* @__PURE__ */ new Date()).toISOString().slice(0, 10)
116
+ } }), F = i(), I = a(), L = t();
117
+ if (N && !M) return /* @__PURE__ */ S("div", {
88
118
  className: "flex items-center justify-center p-12",
89
- children: /* @__PURE__ */ m("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
119
+ children: /* @__PURE__ */ S("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
90
120
  });
91
- if (E) return /* @__PURE__ */ h("div", {
121
+ if (P) return /* @__PURE__ */ C("div", {
92
122
  className: "p-6 text-red-500",
93
123
  children: [
94
- C("planmagnet.dashboard.errorLoading", "Error loading dashboard"),
124
+ j("planmagnet.dashboard.errorLoading", "Error loading dashboard"),
95
125
  ": ",
96
- E.message
126
+ P.message
97
127
  ]
98
128
  });
99
- let D = w?.planmagnetProjects?.items ?? [], O = w?.planmagnetSprints?.items ?? [], k = w?.planmagnetMilestones?.items ?? [], A = w?.planmagnetWorkItems?.items ?? [], j = D.filter((e) => e.status === "ACTIVE");
100
- D.filter((e) => e.status === "COMPLETED");
101
- let M = O.filter((e) => e.status === "ACTIVE"), N = k.filter((e) => e.status === "PENDING" || e.status === "IN_PROGRESS"), P = N.slice(0, 4), F = A.slice(0, 5), I = new Map(D.map((e) => [e.id, e.name])), L = [
129
+ let R = M?.activeProjects?.items ?? [], z = M?.onHoldProjects?.items ?? [], B = [...M?.activeSprints?.items ?? [], ...M?.reviewSprints?.items ?? []], V = M?.upcomingMilestones?.items ?? [], H = M?.planmagnetWorkItems?.items ?? [], U = [
102
130
  {
103
- label: C("planmagnet.dashboard.metrics.totalProjects.label", "Total Projects"),
104
- value: String(w?.planmagnetProjects?.totalCount ?? D.length),
105
- trend: `${j.length} ${C("planmagnet.dashboard.metrics.totalProjects.trend", "active")}`
131
+ label: j("planmagnet.dashboard.metrics.totalProjects.label", "Total Projects"),
132
+ value: r(F?.all),
133
+ trend: `${r(F?.active)} ${j("planmagnet.dashboard.metrics.totalProjects.trend", "active")}`
106
134
  },
107
135
  {
108
- label: C("planmagnet.dashboard.metrics.activeSprints.label", "Active Sprints"),
109
- value: String(M.length),
110
- trend: `${w?.planmagnetSprints?.totalCount ?? O.length} ${C("planmagnet.dashboard.metrics.activeSprints.trend", "total")}`
136
+ label: j("planmagnet.dashboard.metrics.activeSprints.label", "Active Sprints"),
137
+ value: r(I?.running),
138
+ trend: `${r(I?.all)} ${j("planmagnet.dashboard.metrics.activeSprints.trend", "total")}`
111
139
  },
112
140
  {
113
- label: C("planmagnet.dashboard.metrics.workItems.label", "Work Items"),
114
- value: String(w?.planmagnetWorkItems?.totalCount ?? 0),
115
- trend: C("planmagnet.dashboard.metrics.workItems.trend", "across all projects")
141
+ label: j("planmagnet.dashboard.metrics.workItems.label", "Work Items"),
142
+ value: r(M?.planmagnetWorkItems?.totalCount),
143
+ trend: j("planmagnet.dashboard.metrics.workItems.trend", "across all projects")
116
144
  },
117
145
  {
118
- label: C("planmagnet.dashboard.metrics.milestones.label", "Milestones"),
119
- value: String(w?.planmagnetMilestones?.totalCount ?? k.length),
120
- trend: `${N.length} ${C("planmagnet.dashboard.metrics.milestones.trend", "upcoming")}`
146
+ label: j("planmagnet.dashboard.metrics.milestones.label", "Milestones"),
147
+ value: r(M?.allMilestones?.totalCount),
148
+ trend: `${r(M?.upcomingMilestones?.totalCount)} ${j("planmagnet.dashboard.metrics.milestones.trend", "upcoming")}`
121
149
  }
122
150
  ];
123
- return /* @__PURE__ */ h("div", {
151
+ return /* @__PURE__ */ C("div", {
124
152
  className: "space-y-6 p-6",
125
153
  children: [
126
- /* @__PURE__ */ m("div", {
154
+ /* @__PURE__ */ S("div", {
127
155
  className: "flex items-center justify-between",
128
- children: /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ h("h1", {
156
+ children: /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ C("h1", {
129
157
  className: "text-2xl font-semibold flex items-center gap-2",
130
- children: [/* @__PURE__ */ m(s, { className: "h-6 w-6" }), C("planmagnet.dashboard.title", "Dashboard")]
131
- }), /* @__PURE__ */ m("p", {
158
+ children: [/* @__PURE__ */ S(h, { className: "h-6 w-6" }), j("planmagnet.dashboard.title", "Dashboard")]
159
+ }), /* @__PURE__ */ S("p", {
132
160
  className: "text-sm text-muted-foreground mt-1",
133
- children: C("planmagnet.dashboard.subtitle", "Welcome back! Here is your project overview.")
161
+ children: j("planmagnet.dashboard.subtitle", "Welcome back! Here is your project overview.")
134
162
  })] })
135
163
  }),
136
- /* @__PURE__ */ m("div", {
164
+ /* @__PURE__ */ S("div", {
137
165
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
138
- children: L.map((e) => /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ h(b, {
166
+ children: U.map((e) => /* @__PURE__ */ C(E, { children: [/* @__PURE__ */ C(O, {
139
167
  className: "flex flex-row items-center justify-between space-y-0 pb-2",
140
- children: [/* @__PURE__ */ m(x, {
168
+ children: [/* @__PURE__ */ S(k, {
141
169
  className: "text-sm font-medium",
142
170
  children: e.label
143
- }), /* @__PURE__ */ m(c, { className: "h-4 w-4 text-muted-foreground" })]
144
- }), /* @__PURE__ */ h(y, { children: [/* @__PURE__ */ m("div", {
171
+ }), /* @__PURE__ */ S(g, { className: "h-4 w-4 text-muted-foreground" })]
172
+ }), /* @__PURE__ */ C(D, { children: [/* @__PURE__ */ S("div", {
145
173
  className: "text-2xl font-bold",
146
174
  children: e.value
147
- }), /* @__PURE__ */ m("p", {
175
+ }), /* @__PURE__ */ S("p", {
148
176
  className: "text-xs text-muted-foreground",
149
177
  children: e.trend
150
178
  })] })] }, e.label))
151
179
  }),
152
- /* @__PURE__ */ h("div", {
180
+ /* @__PURE__ */ C("div", {
153
181
  className: "grid gap-6 lg:grid-cols-12",
154
- children: [/* @__PURE__ */ h(v, {
182
+ children: [/* @__PURE__ */ C(E, {
155
183
  className: "lg:col-span-8",
156
- children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ h(x, {
184
+ children: [/* @__PURE__ */ S(O, { children: /* @__PURE__ */ C(k, {
157
185
  className: "flex items-center gap-2 text-base",
158
- children: [/* @__PURE__ */ m(u, { className: "h-5 w-5 text-blue-500" }), C("planmagnet.dashboard.activeSprints.title", "Active Sprints")]
159
- }) }), /* @__PURE__ */ h(y, {
186
+ children: [/* @__PURE__ */ S(v, { className: "h-5 w-5 text-blue-500" }), j("planmagnet.dashboard.activeSprints.title", "Active Sprints")]
187
+ }) }), /* @__PURE__ */ C(D, {
160
188
  className: "space-y-4",
161
- children: [M.map((e) => {
162
- 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;
163
- return /* @__PURE__ */ h("div", {
164
- className: "rounded-lg border p-4",
189
+ children: [B.map((e) => {
190
+ 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 = o(e.workItems) ?? 0;
191
+ return /* @__PURE__ */ C("div", {
192
+ ...l(() => L(c("/projects/planning-detail-page", e.id)), e.name),
193
+ className: `rounded-lg border p-4 ${s}`,
165
194
  children: [
166
- /* @__PURE__ */ h("div", {
195
+ /* @__PURE__ */ C("div", {
167
196
  className: "flex items-center justify-between mb-2",
168
- children: [/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
197
+ children: [/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("p", {
169
198
  className: "font-medium",
170
199
  children: e.name
171
- }), /* @__PURE__ */ h("p", {
200
+ }), /* @__PURE__ */ C("p", {
172
201
  className: "text-xs text-muted-foreground",
173
202
  children: [
174
- C("planmagnet.dashboard.shared.project", "Project"),
203
+ j("planmagnet.dashboard.shared.project", "Project"),
175
204
  ":",
176
205
  " ",
177
- e.project?.name ?? C("planmagnet.dashboard.shared.projectUnavailable", "not available")
206
+ e.project?.name ?? j("planmagnet.dashboard.shared.projectUnavailable", "not available")
178
207
  ]
179
- })] }), /* @__PURE__ */ h(_, {
208
+ })] }), /* @__PURE__ */ C(T, {
180
209
  variant: "secondary",
181
210
  children: [
182
211
  n,
183
212
  "/",
184
213
  t,
185
214
  " ",
186
- C("planmagnet.dashboard.shared.pointsShort", "pts")
215
+ j("planmagnet.dashboard.shared.pointsShort", "pts")
187
216
  ]
188
217
  })]
189
218
  }),
190
- /* @__PURE__ */ m("div", {
219
+ /* @__PURE__ */ S("div", {
191
220
  className: "w-full h-2 bg-muted rounded-full overflow-hidden",
192
- children: /* @__PURE__ */ m("div", {
221
+ children: /* @__PURE__ */ S("div", {
193
222
  className: "h-full bg-primary rounded-full transition-all",
194
223
  style: { width: `${a}%` }
195
224
  })
196
225
  }),
197
- /* @__PURE__ */ h("div", {
226
+ /* @__PURE__ */ C("div", {
198
227
  className: "flex items-center justify-between mt-2 text-xs text-muted-foreground",
199
- children: [/* @__PURE__ */ h("span", { children: [
228
+ children: [/* @__PURE__ */ C("span", { children: [
200
229
  i,
201
230
  "/",
202
231
  r,
203
232
  " ",
204
- C("planmagnet.dashboard.shared.tasks", "tasks")
205
- ] }), /* @__PURE__ */ h("span", { children: [
233
+ j("planmagnet.dashboard.shared.tasks", "tasks")
234
+ ] }), /* @__PURE__ */ C("span", { children: [
206
235
  e.startDate ? new Date(e.startDate).toLocaleDateString() : "—",
207
236
  " -",
208
237
  " ",
@@ -211,140 +240,150 @@ function C() {
211
240
  })
212
241
  ]
213
242
  }, e.id);
214
- }), M.length === 0 && /* @__PURE__ */ m("p", {
243
+ }), B.length === 0 && /* @__PURE__ */ S("p", {
215
244
  className: "text-sm text-muted-foreground text-center py-4",
216
- children: C("planmagnet.dashboard.activeSprints.empty", "No active sprints.")
245
+ children: j("planmagnet.dashboard.activeSprints.empty", "No active sprints.")
217
246
  })]
218
247
  })]
219
- }), /* @__PURE__ */ h("div", {
248
+ }), /* @__PURE__ */ C("div", {
220
249
  className: "lg:col-span-4 space-y-6",
221
- children: [D.filter((e) => e.status === "ON_HOLD").length > 0 && /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ h(x, {
250
+ children: [z.length > 0 && /* @__PURE__ */ C(E, { children: [/* @__PURE__ */ S(O, { children: /* @__PURE__ */ C(k, {
222
251
  className: "flex items-center gap-2 text-base",
223
- children: [/* @__PURE__ */ m(n, { className: "h-5 w-5 text-orange-500" }), C("planmagnet.dashboard.onHoldProjects.title", "On-Hold Projects")]
224
- }) }), /* @__PURE__ */ m(y, {
252
+ children: [/* @__PURE__ */ S(u, { className: "h-5 w-5 text-orange-500" }), j("planmagnet.dashboard.onHoldProjects.title", "On-Hold Projects")]
253
+ }) }), /* @__PURE__ */ S(D, {
225
254
  className: "space-y-3",
226
- children: D.filter((e) => e.status === "ON_HOLD").map((e) => /* @__PURE__ */ h("div", {
255
+ children: z.map((e) => /* @__PURE__ */ C("div", {
227
256
  className: "flex items-center justify-between rounded border p-2",
228
- children: [/* @__PURE__ */ m("div", { children: /* @__PURE__ */ m("p", {
257
+ children: [/* @__PURE__ */ S("div", { children: /* @__PURE__ */ S("p", {
229
258
  className: "text-sm font-medium",
230
259
  children: e.name
231
- }) }), /* @__PURE__ */ m(_, {
260
+ }) }), /* @__PURE__ */ S(T, {
232
261
  variant: "destructive",
233
262
  children: e.status.toLowerCase().replace("_", " ")
234
263
  })]
235
264
  }, e.id))
236
- })] }), /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ h(x, {
265
+ })] }), /* @__PURE__ */ C(E, { children: [/* @__PURE__ */ S(O, { children: /* @__PURE__ */ C(k, {
237
266
  className: "flex items-center gap-2 text-base",
238
- children: [/* @__PURE__ */ m(i, { className: "h-5 w-5 text-green-500" }), C("planmagnet.dashboard.upcomingMilestones.title", "Upcoming Milestones")]
239
- }) }), /* @__PURE__ */ h(y, {
267
+ children: [/* @__PURE__ */ S(f, { className: "h-5 w-5 text-green-500" }), j("planmagnet.dashboard.upcomingMilestones.title", "Upcoming Milestones")]
268
+ }) }), /* @__PURE__ */ C(D, {
240
269
  className: "space-y-3",
241
- children: [P.map((e) => /* @__PURE__ */ h("div", {
242
- className: "flex items-start gap-3 rounded border p-2",
243
- children: [/* @__PURE__ */ h("div", {
270
+ children: [V.map((e) => /* @__PURE__ */ C("div", {
271
+ ...l(() => L(c("/projects/milestone-detail-page", e.id)), e.name),
272
+ className: `flex items-start gap-3 rounded border p-2 ${s}`,
273
+ children: [/* @__PURE__ */ C("div", {
244
274
  className: "flex-1 min-w-0",
245
275
  children: [
246
- /* @__PURE__ */ m("p", {
276
+ /* @__PURE__ */ S("p", {
247
277
  className: "text-sm font-medium truncate",
248
278
  children: e.name
249
279
  }),
250
- /* @__PURE__ */ h("p", {
280
+ /* @__PURE__ */ C("p", {
251
281
  className: "text-xs text-muted-foreground",
252
282
  children: [
253
- C("planmagnet.dashboard.shared.project", "Project"),
283
+ j("planmagnet.dashboard.shared.project", "Project"),
254
284
  ":",
255
285
  " ",
256
- e.project?.name ?? C("planmagnet.dashboard.shared.projectUnavailable", "not available")
286
+ e.project?.name ?? j("planmagnet.dashboard.shared.projectUnavailable", "not available")
257
287
  ]
258
288
  }),
259
- /* @__PURE__ */ h("p", {
289
+ /* @__PURE__ */ C("p", {
260
290
  className: "text-xs text-muted-foreground",
261
291
  children: [
262
- C("planmagnet.dashboard.shared.due", "Due"),
292
+ j("planmagnet.dashboard.shared.due", "Due"),
263
293
  " ",
264
294
  e.dueDate ? new Date(e.dueDate).toLocaleDateString() : "—"
265
295
  ]
266
296
  })
267
297
  ]
268
- }), /* @__PURE__ */ m(_, {
298
+ }), /* @__PURE__ */ S(T, {
269
299
  variant: "secondary",
270
300
  className: "text-xs flex-shrink-0 capitalize",
271
301
  children: e.status.toLowerCase().replace("_", " ")
272
302
  })]
273
- }, e.id)), P.length === 0 && /* @__PURE__ */ m("p", {
303
+ }, e.id)), V.length === 0 && /* @__PURE__ */ S("p", {
274
304
  className: "text-sm text-muted-foreground text-center py-2",
275
- children: C("planmagnet.dashboard.upcomingMilestones.empty", "No upcoming milestones.")
305
+ children: j("planmagnet.dashboard.upcomingMilestones.empty", "No upcoming milestones.")
276
306
  })]
277
307
  })] })]
278
308
  })]
279
309
  }),
280
- /* @__PURE__ */ h("div", {
310
+ /* @__PURE__ */ C("div", {
281
311
  className: "grid gap-6 lg:grid-cols-2",
282
- children: [/* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ h(x, {
312
+ children: [/* @__PURE__ */ C(E, { children: [/* @__PURE__ */ S(O, { children: /* @__PURE__ */ C(k, {
283
313
  className: "flex items-center gap-2 text-base",
284
- children: [/* @__PURE__ */ m(a, { className: "h-5 w-5 text-purple-500" }), C("planmagnet.dashboard.recentWorkItems.title", "Recent Work Items")]
285
- }) }), /* @__PURE__ */ h(y, {
314
+ children: [/* @__PURE__ */ S(p, { className: "h-5 w-5 text-purple-500" }), j("planmagnet.dashboard.recentWorkItems.title", "Recent Work Items")]
315
+ }) }), /* @__PURE__ */ C(D, {
286
316
  className: "space-y-3",
287
- children: [F.map((e) => /* @__PURE__ */ h("div", {
288
- className: "flex items-center justify-between rounded border p-2",
289
- children: [/* @__PURE__ */ h("div", {
317
+ children: [H.map((e) => /* @__PURE__ */ C("div", {
318
+ ...l(() => L(`/tasks/task-detail-page?taskId=${encodeURIComponent(e.id)}`), `${e.key} ${e.title}`),
319
+ className: `flex items-center justify-between rounded border p-2 ${s}`,
320
+ children: [/* @__PURE__ */ C("div", {
290
321
  className: "min-w-0 flex-1",
291
- children: [/* @__PURE__ */ m("p", {
322
+ children: [/* @__PURE__ */ C("p", {
292
323
  className: "text-sm font-medium truncate",
293
- children: e.key
294
- }), /* @__PURE__ */ h("p", {
324
+ children: [
325
+ e.key,
326
+ " ",
327
+ /* @__PURE__ */ S("span", {
328
+ className: "font-normal",
329
+ children: e.title
330
+ })
331
+ ]
332
+ }), /* @__PURE__ */ C("p", {
295
333
  className: "text-xs text-muted-foreground",
296
- children: [I.get(e.projectId) ?? `Project ${e.projectId.slice(0, 6)}`, e.assigneeId ? /* @__PURE__ */ h(p, { children: [" · ", /* @__PURE__ */ m(t, { id: e.assigneeId })] }) : null]
334
+ children: [e.project?.name ?? j("planmagnet.dashboard.shared.projectUnavailable", "not available"), e.assigneeId ? /* @__PURE__ */ C(x, { children: [" · ", /* @__PURE__ */ S(n, { id: e.assigneeId })] }) : null]
297
335
  })]
298
- }), /* @__PURE__ */ h("div", {
336
+ }), /* @__PURE__ */ C("div", {
299
337
  className: "flex items-center gap-2 flex-shrink-0",
300
- children: [/* @__PURE__ */ h(_, {
338
+ children: [/* @__PURE__ */ C(T, {
301
339
  variant: "outline",
302
340
  className: "text-xs",
303
341
  children: [
304
342
  e.storyPoints ?? 0,
305
343
  " ",
306
- C("planmagnet.dashboard.shared.pointsShort", "pts")
344
+ j("planmagnet.dashboard.shared.pointsShort", "pts")
307
345
  ]
308
- }), /* @__PURE__ */ m(_, {
346
+ }), /* @__PURE__ */ S(T, {
309
347
  variant: "secondary",
310
348
  className: "text-xs capitalize",
311
349
  children: e.status.toLowerCase().replace("_", " ")
312
350
  })]
313
351
  })]
314
- }, e.id)), F.length === 0 && /* @__PURE__ */ m("p", {
352
+ }, e.id)), H.length === 0 && /* @__PURE__ */ S("p", {
315
353
  className: "text-sm text-muted-foreground text-center py-4",
316
- children: C("planmagnet.dashboard.recentWorkItems.empty", "No work items yet.")
354
+ children: j("planmagnet.dashboard.recentWorkItems.empty", "No work items yet.")
317
355
  })]
318
- })] }), /* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(b, { children: /* @__PURE__ */ h(x, {
356
+ })] }), /* @__PURE__ */ C(E, { children: [/* @__PURE__ */ S(O, { children: /* @__PURE__ */ C(k, {
319
357
  className: "flex items-center gap-2 text-base",
320
- children: [/* @__PURE__ */ m(o, { className: "h-5 w-5 text-cyan-500" }), C("planmagnet.dashboard.projectStatus.title", "Project Status")]
321
- }) }), /* @__PURE__ */ h(y, {
358
+ children: [/* @__PURE__ */ S(m, { className: "h-5 w-5 text-cyan-500" }), j("planmagnet.dashboard.projectStatus.title", "Project Status")]
359
+ }) }), /* @__PURE__ */ C(D, {
322
360
  className: "space-y-3",
323
- children: [j.map((e) => /* @__PURE__ */ h("div", {
324
- className: "flex items-center justify-between rounded border p-2",
325
- children: [/* @__PURE__ */ h("div", {
361
+ children: [R.map((e) => /* @__PURE__ */ C("div", {
362
+ ...l(() => L(c("/projects/project-detail-page", e.id)), e.name),
363
+ className: `flex items-center justify-between rounded border p-2 ${s}`,
364
+ children: [/* @__PURE__ */ C("div", {
326
365
  className: "min-w-0 flex-1",
327
- children: [/* @__PURE__ */ m("p", {
366
+ children: [/* @__PURE__ */ S("p", {
328
367
  className: "text-sm font-medium truncate",
329
368
  children: e.name
330
- }), /* @__PURE__ */ m("p", {
369
+ }), /* @__PURE__ */ S("p", {
331
370
  className: "text-xs text-muted-foreground capitalize",
332
371
  children: e.status.toLowerCase().replace("_", " ")
333
372
  })]
334
- }), /* @__PURE__ */ h("div", {
373
+ }), /* @__PURE__ */ C("div", {
335
374
  className: "flex items-center gap-2 ml-3 flex-shrink-0",
336
375
  children: [
337
- /* @__PURE__ */ m(l, { className: "h-3 w-3 text-muted-foreground" }),
338
- /* @__PURE__ */ m("span", {
376
+ /* @__PURE__ */ S(_, { className: "h-3 w-3 text-muted-foreground" }),
377
+ /* @__PURE__ */ S("span", {
339
378
  className: "text-xs text-muted-foreground",
340
- children: /* @__PURE__ */ m(t, { id: e.ownerId })
379
+ children: /* @__PURE__ */ S(n, { id: e.ownerId })
341
380
  }),
342
- /* @__PURE__ */ m(r, { className: "h-3 w-3 text-muted-foreground" })
381
+ /* @__PURE__ */ S(d, { className: "h-3 w-3 text-muted-foreground" })
343
382
  ]
344
383
  })]
345
- }, e.id)), j.length === 0 && /* @__PURE__ */ m("p", {
384
+ }, e.id)), R.length === 0 && /* @__PURE__ */ S("p", {
346
385
  className: "text-sm text-muted-foreground text-center py-4",
347
- children: C("planmagnet.dashboard.projectStatus.empty", "No active projects.")
386
+ children: j("planmagnet.dashboard.projectStatus.empty", "No active projects.")
348
387
  })]
349
388
  })] })]
350
389
  })
@@ -352,6 +391,6 @@ function C() {
352
391
  });
353
392
  }
354
393
  //#endregion
355
- export { C as DashboardDashboardPagePage };
394
+ export { j as DashboardDashboardPagePage };
356
395
 
357
396
  //# sourceMappingURL=DashboardDashboardPagePage.js.map