@burdenoff/microfe-planmagnet 2026.928.4 → 2026.928.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 (226) hide show
  1. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
  2. package/dist/planmagnet/PlanMagnetRoot.js +130 -97
  3. package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
  4. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  5. package/dist/planmagnet/PlanMagnetRoutes.js +256 -156
  6. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  7. package/dist/planmagnet/automation/AutomationExecutionsPanel.d.ts +5 -0
  8. package/dist/planmagnet/automation/AutomationExecutionsPanel.d.ts.map +1 -0
  9. package/dist/planmagnet/automation/AutomationExecutionsPanel.js +107 -0
  10. package/dist/planmagnet/automation/AutomationExecutionsPanel.js.map +1 -0
  11. package/dist/planmagnet/automation/AutomationRuleFields.d.ts +29 -0
  12. package/dist/planmagnet/automation/AutomationRuleFields.d.ts.map +1 -0
  13. package/dist/planmagnet/automation/AutomationRuleFields.js +308 -0
  14. package/dist/planmagnet/automation/AutomationRuleFields.js.map +1 -0
  15. package/dist/planmagnet/automation/automationRuleTypes.d.ts +60 -0
  16. package/dist/planmagnet/automation/automationRuleTypes.d.ts.map +1 -0
  17. package/dist/planmagnet/automation/automationRuleTypes.js +113 -0
  18. package/dist/planmagnet/automation/automationRuleTypes.js.map +1 -0
  19. package/dist/planmagnet/board/BulkActions.d.ts +11 -0
  20. package/dist/planmagnet/board/BulkActions.d.ts.map +1 -0
  21. package/dist/planmagnet/board/BulkActions.js +182 -0
  22. package/dist/planmagnet/board/BulkActions.js.map +1 -0
  23. package/dist/planmagnet/board/ProjectBoard.d.ts.map +1 -1
  24. package/dist/planmagnet/board/ProjectBoard.js +289 -254
  25. package/dist/planmagnet/board/ProjectBoard.js.map +1 -1
  26. package/dist/planmagnet/budgets/BudgetControls.d.ts +30 -0
  27. package/dist/planmagnet/budgets/BudgetControls.d.ts.map +1 -0
  28. package/dist/planmagnet/budgets/BudgetControls.js +470 -0
  29. package/dist/planmagnet/budgets/BudgetControls.js.map +1 -0
  30. package/dist/planmagnet/budgets/ExpenseControls.d.ts +27 -0
  31. package/dist/planmagnet/budgets/ExpenseControls.d.ts.map +1 -0
  32. package/dist/planmagnet/budgets/ExpenseControls.js +366 -0
  33. package/dist/planmagnet/budgets/ExpenseControls.js.map +1 -0
  34. package/dist/planmagnet/budgets/ProjectBudgetsSummary.d.ts +5 -0
  35. package/dist/planmagnet/budgets/ProjectBudgetsSummary.d.ts.map +1 -0
  36. package/dist/planmagnet/budgets/ProjectBudgetsSummary.js +112 -0
  37. package/dist/planmagnet/budgets/ProjectBudgetsSummary.js.map +1 -0
  38. package/dist/planmagnet/budgets/budgetMath.d.ts +26 -0
  39. package/dist/planmagnet/budgets/budgetMath.d.ts.map +1 -0
  40. package/dist/planmagnet/budgets/budgetMath.js +49 -0
  41. package/dist/planmagnet/budgets/budgetMath.js.map +1 -0
  42. package/dist/planmagnet/controls/AutomationRuleControls.d.ts +23 -0
  43. package/dist/planmagnet/controls/AutomationRuleControls.d.ts.map +1 -0
  44. package/dist/planmagnet/controls/AutomationRuleControls.js +172 -0
  45. package/dist/planmagnet/controls/AutomationRuleControls.js.map +1 -0
  46. package/dist/planmagnet/controls/CompetitorControls.js +15 -15
  47. package/dist/planmagnet/controls/CustomFieldControls.d.ts +42 -0
  48. package/dist/planmagnet/controls/CustomFieldControls.d.ts.map +1 -0
  49. package/dist/planmagnet/controls/CustomFieldControls.js +84 -0
  50. package/dist/planmagnet/controls/CustomFieldControls.js.map +1 -0
  51. package/dist/planmagnet/controls/CustomFieldValuesPanel.d.ts +8 -0
  52. package/dist/planmagnet/controls/CustomFieldValuesPanel.d.ts.map +1 -0
  53. package/dist/planmagnet/controls/CustomFieldValuesPanel.js +315 -0
  54. package/dist/planmagnet/controls/CustomFieldValuesPanel.js.map +1 -0
  55. package/dist/planmagnet/controls/FeatureControls.js +54 -54
  56. package/dist/planmagnet/controls/ObjectiveControls.js +15 -15
  57. package/dist/planmagnet/controls/Pickers.d.ts +7 -0
  58. package/dist/planmagnet/controls/Pickers.d.ts.map +1 -1
  59. package/dist/planmagnet/controls/Pickers.js +58 -20
  60. package/dist/planmagnet/controls/Pickers.js.map +1 -1
  61. package/dist/planmagnet/controls/PortfolioControls.js +7 -7
  62. package/dist/planmagnet/controls/ProgramControls.js +19 -19
  63. package/dist/planmagnet/controls/ProjectControls.d.ts.map +1 -1
  64. package/dist/planmagnet/controls/ProjectControls.js +54 -47
  65. package/dist/planmagnet/controls/ProjectControls.js.map +1 -1
  66. package/dist/planmagnet/controls/ReleaseControls.js +7 -7
  67. package/dist/planmagnet/controls/RiskControls.d.ts +27 -0
  68. package/dist/planmagnet/controls/RiskControls.d.ts.map +1 -0
  69. package/dist/planmagnet/controls/RiskControls.js +346 -0
  70. package/dist/planmagnet/controls/RiskControls.js.map +1 -0
  71. package/dist/planmagnet/controls/TemplateControls.d.ts +15 -0
  72. package/dist/planmagnet/controls/TemplateControls.d.ts.map +1 -0
  73. package/dist/planmagnet/controls/TemplateControls.js +55 -0
  74. package/dist/planmagnet/controls/TemplateControls.js.map +1 -0
  75. package/dist/planmagnet/controls/WorkItemControls.d.ts +6 -2
  76. package/dist/planmagnet/controls/WorkItemControls.d.ts.map +1 -1
  77. package/dist/planmagnet/controls/WorkItemControls.js +9 -9
  78. package/dist/planmagnet/controls/WorkItemControls.js.map +1 -1
  79. package/dist/planmagnet/create/CreateDialogs.d.ts +20 -0
  80. package/dist/planmagnet/create/CreateDialogs.d.ts.map +1 -1
  81. package/dist/planmagnet/create/CreateDialogs.js +455 -116
  82. package/dist/planmagnet/create/CreateDialogs.js.map +1 -1
  83. package/dist/planmagnet/dependency/DependencyPanel.d.ts +6 -0
  84. package/dist/planmagnet/dependency/DependencyPanel.d.ts.map +1 -0
  85. package/dist/planmagnet/dependency/DependencyPanel.js +310 -0
  86. package/dist/planmagnet/dependency/DependencyPanel.js.map +1 -0
  87. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.d.ts +2 -0
  88. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.d.ts.map +1 -0
  89. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js +171 -0
  90. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js.map +1 -0
  91. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.d.ts +2 -0
  92. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.d.ts.map +1 -0
  93. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.js +232 -0
  94. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.js.map +1 -0
  95. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.d.ts +2 -0
  96. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.d.ts.map +1 -0
  97. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js +93 -0
  98. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js.map +1 -0
  99. package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +1 -1
  100. package/dist/planmagnet/pages/DashboardDashboardPagePage.js +11 -3
  101. package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +1 -1
  102. package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.js +5 -5
  103. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js +9 -9
  104. package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.js +6 -6
  105. package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.js +4 -4
  106. package/dist/planmagnet/pages/ProgramsEditProgramPagePage.js +6 -6
  107. package/dist/planmagnet/pages/ProgramsProgramsPagePage.js +5 -5
  108. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.d.ts +2 -0
  109. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.d.ts.map +1 -0
  110. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.js +315 -0
  111. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.js.map +1 -0
  112. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.d.ts +2 -0
  113. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.d.ts.map +1 -0
  114. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js +186 -0
  115. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js.map +1 -0
  116. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.d.ts +2 -0
  117. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.d.ts.map +1 -0
  118. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.js +164 -0
  119. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.js.map +1 -0
  120. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.d.ts +2 -0
  121. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.d.ts.map +1 -0
  122. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.js +348 -0
  123. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.js.map +1 -0
  124. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +10 -10
  125. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js +4 -4
  126. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
  127. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +20 -10
  128. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
  129. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts.map +1 -1
  130. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +13 -8
  131. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +1 -1
  132. package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +1 -1
  133. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js +76 -56
  134. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js.map +1 -1
  135. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
  136. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +372 -203
  137. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
  138. package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts.map +1 -1
  139. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +81 -72
  140. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +1 -1
  141. package/dist/planmagnet/pages/RisksRiskDetailPagePage.d.ts +2 -0
  142. package/dist/planmagnet/pages/RisksRiskDetailPagePage.d.ts.map +1 -0
  143. package/dist/planmagnet/pages/RisksRiskDetailPagePage.js +278 -0
  144. package/dist/planmagnet/pages/RisksRiskDetailPagePage.js.map +1 -0
  145. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.d.ts +2 -0
  146. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.d.ts.map +1 -0
  147. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.js +191 -0
  148. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.js.map +1 -0
  149. package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +1 -1
  150. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +168 -122
  151. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +1 -1
  152. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js +5 -5
  153. package/dist/planmagnet/pages/TasksEditTaskPagePage.js +4 -4
  154. package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
  155. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +161 -137
  156. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
  157. package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +1 -1
  158. package/dist/planmagnet/pages/TasksTasksPagePage.js +124 -113
  159. package/dist/planmagnet/pages/TasksTasksPagePage.js.map +1 -1
  160. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.d.ts +2 -0
  161. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.d.ts.map +1 -0
  162. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js +263 -0
  163. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js.map +1 -0
  164. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.d.ts +2 -0
  165. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.d.ts.map +1 -0
  166. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.js +254 -0
  167. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.js.map +1 -0
  168. package/dist/planmagnet/pages/TasksTimesheetsPagePage.d.ts +2 -0
  169. package/dist/planmagnet/pages/TasksTimesheetsPagePage.d.ts.map +1 -0
  170. package/dist/planmagnet/pages/TasksTimesheetsPagePage.js +165 -0
  171. package/dist/planmagnet/pages/TasksTimesheetsPagePage.js.map +1 -0
  172. package/dist/planmagnet/pages/TeamCreateTeamPagePage.d.ts.map +1 -1
  173. package/dist/planmagnet/pages/TeamCreateTeamPagePage.js +288 -91
  174. package/dist/planmagnet/pages/TeamCreateTeamPagePage.js.map +1 -1
  175. package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts +2 -0
  176. package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +1 -0
  177. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js +217 -0
  178. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +1 -0
  179. package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts +2 -0
  180. package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts.map +1 -0
  181. package/dist/planmagnet/pages/TeamTeamEditPagePage.js +211 -0
  182. package/dist/planmagnet/pages/TeamTeamEditPagePage.js.map +1 -0
  183. package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts +2 -0
  184. package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts.map +1 -0
  185. package/dist/planmagnet/pages/TeamTeamsListPagePage.js +118 -0
  186. package/dist/planmagnet/pages/TeamTeamsListPagePage.js.map +1 -0
  187. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.d.ts +2 -0
  188. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.d.ts.map +1 -0
  189. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.js +316 -0
  190. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.js.map +1 -0
  191. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.d.ts +2 -0
  192. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.d.ts.map +1 -0
  193. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.js +208 -0
  194. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.js.map +1 -0
  195. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts +0 -5
  196. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts.map +1 -1
  197. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +47 -89
  198. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js.map +1 -1
  199. package/dist/planmagnet/roadmaps/RoadmapControls.js +24 -24
  200. package/dist/planmagnet/sprints/SprintControls.d.ts +15 -3
  201. package/dist/planmagnet/sprints/SprintControls.d.ts.map +1 -1
  202. package/dist/planmagnet/sprints/SprintControls.js +293 -190
  203. package/dist/planmagnet/sprints/SprintControls.js.map +1 -1
  204. package/dist/planmagnet/team/TeamControls.d.ts +31 -0
  205. package/dist/planmagnet/team/TeamControls.d.ts.map +1 -0
  206. package/dist/planmagnet/team/TeamControls.js +407 -0
  207. package/dist/planmagnet/team/TeamControls.js.map +1 -0
  208. package/dist/planmagnet/time/TaskTimePanel.d.ts +7 -0
  209. package/dist/planmagnet/time/TaskTimePanel.d.ts.map +1 -0
  210. package/dist/planmagnet/time/TaskTimePanel.js +104 -0
  211. package/dist/planmagnet/time/TaskTimePanel.js.map +1 -0
  212. package/dist/planmagnet/time/TimeEntryControls.d.ts +37 -0
  213. package/dist/planmagnet/time/TimeEntryControls.d.ts.map +1 -0
  214. package/dist/planmagnet/time/TimeEntryControls.js +338 -0
  215. package/dist/planmagnet/time/TimeEntryControls.js.map +1 -0
  216. package/dist/planmagnet/time/TimesheetControls.d.ts +18 -0
  217. package/dist/planmagnet/time/TimesheetControls.d.ts.map +1 -0
  218. package/dist/planmagnet/time/TimesheetControls.js +244 -0
  219. package/dist/planmagnet/time/TimesheetControls.js.map +1 -0
  220. package/dist/planmagnet/time/timeShared.d.ts +29 -0
  221. package/dist/planmagnet/time/timeShared.d.ts.map +1 -0
  222. package/dist/planmagnet/time/timeShared.js +34 -0
  223. package/dist/planmagnet/time/timeShared.js.map +1 -0
  224. package/dist/planmagnet/utils/rowNavigation.js +5 -2
  225. package/dist/planmagnet/utils/rowNavigation.js.map +1 -1
  226. package/package.json +1 -1
@@ -2,14 +2,15 @@ import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/Pla
2
2
  import { PersonName as n } from "../people/People.js";
3
3
  import { throwOnError as r } from "../utils/mutationResult.js";
4
4
  import { allowedTargets as i, useProjectWorkflow as a, workflowLabel as o } from "../hooks/useProjectWorkflow.js";
5
- import { createContext as s, useContext as c, useState as l } from "react";
6
- import { ChevronLeft as u, ChevronRight as d, LayoutGrid as f, Pencil as p, Plus as m } from "lucide-react";
7
- import { gql as h } from "@apollo/client";
8
- import { useApolloClient as g, useMutation as _, useQuery as v } from "@apollo/client/react";
9
- import { jsx as y, jsxs as b } from "react/jsx-runtime";
10
- import { AlertDialog as x, AlertDialogAction as S, AlertDialogCancel as ee, AlertDialogContent as C, AlertDialogDescription as w, AlertDialogFooter as te, AlertDialogHeader as T, AlertDialogTitle as E, AlertDialogTrigger as D, Button as O, Card as k, CardContent as ne, Input as A, ResponsiveDialog as re, ResponsiveDialogContent as ie, ResponsiveDialogDescription as j, ResponsiveDialogFooter as M, ResponsiveDialogHeader as N, ResponsiveDialogTitle as P, ResponsiveDialogTrigger as F } from "@burdenoff/fe-libs/ui";
5
+ import { BulkActionsBar as s } from "./BulkActions.js";
6
+ import { createContext as c, useContext as l, useState as u } from "react";
7
+ import { ChevronLeft as d, ChevronRight as f, LayoutGrid as p, Pencil as m, Plus as h } from "lucide-react";
8
+ import { gql as g } from "@apollo/client";
9
+ import { useApolloClient as _, useMutation as v, useQuery as y } from "@apollo/client/react";
10
+ import { jsx as b, jsxs as x } from "react/jsx-runtime";
11
+ import { AlertDialog as ee, AlertDialogAction as S, AlertDialogCancel as te, AlertDialogContent as C, AlertDialogDescription as w, AlertDialogFooter as T, AlertDialogHeader as E, AlertDialogTitle as D, AlertDialogTrigger as ne, Button as O, Card as k, CardContent as re, Input as A, ResponsiveDialog as j, ResponsiveDialogContent as ie, ResponsiveDialogDescription as M, ResponsiveDialogFooter as N, ResponsiveDialogHeader as P, ResponsiveDialogTitle as ae, ResponsiveDialogTrigger as oe } from "@burdenoff/fe-libs/ui";
11
12
  //#region src/planmagnet/board/ProjectBoard.tsx
12
- var I = [
13
+ var F = [
13
14
  "BACKLOG",
14
15
  "TODO",
15
16
  "IN_PROGRESS",
@@ -17,10 +18,10 @@ var I = [
17
18
  "TESTING",
18
19
  "DONE",
19
20
  "CANCELLED"
20
- ], L = s(null), R = () => {
21
- let e = c(L);
21
+ ], I = c(null), L = () => {
22
+ let e = l(I);
22
23
  return (t) => o(e, t);
23
- }, z = (e) => e.charAt(0) + e.slice(1).toLowerCase().replace(/_/g, " "), B = 100, V = h`
24
+ }, R = (e) => e.charAt(0) + e.slice(1).toLowerCase().replace(/_/g, " "), z = 100, se = g`
24
25
  query ProjectBoards($workspaceId: ID!, $projectId: String) {
25
26
  planmagnetBoards(
26
27
  workspaceId: $workspaceId
@@ -34,7 +35,7 @@ var I = [
34
35
  }
35
36
  }
36
37
  }
37
- `, H = h`
38
+ `, B = g`
38
39
  query ProjectBoardColumnPage($boardId: ID!, $columnId: ID!, $after: String) {
39
40
  planmagnetBoardColumnCards(
40
41
  boardId: $boardId
@@ -57,7 +58,7 @@ var I = [
57
58
  }
58
59
  }
59
60
  }
60
- `, U = h`
61
+ `, V = g`
61
62
  query ProjectBoard($id: ID!) {
62
63
  planmagnetBoard(id: $id) {
63
64
  id
@@ -89,57 +90,57 @@ var I = [
89
90
  }
90
91
  }
91
92
  }
92
- `, W = h`
93
+ `, H = g`
93
94
  mutation ProjectBoardMoveCard($boardId: ID!, $input: PlanmagnetMoveCardInput!) {
94
95
  planmagnetMoveCard(boardId: $boardId, input: $input) {
95
96
  id
96
97
  }
97
98
  }
98
- `, G = h`
99
+ `, U = g`
99
100
  mutation ProjectBoardCreate($input: PlanmagnetCreateBoardInput!) {
100
101
  planmagnetCreateBoard(input: $input) {
101
102
  id
102
103
  }
103
104
  }
104
- `, K = h`
105
+ `, W = g`
105
106
  mutation ProjectBoardCreateColumn($input: PlanmagnetCreateBoardColumnInput!) {
106
107
  planmagnetCreateBoardColumn(input: $input) {
107
108
  id
108
109
  }
109
110
  }
110
- `, q = h`
111
+ `, G = g`
111
112
  mutation ProjectBoardUpdateColumn($id: ID!, $input: PlanmagnetUpdateBoardColumnInput!) {
112
113
  planmagnetUpdateBoardColumn(id: $id, input: $input) {
113
114
  id
114
115
  }
115
116
  }
116
- `, ae = h`
117
+ `, K = g`
117
118
  mutation ProjectBoardDeleteColumn($id: ID!) {
118
119
  planmagnetDeleteBoardColumn(id: $id)
119
120
  }
120
- `, oe = h`
121
+ `, ce = g`
121
122
  mutation ProjectBoardReorder($boardId: ID!, $input: PlanmagnetReorderColumnsInput!) {
122
123
  planmagnetReorderColumns(boardId: $boardId, input: $input) {
123
124
  id
124
125
  }
125
126
  }
126
- `, J = [
127
+ `, q = [
127
128
  "ProjectBoard",
128
129
  "ProjectBoards",
129
130
  "GetWorkItems",
130
131
  "GetWorkItemCounts",
131
132
  "GetDashboardData"
132
- ], Y = [
133
+ ], J = [
133
134
  "CRITICAL",
134
135
  "HIGH",
135
136
  "MEDIUM",
136
137
  "LOW",
137
138
  "NONE"
138
- ], se = 864e5;
139
- function X(e, t) {
140
- return e ? Math.max(0, Math.floor((t - new Date(e).getTime()) / se)) : null;
139
+ ], Y = 864e5;
140
+ function le(e, t) {
141
+ return e ? Math.max(0, Math.floor((t - new Date(e).getTime()) / Y)) : null;
141
142
  }
142
- function ce(e) {
143
+ function X(e) {
143
144
  return e >= 14 ? "text-destructive font-medium" : e >= 7 ? "text-status-warning-text" : "text-muted-foreground";
144
145
  }
145
146
  function Z(e, t) {
@@ -147,52 +148,57 @@ function Z(e, t) {
147
148
  }
148
149
  var Q = (e, t) => e instanceof Error ? e.message : t;
149
150
  function $({ message: e }) {
150
- return /* @__PURE__ */ y("p", {
151
+ return /* @__PURE__ */ b("p", {
151
152
  role: "alert",
152
153
  className: "text-sm text-destructive",
153
154
  children: e
154
155
  });
155
156
  }
156
- function le({ projectId: t, projectName: n }) {
157
- let { workspaceId: i } = e(), o = g(), [s, c] = l(null), [u, d] = l(null), [p] = l(() => Date.now()), [h, x] = l("none"), [S, ee] = l({
157
+ function ue({ projectId: t, projectName: n }) {
158
+ let { workspaceId: i } = e(), o = _(), [c, l] = u(null), [d, f] = u(null), [m] = u(() => Date.now()), [g, ee] = u("none"), [S, te] = u({
158
159
  key: null,
159
160
  byColumn: {}
160
- }), [C, w] = l(null), te = a(t), { data: T, loading: E } = v(V, {
161
+ }), [C, w] = u(null), [T, E] = u(/* @__PURE__ */ new Set()), D = (e) => E((t) => {
162
+ let n = new Set(t);
163
+ return n.has(e) ? n.delete(e) : n.add(e), n;
164
+ }), ne = () => E(/* @__PURE__ */ new Set()), A = a(t), { data: j, loading: ie } = y(se, {
161
165
  variables: {
162
166
  workspaceId: i,
163
167
  projectId: t
164
168
  },
165
169
  skip: !i
166
- }), D = T?.planmagnetBoards.items ?? [], A = (s && D.some((e) => e.id === s) ? s : null) ?? D.find((e) => e.isDefault)?.id ?? D[0]?.id ?? null, { data: re, loading: ie } = v(U, {
167
- variables: { id: A },
168
- skip: !A
169
- }), j = re?.planmagnetBoard ?? null, M = S.key === j ? S.byColumn : {}, N = (e) => {
170
- let t = M[e.id];
170
+ }), M = j?.planmagnetBoards.items ?? [], N = (c && M.some((e) => e.id === c) ? c : null) ?? M.find((e) => e.isDefault)?.id ?? M[0]?.id ?? null, [P, ae] = u(N);
171
+ P !== N && (ae(N), E(/* @__PURE__ */ new Set()));
172
+ let { data: oe, loading: F } = y(V, {
173
+ variables: { id: N },
174
+ skip: !N
175
+ }), L = oe?.planmagnetBoard ?? null, R = S.key === L ? S.byColumn : {}, z = (e) => {
176
+ let t = R[e.id];
171
177
  return {
172
178
  items: t ? [...e.cards.items, ...t.items] : e.cards.items,
173
179
  pageInfo: t ? t.pageInfo : e.cards.pageInfo,
174
180
  totalCount: e.cards.totalCount
175
181
  };
176
- }, P = async (e) => {
177
- let t = N(e).pageInfo.endCursor;
178
- if (!(!j || !t)) {
179
- d(null), w(e.id);
182
+ }, W = async (e) => {
183
+ let t = z(e).pageInfo.endCursor;
184
+ if (!(!L || !t)) {
185
+ f(null), w(e.id);
180
186
  try {
181
187
  let n = await o.query({
182
- query: H,
188
+ query: B,
183
189
  variables: {
184
- boardId: j.id,
190
+ boardId: L.id,
185
191
  columnId: e.id,
186
192
  after: t
187
193
  },
188
194
  fetchPolicy: "network-only"
189
195
  }), r = n.data?.planmagnetBoardColumnCards;
190
196
  if (!r) throw Error(n.error?.message ?? "The next cards could not be loaded.");
191
- let i = M[e.id]?.items ?? [];
192
- ee({
193
- key: j,
197
+ let i = R[e.id]?.items ?? [];
198
+ te({
199
+ key: L,
194
200
  byColumn: {
195
- ...M,
201
+ ...R,
196
202
  [e.id]: {
197
203
  items: [...i, ...r.items],
198
204
  pageInfo: r.pageInfo
@@ -200,216 +206,241 @@ function le({ projectId: t, projectName: n }) {
200
206
  }
201
207
  });
202
208
  } catch (e) {
203
- d(Q(e, "The next cards could not be loaded."));
209
+ f(Q(e, "The next cards could not be loaded."));
204
210
  } finally {
205
211
  w(null);
206
212
  }
207
213
  }
208
- }, [F, I] = _(G, {
209
- refetchQueries: J,
214
+ }, [G, K] = v(U, {
215
+ refetchQueries: q,
210
216
  awaitRefetchQueries: !0
211
- }), [R, z] = _(W, {
212
- refetchQueries: J,
217
+ }), [J, Y] = v(H, {
218
+ refetchQueries: q,
213
219
  awaitRefetchQueries: !0
214
- }), [B] = _(oe, {
215
- refetchQueries: J,
220
+ }), [le] = v(ce, {
221
+ refetchQueries: q,
216
222
  awaitRefetchQueries: !0
217
- }), K = async (e, t) => {
218
- d(null);
223
+ }), X = async (e, t) => {
224
+ f(null);
219
225
  try {
220
226
  await r(e());
221
227
  } catch (e) {
222
- d(Q(e, t));
228
+ f(Q(e, t));
223
229
  }
224
- }, q = (e, t) => K(() => R({ variables: {
225
- boardId: A,
230
+ }, Z = (e, t) => X(() => J({ variables: {
231
+ boardId: N,
226
232
  input: {
227
233
  workItemId: e,
228
234
  targetColumnId: t
229
235
  }
230
- } }), "The card could not be moved."), ae = (e, t) => {
231
- if (!j) return;
232
- let n = j.columns.map((e) => e.id), r = e + t;
233
- if (!(r < 0 || r >= n.length)) return [n[e], n[r]] = [n[r], n[e]], K(() => B({ variables: {
234
- boardId: A,
236
+ } }), "The card could not be moved."), ue = (e, t) => {
237
+ if (!L) return;
238
+ let n = L.columns.map((e) => e.id), r = e + t;
239
+ if (!(r < 0 || r >= n.length)) return [n[e], n[r]] = [n[r], n[e]], X(() => le({ variables: {
240
+ boardId: N,
235
241
  input: { columnIds: n }
236
242
  } }), "The columns could not be reordered.");
237
243
  };
238
- return E && !T ? /* @__PURE__ */ y("p", {
244
+ return ie && !j ? /* @__PURE__ */ b("p", {
239
245
  className: "text-sm text-muted-foreground p-4",
240
246
  children: "Loading board…"
241
- }) : A ? /* @__PURE__ */ y(L.Provider, {
242
- value: te,
243
- children: /* @__PURE__ */ b("div", {
247
+ }) : N ? /* @__PURE__ */ b(I.Provider, {
248
+ value: A,
249
+ children: /* @__PURE__ */ x("div", {
244
250
  className: "space-y-3",
245
251
  "data-testid": "project-board",
246
252
  children: [
247
- /* @__PURE__ */ b("div", {
253
+ /* @__PURE__ */ x("div", {
248
254
  className: "flex flex-wrap items-center gap-3",
249
255
  children: [
250
- D.length > 1 && /* @__PURE__ */ y("select", {
256
+ M.length > 1 && /* @__PURE__ */ b("select", {
251
257
  "aria-label": "Board",
252
258
  className: "rounded-md border border-input bg-background px-2 py-1 text-sm",
253
- value: A,
254
- onChange: (e) => c(e.target.value),
255
- children: D.map((e) => /* @__PURE__ */ y("option", {
259
+ value: N,
260
+ onChange: (e) => l(e.target.value),
261
+ children: M.map((e) => /* @__PURE__ */ b("option", {
256
262
  value: e.id,
257
263
  children: e.name
258
264
  }, e.id))
259
265
  }),
260
- j && /* @__PURE__ */ b("label", {
266
+ L && /* @__PURE__ */ x("label", {
261
267
  className: "flex items-center gap-1 text-sm",
262
- children: [/* @__PURE__ */ y("span", {
268
+ children: [/* @__PURE__ */ b("span", {
263
269
  className: "text-muted-foreground",
264
270
  children: "Swimlanes"
265
- }), /* @__PURE__ */ b("select", {
271
+ }), /* @__PURE__ */ x("select", {
266
272
  "aria-label": "Swimlanes",
267
273
  "data-testid": "board-lanes",
268
274
  className: "rounded-md border border-input bg-background px-2 py-1 text-sm",
269
- value: h,
270
- onChange: (e) => x(e.target.value),
275
+ value: g,
276
+ onChange: (e) => ee(e.target.value),
271
277
  children: [
272
- /* @__PURE__ */ y("option", {
278
+ /* @__PURE__ */ b("option", {
273
279
  value: "none",
274
280
  children: "None"
275
281
  }),
276
- /* @__PURE__ */ y("option", {
282
+ /* @__PURE__ */ b("option", {
277
283
  value: "assignee",
278
284
  children: "By assignee"
279
285
  }),
280
- /* @__PURE__ */ y("option", {
286
+ /* @__PURE__ */ b("option", {
281
287
  value: "priority",
282
288
  children: "By priority"
283
289
  })
284
290
  ]
285
291
  })]
286
292
  }),
287
- j && j.unplacedCount > 0 && /* @__PURE__ */ b("p", {
293
+ L && L.unplacedCount > 0 && /* @__PURE__ */ x("p", {
288
294
  className: "text-xs text-muted-foreground",
289
295
  "data-testid": "board-unplaced",
290
296
  children: [
291
- j.unplacedCount,
297
+ L.unplacedCount,
292
298
  " work item",
293
- j.unplacedCount === 1 ? " is" : "s are",
299
+ L.unplacedCount === 1 ? " is" : "s are",
294
300
  " not on this board: ",
295
- j.unplacedCount === 1 ? "its status has" : "their status has",
301
+ L.unplacedCount === 1 ? "its status has" : "their status has",
296
302
  " no column."
297
303
  ]
298
304
  }),
299
- j && /* @__PURE__ */ y("div", {
305
+ L && /* @__PURE__ */ b("div", {
300
306
  className: "ml-auto",
301
- children: /* @__PURE__ */ y(he, { boardId: j.id })
307
+ children: /* @__PURE__ */ b(ge, { boardId: L.id })
302
308
  })
303
309
  ]
304
310
  }),
305
- u && /* @__PURE__ */ y($, { message: u }),
306
- ie && !j ? /* @__PURE__ */ y("p", {
311
+ d && /* @__PURE__ */ b($, { message: d }),
312
+ L && T.size > 0 && /* @__PURE__ */ b(s, {
313
+ projectId: t,
314
+ selectedIds: [...T],
315
+ workflow: A,
316
+ onDone: ne
317
+ }),
318
+ F && !L ? /* @__PURE__ */ b("p", {
307
319
  className: "text-sm text-muted-foreground p-4",
308
320
  children: "Loading board…"
309
- }) : j && h !== "none" ? /* @__PURE__ */ y(pe, {
310
- board: j,
311
- laneBy: h,
312
- cardsOf: N,
313
- now: p,
314
- busy: z.loading,
321
+ }) : L && g !== "none" ? /* @__PURE__ */ b(me, {
322
+ board: L,
323
+ laneBy: g,
324
+ cardsOf: z,
325
+ now: m,
326
+ busy: Y.loading,
315
327
  loadingMore: C,
316
- onLoadMore: (e) => void P(e),
317
- onMove: q
318
- }) : /* @__PURE__ */ b("div", {
328
+ selected: T,
329
+ onToggleSelect: D,
330
+ onLoadMore: (e) => void W(e),
331
+ onMove: Z
332
+ }) : /* @__PURE__ */ x("div", {
319
333
  className: "flex gap-3 overflow-x-auto pb-2",
320
- children: [j?.columns.map((e, t) => /* @__PURE__ */ y(me, {
321
- boardId: j.id,
334
+ children: [L?.columns.map((e, t) => /* @__PURE__ */ b(he, {
335
+ boardId: L.id,
322
336
  column: e,
323
- columns: j.columns,
324
- cards: N(e),
337
+ columns: L.columns,
338
+ cards: z(e),
325
339
  isFirst: t === 0,
326
- isLast: t === j.columns.length - 1,
327
- busy: z.loading,
328
- now: p,
340
+ isLast: t === L.columns.length - 1,
341
+ busy: Y.loading,
342
+ now: m,
329
343
  loadingMore: C === e.id,
330
- onLoadMore: () => void P(e),
331
- onMove: q,
332
- onShift: (e) => ae(t, e)
333
- }, e.id)), j && j.columns.length === 0 && /* @__PURE__ */ y("p", {
344
+ selected: T,
345
+ onToggleSelect: D,
346
+ onLoadMore: () => void W(e),
347
+ onMove: Z,
348
+ onShift: (e) => ue(t, e)
349
+ }, e.id)), L && L.columns.length === 0 && /* @__PURE__ */ b("p", {
334
350
  className: "text-sm text-muted-foreground p-4",
335
351
  children: "This board has no columns. Add one to start placing work."
336
352
  })]
337
353
  })
338
354
  ]
339
355
  })
340
- }) : /* @__PURE__ */ y(k, { children: /* @__PURE__ */ b(ne, {
356
+ }) : /* @__PURE__ */ b(k, { children: /* @__PURE__ */ x(re, {
341
357
  className: "p-8 text-center space-y-3",
342
358
  "data-testid": "board-empty",
343
359
  children: [
344
- /* @__PURE__ */ y(f, { className: "h-8 w-8 mx-auto text-muted-foreground" }),
345
- /* @__PURE__ */ b("p", {
360
+ /* @__PURE__ */ b(p, { className: "h-8 w-8 mx-auto text-muted-foreground" }),
361
+ /* @__PURE__ */ x("p", {
346
362
  className: "text-sm text-muted-foreground",
347
363
  children: [n, " has no board yet."]
348
364
  }),
349
- /* @__PURE__ */ b(O, {
365
+ /* @__PURE__ */ x(O, {
350
366
  size: "sm",
351
- disabled: I.loading,
352
- onClick: () => K(() => F({ variables: { input: {
367
+ disabled: K.loading,
368
+ onClick: () => X(() => G({ variables: { input: {
353
369
  projectId: t,
354
370
  name: `${n} board`,
355
371
  type: "KANBAN",
356
372
  isDefault: !0,
357
373
  withDefaultColumns: !0
358
374
  } } }), "The board could not be created."),
359
- children: [/* @__PURE__ */ y(m, { className: "mr-1 h-4 w-4" }), I.loading ? "Creating…" : "Create board"]
375
+ children: [/* @__PURE__ */ b(h, { className: "mr-1 h-4 w-4" }), K.loading ? "Creating…" : "Create board"]
360
376
  }),
361
- /* @__PURE__ */ y("p", {
377
+ /* @__PURE__ */ b("p", {
362
378
  className: "text-xs text-muted-foreground",
363
379
  children: "Starts with one column per status: Backlog, To Do, In Progress, In Review, Testing, Done."
364
380
  }),
365
- u && /* @__PURE__ */ y($, { message: u })
381
+ d && /* @__PURE__ */ b($, { message: d })
366
382
  ]
367
383
  }) });
368
384
  }
369
- function ue({ card: e, column: r, columns: a, busy: s, now: l, onMove: u }) {
370
- let d = t(), f = c(L), p = X(e.statusSince, l), m = i(f, e.status, I), h = a.filter((e) => e.id !== r.id && (!e.mappedStatus || m.includes(e.mappedStatus)));
371
- return /* @__PURE__ */ b("li", {
385
+ function de({ card: e, column: r, columns: a, busy: s, now: c, selected: u, onToggleSelect: d, onMove: f }) {
386
+ let p = t(), m = l(I), h = le(e.statusSince, c), g = i(m, e.status, F), _ = a.filter((e) => e.id !== r.id && (!e.mappedStatus || g.includes(e.mappedStatus)));
387
+ return /* @__PURE__ */ x("li", {
372
388
  draggable: !0,
373
389
  onDragStart: (t) => {
374
390
  t.dataTransfer.setData("text/plain", e.id), t.dataTransfer.effectAllowed = "move";
375
391
  },
376
- className: "rounded-md border bg-background p-2 space-y-1 cursor-grab",
392
+ className: `rounded-md border bg-background p-2 space-y-1 cursor-grab ${u ? "ring-2 ring-primary" : ""}`,
377
393
  "data-testid": "board-card",
378
394
  children: [
379
- /* @__PURE__ */ y("button", {
380
- type: "button",
381
- className: "text-left text-sm font-medium leading-tight hover:underline",
382
- onClick: () => d(`/tasks/task-detail-page?taskId=${encodeURIComponent(e.id)}`),
383
- children: e.title
395
+ /* @__PURE__ */ x("div", {
396
+ className: "flex items-start gap-1.5",
397
+ children: [/* @__PURE__ */ b("input", {
398
+ type: "checkbox",
399
+ className: "mt-0.5 shrink-0",
400
+ "aria-label": `Select ${e.key}`,
401
+ "data-testid": "board-card-select",
402
+ checked: u,
403
+ draggable: !1,
404
+ onMouseDown: (e) => e.stopPropagation(),
405
+ onPointerDown: (e) => e.stopPropagation(),
406
+ onDragStart: (e) => e.stopPropagation(),
407
+ onClick: (e) => e.stopPropagation(),
408
+ onChange: () => d(e.id)
409
+ }), /* @__PURE__ */ b("button", {
410
+ type: "button",
411
+ className: "text-left text-sm font-medium leading-tight hover:underline",
412
+ onClick: () => p(`/tasks/task-detail-page?taskId=${encodeURIComponent(e.id)}`),
413
+ children: e.title
414
+ })]
384
415
  }),
385
- /* @__PURE__ */ b("div", {
416
+ /* @__PURE__ */ x("div", {
386
417
  className: "flex items-center justify-between text-[11px] text-muted-foreground",
387
418
  children: [
388
- /* @__PURE__ */ y("span", { children: e.key }),
389
- p !== null && /* @__PURE__ */ y("span", {
419
+ /* @__PURE__ */ b("span", { children: e.key }),
420
+ h !== null && /* @__PURE__ */ b("span", {
390
421
  "data-testid": "card-age",
391
- className: ce(p),
392
- title: `In ${o(f, e.status)} since ${new Date(e.statusSince ?? "").toLocaleDateString()}`,
393
- children: p === 0 ? "today" : `${p}d in status`
422
+ className: X(h),
423
+ title: `In ${o(m, e.status)} since ${new Date(e.statusSince ?? "").toLocaleDateString()}`,
424
+ children: h === 0 ? "today" : `${h}d in status`
394
425
  }),
395
- /* @__PURE__ */ b("span", { children: [e.storyPoints ?? 0, " pts"] })
426
+ /* @__PURE__ */ x("span", { children: [e.storyPoints ?? 0, " pts"] })
396
427
  ]
397
428
  }),
398
- /* @__PURE__ */ b("div", {
429
+ /* @__PURE__ */ x("div", {
399
430
  className: "flex items-center justify-between gap-1 text-[11px] text-muted-foreground",
400
- children: [/* @__PURE__ */ y("span", {
431
+ children: [/* @__PURE__ */ b("span", {
401
432
  className: "truncate",
402
- children: e.assigneeId ? /* @__PURE__ */ y(n, { id: e.assigneeId }) : "Unassigned"
403
- }), /* @__PURE__ */ b("select", {
433
+ children: e.assigneeId ? /* @__PURE__ */ b(n, { id: e.assigneeId }) : "Unassigned"
434
+ }), /* @__PURE__ */ x("select", {
404
435
  "aria-label": `Move ${e.key} to column`,
405
436
  className: "rounded border border-input bg-background px-1 py-0.5 text-[11px]",
406
437
  value: "",
407
438
  disabled: s,
408
- onChange: (t) => t.target.value && u(e.id, t.target.value),
409
- children: [/* @__PURE__ */ y("option", {
439
+ onChange: (t) => t.target.value && f(e.id, t.target.value),
440
+ children: [/* @__PURE__ */ b("option", {
410
441
  value: "",
411
442
  children: "Move…"
412
- }), h.map((e) => /* @__PURE__ */ y("option", {
443
+ }), _.map((e) => /* @__PURE__ */ b("option", {
413
444
  value: e.id,
414
445
  children: e.name
415
446
  }, e.id))]
@@ -418,9 +449,9 @@ function ue({ card: e, column: r, columns: a, busy: s, now: l, onMove: u }) {
418
449
  ]
419
450
  });
420
451
  }
421
- function de({ column: e, onMove: t, className: n, children: r, label: i }) {
422
- let [a, o] = l(!1);
423
- return /* @__PURE__ */ y("section", {
452
+ function fe({ column: e, onMove: t, className: n, children: r, label: i }) {
453
+ let [a, o] = u(!1);
454
+ return /* @__PURE__ */ b("section", {
424
455
  "aria-label": i,
425
456
  className: `${n} ${a ? "ring-2 ring-primary" : ""}`,
426
457
  onDragOver: (e) => {
@@ -435,11 +466,11 @@ function de({ column: e, onMove: t, className: n, children: r, label: i }) {
435
466
  children: r
436
467
  });
437
468
  }
438
- function fe({ cards: e, loading: t, onLoadMore: n }) {
469
+ function pe({ cards: e, loading: t, onLoadMore: n }) {
439
470
  let r = e.totalCount - e.items.length;
440
- return r <= 0 || !e.pageInfo.hasNextPage ? null : /* @__PURE__ */ b("div", {
471
+ return r <= 0 || !e.pageInfo.hasNextPage ? null : /* @__PURE__ */ x("div", {
441
472
  className: "px-2 pb-2 space-y-1",
442
- children: [/* @__PURE__ */ b("p", {
473
+ children: [/* @__PURE__ */ x("p", {
443
474
  className: "text-xs text-muted-foreground",
444
475
  children: [
445
476
  "Showing ",
@@ -447,27 +478,27 @@ function fe({ cards: e, loading: t, onLoadMore: n }) {
447
478
  " of ",
448
479
  e.totalCount
449
480
  ]
450
- }), /* @__PURE__ */ y(O, {
481
+ }), /* @__PURE__ */ b(O, {
451
482
  size: "sm",
452
483
  variant: "outline",
453
484
  className: "w-full",
454
485
  "data-testid": "board-column-more",
455
486
  disabled: t,
456
487
  onClick: n,
457
- children: t ? "Loading…" : `Show ${Math.min(r, B)} more`
488
+ children: t ? "Loading…" : `Show ${Math.min(r, z)} more`
458
489
  })]
459
490
  });
460
491
  }
461
- function pe({ board: e, laneBy: t, cardsOf: r, now: i, busy: a, loadingMore: o, onLoadMore: s, onMove: c }) {
462
- let l = e.columns.map((e) => ({
492
+ function me({ board: e, laneBy: t, cardsOf: r, now: i, busy: a, loadingMore: o, selected: s, onToggleSelect: c, onLoadMore: l, onMove: u }) {
493
+ let d = e.columns.map((e) => ({
463
494
  column: e,
464
495
  cards: r(e)
465
- })), u = [...new Set(l.flatMap(({ cards: e }) => e.items.map((e) => Z(e, t))))].sort((e, n) => t === "priority" ? Y.indexOf(e) - Y.indexOf(n) : e === "" ? 1 : n === "" ? -1 : e.localeCompare(n)), d = (e) => t === "priority" ? z(e) : e ? /* @__PURE__ */ y(n, { id: e }) : "Unassigned";
466
- return /* @__PURE__ */ b("div", {
496
+ })), f = [...new Set(d.flatMap(({ cards: e }) => e.items.map((e) => Z(e, t))))].sort((e, n) => t === "priority" ? J.indexOf(e) - J.indexOf(n) : e === "" ? 1 : n === "" ? -1 : e.localeCompare(n)), p = (e) => t === "priority" ? R(e) : e ? /* @__PURE__ */ b(n, { id: e }) : "Unassigned";
497
+ return /* @__PURE__ */ x("div", {
467
498
  className: "overflow-x-auto pb-2 space-y-3",
468
499
  "data-testid": "board-swimlanes",
469
500
  children: [
470
- /* @__PURE__ */ b("p", {
501
+ /* @__PURE__ */ x("p", {
471
502
  className: "text-xs text-muted-foreground",
472
503
  children: [
473
504
  "Dragging moves a card between columns. Its lane follows its",
@@ -476,16 +507,16 @@ function pe({ board: e, laneBy: t, cardsOf: r, now: i, busy: a, loadingMore: o,
476
507
  "."
477
508
  ]
478
509
  }),
479
- /* @__PURE__ */ y("div", {
510
+ /* @__PURE__ */ b("div", {
480
511
  className: "flex gap-3",
481
- children: l.map(({ column: e, cards: t }) => /* @__PURE__ */ y("div", {
512
+ children: d.map(({ column: e, cards: t }) => /* @__PURE__ */ b("div", {
482
513
  className: "min-w-[240px] w-[240px] shrink-0 px-2",
483
- children: /* @__PURE__ */ b("h3", {
514
+ children: /* @__PURE__ */ x("h3", {
484
515
  className: "text-sm font-medium truncate",
485
516
  children: [
486
517
  e.name,
487
518
  " ",
488
- /* @__PURE__ */ y("span", {
519
+ /* @__PURE__ */ b("span", {
489
520
  className: "text-xs text-muted-foreground",
490
521
  children: e.wipLimit ? `${t.totalCount} / ${e.wipLimit}` : t.totalCount
491
522
  })
@@ -493,112 +524,114 @@ function pe({ board: e, laneBy: t, cardsOf: r, now: i, busy: a, loadingMore: o,
493
524
  })
494
525
  }, e.id))
495
526
  }),
496
- u.length === 0 && /* @__PURE__ */ y("p", {
527
+ f.length === 0 && /* @__PURE__ */ b("p", {
497
528
  className: "text-sm text-muted-foreground p-4",
498
529
  children: "No cards on this board yet."
499
530
  }),
500
- u.map((n) => /* @__PURE__ */ b("div", {
531
+ f.map((n) => /* @__PURE__ */ x("div", {
501
532
  "data-testid": "board-lane",
502
533
  className: "space-y-1",
503
- children: [/* @__PURE__ */ b("p", {
534
+ children: [/* @__PURE__ */ x("p", {
504
535
  className: "text-xs font-medium",
505
536
  children: [
506
- d(n),
537
+ p(n),
507
538
  " ",
508
- /* @__PURE__ */ b("span", {
539
+ /* @__PURE__ */ x("span", {
509
540
  className: "text-muted-foreground",
510
541
  children: [
511
542
  "(",
512
- l.reduce((e, { cards: r }) => e + r.items.filter((e) => Z(e, t) === n).length, 0),
543
+ d.reduce((e, { cards: r }) => e + r.items.filter((e) => Z(e, t) === n).length, 0),
513
544
  ")"
514
545
  ]
515
546
  })
516
547
  ]
517
- }), /* @__PURE__ */ y("div", {
548
+ }), /* @__PURE__ */ b("div", {
518
549
  className: "flex gap-3",
519
- children: l.map(({ column: r, cards: o }) => /* @__PURE__ */ y(de, {
550
+ children: d.map(({ column: r, cards: o }) => /* @__PURE__ */ b(fe, {
520
551
  column: r,
521
- onMove: c,
552
+ onMove: u,
522
553
  label: `${r.name} column`,
523
554
  className: "min-w-[240px] w-[240px] shrink-0 rounded-md border bg-muted/30",
524
- children: /* @__PURE__ */ y("ul", {
555
+ children: /* @__PURE__ */ b("ul", {
525
556
  className: "p-2 space-y-2 min-h-[48px]",
526
- children: o.items.filter((e) => Z(e, t) === n).map((t) => /* @__PURE__ */ y(ue, {
557
+ children: o.items.filter((e) => Z(e, t) === n).map((t) => /* @__PURE__ */ b(de, {
527
558
  card: t,
528
559
  column: r,
529
560
  columns: e.columns,
530
561
  busy: a,
531
562
  now: i,
532
- onMove: c
563
+ selected: s.has(t.id),
564
+ onToggleSelect: c,
565
+ onMove: u
533
566
  }, t.id))
534
567
  })
535
568
  }, r.id))
536
569
  })]
537
570
  }, n || "none")),
538
- /* @__PURE__ */ y("div", {
571
+ /* @__PURE__ */ b("div", {
539
572
  className: "flex gap-3",
540
- children: l.map(({ column: e, cards: t }) => /* @__PURE__ */ y("div", {
573
+ children: d.map(({ column: e, cards: t }) => /* @__PURE__ */ b("div", {
541
574
  className: "min-w-[240px] w-[240px] shrink-0",
542
- children: /* @__PURE__ */ y(fe, {
575
+ children: /* @__PURE__ */ b(pe, {
543
576
  cards: t,
544
577
  loading: o === e.id,
545
- onLoadMore: () => s(e)
578
+ onLoadMore: () => l(e)
546
579
  })
547
580
  }, e.id))
548
581
  })
549
582
  ]
550
583
  });
551
584
  }
552
- function me({ boardId: e, column: t, columns: n, cards: r, isFirst: i, isLast: a, busy: o, now: s, loadingMore: c, onLoadMore: l, onMove: f, onShift: p }) {
553
- let m = r.totalCount, h = t.wipLimit != null && t.wipLimit > 0 && m >= t.wipLimit, g = R();
554
- return /* @__PURE__ */ y(de, {
585
+ function he({ boardId: e, column: t, columns: n, cards: r, isFirst: i, isLast: a, busy: o, now: s, loadingMore: c, selected: l, onToggleSelect: u, onLoadMore: p, onMove: m, onShift: h }) {
586
+ let g = r.totalCount, _ = t.wipLimit != null && t.wipLimit > 0 && g >= t.wipLimit, v = L();
587
+ return /* @__PURE__ */ b(fe, {
555
588
  column: t,
556
- onMove: f,
589
+ onMove: m,
557
590
  label: `${t.name} column`,
558
591
  className: "min-w-[240px] w-[240px] shrink-0 rounded-md border bg-muted/30",
559
- children: /* @__PURE__ */ b("div", {
592
+ children: /* @__PURE__ */ x("div", {
560
593
  "data-testid": `board-column-${t.name}`,
561
594
  children: [
562
- /* @__PURE__ */ b("header", {
595
+ /* @__PURE__ */ x("header", {
563
596
  className: "p-2 border-b space-y-1",
564
- children: [/* @__PURE__ */ b("div", {
597
+ children: [/* @__PURE__ */ x("div", {
565
598
  className: "flex items-center justify-between gap-1",
566
- children: [/* @__PURE__ */ y("h3", {
599
+ children: [/* @__PURE__ */ b("h3", {
567
600
  className: "text-sm font-medium truncate",
568
601
  children: t.name
569
- }), /* @__PURE__ */ y("span", {
602
+ }), /* @__PURE__ */ b("span", {
570
603
  "data-testid": `board-column-count-${t.name}`,
571
- className: `text-xs rounded-full px-1.5 ${h ? "bg-status-warning-subtle text-status-warning" : "bg-muted"}`,
604
+ className: `text-xs rounded-full px-1.5 ${_ ? "bg-status-warning-subtle text-status-warning" : "bg-muted"}`,
572
605
  title: t.wipLimit ? `WIP limit ${t.wipLimit}` : void 0,
573
- children: t.wipLimit ? `${m} / ${t.wipLimit}` : m
606
+ children: t.wipLimit ? `${g} / ${t.wipLimit}` : g
574
607
  })]
575
- }), /* @__PURE__ */ b("div", {
608
+ }), /* @__PURE__ */ x("div", {
576
609
  className: "flex items-center justify-between gap-1",
577
- children: [/* @__PURE__ */ y("span", {
610
+ children: [/* @__PURE__ */ b("span", {
578
611
  className: "text-[11px] text-muted-foreground",
579
- children: t.mappedStatus ? `Sets status: ${g(t.mappedStatus)}` : "No status"
580
- }), /* @__PURE__ */ b("span", {
612
+ children: t.mappedStatus ? `Sets status: ${v(t.mappedStatus)}` : "No status"
613
+ }), /* @__PURE__ */ x("span", {
581
614
  className: "flex",
582
615
  children: [
583
- /* @__PURE__ */ y(O, {
616
+ /* @__PURE__ */ b(O, {
584
617
  size: "icon",
585
618
  variant: "ghost",
586
619
  className: "h-6 w-6",
587
620
  "aria-label": `Move ${t.name} column left`,
588
621
  disabled: i,
589
- onClick: () => p(-1),
590
- children: /* @__PURE__ */ y(u, { className: "h-3.5 w-3.5" })
622
+ onClick: () => h(-1),
623
+ children: /* @__PURE__ */ b(d, { className: "h-3.5 w-3.5" })
591
624
  }),
592
- /* @__PURE__ */ y(O, {
625
+ /* @__PURE__ */ b(O, {
593
626
  size: "icon",
594
627
  variant: "ghost",
595
628
  className: "h-6 w-6",
596
629
  "aria-label": `Move ${t.name} column right`,
597
630
  disabled: a,
598
- onClick: () => p(1),
599
- children: /* @__PURE__ */ y(d, { className: "h-3.5 w-3.5" })
631
+ onClick: () => h(1),
632
+ children: /* @__PURE__ */ b(f, { className: "h-3.5 w-3.5" })
600
633
  }),
601
- /* @__PURE__ */ y(he, {
634
+ /* @__PURE__ */ b(ge, {
602
635
  boardId: e,
603
636
  column: t
604
637
  })
@@ -606,154 +639,156 @@ function me({ boardId: e, column: t, columns: n, cards: r, isFirst: i, isLast: a
606
639
  })]
607
640
  })]
608
641
  }),
609
- /* @__PURE__ */ b("ul", {
642
+ /* @__PURE__ */ x("ul", {
610
643
  className: "p-2 space-y-2 min-h-[80px]",
611
- children: [r.items.map((e) => /* @__PURE__ */ y(ue, {
644
+ children: [r.items.map((e) => /* @__PURE__ */ b(de, {
612
645
  card: e,
613
646
  column: t,
614
647
  columns: n,
615
648
  busy: o,
616
649
  now: s,
617
- onMove: f
618
- }, e.id)), m === 0 && /* @__PURE__ */ y("li", {
650
+ selected: l.has(e.id),
651
+ onToggleSelect: u,
652
+ onMove: m
653
+ }, e.id)), g === 0 && /* @__PURE__ */ b("li", {
619
654
  className: "text-xs text-muted-foreground text-center py-4",
620
655
  children: "Empty"
621
656
  })]
622
657
  }),
623
- /* @__PURE__ */ y(fe, {
658
+ /* @__PURE__ */ b(pe, {
624
659
  cards: r,
625
660
  loading: c,
626
- onLoadMore: l
661
+ onLoadMore: p
627
662
  })
628
663
  ]
629
664
  })
630
665
  });
631
666
  }
632
- function he({ boardId: e, column: t }) {
633
- let n = t !== void 0, i = R(), [a, o] = l(!1), [s, c] = l(t?.name ?? ""), [u, d] = l(t?.mappedStatus ?? ""), [f, h] = l(t?.wipLimit ? String(t.wipLimit) : ""), [g, v] = l(null), k = {
634
- refetchQueries: J,
667
+ function ge({ boardId: e, column: t }) {
668
+ let n = t !== void 0, i = L(), [a, o] = u(!1), [s, c] = u(t?.name ?? ""), [l, d] = u(t?.mappedStatus ?? ""), [f, p] = u(t?.wipLimit ? String(t.wipLimit) : ""), [g, _] = u(null), y = {
669
+ refetchQueries: q,
635
670
  awaitRefetchQueries: !0
636
- }, [ne, L] = _(K, k), [z, B] = _(q, k), [V, H] = _(ae, k), U = L.loading || B.loading || H.loading, W = f.trim() === "" ? null : Number(f), G = W !== null && (!Number.isInteger(W) || W < 1), oe = s.trim() !== "" && !G && !U, Y = () => {
637
- c(t?.name ?? ""), d(t?.mappedStatus ?? ""), h(t?.wipLimit ? String(t.wipLimit) : ""), v(null);
638
- }, se = async () => {
639
- v(null);
671
+ }, [k, re] = v(W, y), [I, R] = v(G, y), [z, se] = v(K, y), B = re.loading || R.loading || se.loading, V = f.trim() === "" ? null : Number(f), H = V !== null && (!Number.isInteger(V) || V < 1), U = s.trim() !== "" && !H && !B, ce = () => {
672
+ c(t?.name ?? ""), d(t?.mappedStatus ?? ""), p(t?.wipLimit ? String(t.wipLimit) : ""), _(null);
673
+ }, J = async () => {
674
+ _(null);
640
675
  let i = {
641
676
  name: s.trim(),
642
- mappedStatus: u || null,
643
- wipLimit: W
677
+ mappedStatus: l || null,
678
+ wipLimit: V
644
679
  };
645
680
  try {
646
- n ? await r(z({ variables: {
681
+ n ? await r(I({ variables: {
647
682
  id: t.id,
648
683
  input: i
649
- } })) : await r(ne({ variables: { input: {
684
+ } })) : await r(k({ variables: { input: {
650
685
  boardId: e,
651
686
  type: "CUSTOM",
652
687
  ...i
653
688
  } } })), o(!1);
654
689
  } catch (e) {
655
- v(Q(e, "The column could not be saved."));
690
+ _(Q(e, "The column could not be saved."));
656
691
  }
657
- }, X = n ? `column-${t.id}` : "new-column";
658
- return /* @__PURE__ */ b(re, {
692
+ }, Y = n ? `column-${t.id}` : "new-column";
693
+ return /* @__PURE__ */ x(j, {
659
694
  open: a,
660
695
  onOpenChange: (e) => {
661
- o(e), e && Y();
696
+ o(e), e && ce();
662
697
  },
663
- children: [/* @__PURE__ */ y(F, {
698
+ children: [/* @__PURE__ */ b(oe, {
664
699
  asChild: !0,
665
- children: n ? /* @__PURE__ */ y(O, {
700
+ children: n ? /* @__PURE__ */ b(O, {
666
701
  size: "icon",
667
702
  variant: "ghost",
668
703
  className: "h-6 w-6",
669
704
  "aria-label": `Edit ${t.name} column`,
670
- children: /* @__PURE__ */ y(p, { className: "h-3.5 w-3.5" })
671
- }) : /* @__PURE__ */ b(O, {
705
+ children: /* @__PURE__ */ b(m, { className: "h-3.5 w-3.5" })
706
+ }) : /* @__PURE__ */ x(O, {
672
707
  size: "sm",
673
708
  variant: "outline",
674
- children: [/* @__PURE__ */ y(m, { className: "mr-1 h-4 w-4" }), "Add column"]
709
+ children: [/* @__PURE__ */ b(h, { className: "mr-1 h-4 w-4" }), "Add column"]
675
710
  })
676
- }), /* @__PURE__ */ b(ie, {
711
+ }), /* @__PURE__ */ x(ie, {
677
712
  className: "max-w-md",
678
713
  children: [
679
- /* @__PURE__ */ b(N, { children: [/* @__PURE__ */ y(P, { children: n ? `Edit ${t.name}` : "Add column" }), /* @__PURE__ */ y(j, { children: "Moving a card into a column that sets a status changes the work item's status." })] }),
680
- /* @__PURE__ */ b("div", {
714
+ /* @__PURE__ */ x(P, { children: [/* @__PURE__ */ b(ae, { children: n ? `Edit ${t.name}` : "Add column" }), /* @__PURE__ */ b(M, { children: "Moving a card into a column that sets a status changes the work item's status." })] }),
715
+ /* @__PURE__ */ x("div", {
681
716
  className: "space-y-3",
682
717
  children: [
683
- /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("label", {
684
- htmlFor: `${X}-name`,
718
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
719
+ htmlFor: `${Y}-name`,
685
720
  className: "text-sm font-medium",
686
721
  children: "Name"
687
- }), /* @__PURE__ */ y(A, {
688
- id: `${X}-name`,
722
+ }), /* @__PURE__ */ b(A, {
723
+ id: `${Y}-name`,
689
724
  className: "mt-1",
690
725
  value: s,
691
726
  onChange: (e) => c(e.target.value)
692
727
  })] }),
693
- /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("label", {
694
- htmlFor: `${X}-status`,
728
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
729
+ htmlFor: `${Y}-status`,
695
730
  className: "text-sm font-medium",
696
731
  children: "Sets status"
697
- }), /* @__PURE__ */ b("select", {
698
- id: `${X}-status`,
732
+ }), /* @__PURE__ */ x("select", {
733
+ id: `${Y}-status`,
699
734
  className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
700
- value: u,
735
+ value: l,
701
736
  onChange: (e) => d(e.target.value),
702
- children: [/* @__PURE__ */ y("option", {
737
+ children: [/* @__PURE__ */ b("option", {
703
738
  value: "",
704
739
  children: "No status (cards keep theirs)"
705
- }), I.map((e) => /* @__PURE__ */ y("option", {
740
+ }), F.map((e) => /* @__PURE__ */ b("option", {
706
741
  value: e,
707
742
  children: i(e)
708
743
  }, e))]
709
744
  })] }),
710
- /* @__PURE__ */ b("div", { children: [
711
- /* @__PURE__ */ y("label", {
712
- htmlFor: `${X}-wip`,
745
+ /* @__PURE__ */ x("div", { children: [
746
+ /* @__PURE__ */ b("label", {
747
+ htmlFor: `${Y}-wip`,
713
748
  className: "text-sm font-medium",
714
749
  children: "WIP limit (blank for none)"
715
750
  }),
716
- /* @__PURE__ */ y(A, {
717
- id: `${X}-wip`,
751
+ /* @__PURE__ */ b(A, {
752
+ id: `${Y}-wip`,
718
753
  type: "number",
719
754
  min: 1,
720
755
  className: "mt-1",
721
756
  value: f,
722
- onChange: (e) => h(e.target.value)
757
+ onChange: (e) => p(e.target.value)
723
758
  }),
724
- G && /* @__PURE__ */ y($, { message: "The WIP limit must be a whole number, 1 or more." })
759
+ H && /* @__PURE__ */ b($, { message: "The WIP limit must be a whole number, 1 or more." })
725
760
  ] })
726
761
  ]
727
762
  }),
728
- g && /* @__PURE__ */ y($, { message: g }),
729
- /* @__PURE__ */ b(M, {
763
+ g && /* @__PURE__ */ b($, { message: g }),
764
+ /* @__PURE__ */ x(N, {
730
765
  className: "gap-2",
731
- children: [n && /* @__PURE__ */ b(x, { children: [/* @__PURE__ */ y(D, {
766
+ children: [n && /* @__PURE__ */ x(ee, { children: [/* @__PURE__ */ b(ne, {
732
767
  asChild: !0,
733
- children: /* @__PURE__ */ y(O, {
768
+ children: /* @__PURE__ */ b(O, {
734
769
  variant: "outline",
735
- disabled: U,
770
+ disabled: B,
736
771
  children: "Delete column"
737
772
  })
738
- }), /* @__PURE__ */ b(C, { children: [/* @__PURE__ */ b(T, { children: [/* @__PURE__ */ b(E, { children: [
773
+ }), /* @__PURE__ */ x(C, { children: [/* @__PURE__ */ x(E, { children: [/* @__PURE__ */ x(D, { children: [
739
774
  "Delete ",
740
775
  t.name,
741
776
  "?"
742
- ] }), /* @__PURE__ */ y(w, { children: "Its cards are not deleted: each goes back to the column for its status, or off the board if no column sets that status." })] }), /* @__PURE__ */ b(te, { children: [/* @__PURE__ */ y(ee, { children: "Keep it" }), /* @__PURE__ */ y(S, {
777
+ ] }), /* @__PURE__ */ b(w, { children: "Its cards are not deleted: each goes back to the column for its status, or off the board if no column sets that status." })] }), /* @__PURE__ */ x(T, { children: [/* @__PURE__ */ b(te, { children: "Keep it" }), /* @__PURE__ */ b(S, {
743
778
  className: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
744
779
  onClick: async () => {
745
780
  try {
746
- await r(V({ variables: { id: t.id } })), o(!1);
781
+ await r(z({ variables: { id: t.id } })), o(!1);
747
782
  } catch (e) {
748
- v(Q(e, "The column could not be deleted."));
783
+ _(Q(e, "The column could not be deleted."));
749
784
  }
750
785
  },
751
786
  children: "Delete column"
752
- })] })] })] }), /* @__PURE__ */ y(O, {
753
- onClick: se,
754
- disabled: !oe,
755
- "data-testid": `${X}-save`,
756
- children: U ? "Saving…" : n ? "Save" : "Add column"
787
+ })] })] })] }), /* @__PURE__ */ b(O, {
788
+ onClick: J,
789
+ disabled: !U,
790
+ "data-testid": `${Y}-save`,
791
+ children: B ? "Saving…" : n ? "Save" : "Add column"
757
792
  })]
758
793
  })
759
794
  ]
@@ -761,6 +796,6 @@ function he({ boardId: e, column: t }) {
761
796
  });
762
797
  }
763
798
  //#endregion
764
- export { le as ProjectBoard };
799
+ export { ue as ProjectBoard };
765
800
 
766
801
  //# sourceMappingURL=ProjectBoard.js.map