@burdenoff/microfe-planmagnet 2026.930.25 → 2026.1001.2

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 (314) hide show
  1. package/dist/_virtual/__vite-browser-external.js +9 -0
  2. package/dist/_virtual/__vite-browser-external.js.map +1 -0
  3. package/dist/_virtual/_rolldown/runtime.js +5 -2
  4. package/dist/index.js +3 -1
  5. package/dist/node_modules/fflate/esm/browser.js +554 -0
  6. package/dist/node_modules/fflate/esm/browser.js.map +1 -0
  7. package/dist/node_modules/jszip/dist/jszip.min.js +3038 -0
  8. package/dist/node_modules/jszip/dist/jszip.min.js.map +1 -0
  9. package/dist/node_modules/pptxgenjs/dist/pptxgen.es.js +2151 -0
  10. package/dist/node_modules/pptxgenjs/dist/pptxgen.es.js.map +1 -0
  11. package/dist/node_modules/write-excel-file/browser/index.js +3 -0
  12. package/dist/node_modules/write-excel-file/modules/export/convertFileContentToUint8ArrayBrowser.js +13 -0
  13. package/dist/node_modules/write-excel-file/modules/export/convertFileContentToUint8ArrayBrowser.js.map +1 -0
  14. package/dist/node_modules/write-excel-file/modules/export/convertFilesContentToUint8Arrays.js +21 -0
  15. package/dist/node_modules/write-excel-file/modules/export/convertFilesContentToUint8Arrays.js.map +1 -0
  16. package/dist/node_modules/write-excel-file/modules/export/downloadBlob.js +11 -0
  17. package/dist/node_modules/write-excel-file/modules/export/downloadBlob.js.map +1 -0
  18. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileBrowser.js +23 -0
  19. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileBrowser.js.map +1 -0
  20. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileUniversal.js +22 -0
  21. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileUniversal.js.map +1 -0
  22. package/dist/node_modules/write-excel-file/modules/getSheetData/getSheetData.js +18 -0
  23. package/dist/node_modules/write-excel-file/modules/getSheetData/getSheetData.js.map +1 -0
  24. package/dist/node_modules/write-excel-file/modules/xlsx/features/conditionalFormatting.js +131 -0
  25. package/dist/node_modules/write-excel-file/modules/xlsx/features/conditionalFormatting.js.map +1 -0
  26. package/dist/node_modules/write-excel-file/modules/xlsx/features/images.js +188 -0
  27. package/dist/node_modules/write-excel-file/modules/xlsx/features/images.js.map +1 -0
  28. package/dist/node_modules/write-excel-file/modules/xlsx/features/stickyRowsOrColumns.js +52 -0
  29. package/dist/node_modules/write-excel-file/modules/xlsx/features/stickyRowsOrColumns.js.map +1 -0
  30. package/dist/node_modules/write-excel-file/modules/xlsx/files/_Content_Types_.xml.js +18 -0
  31. package/dist/node_modules/write-excel-file/modules/xlsx/files/_Content_Types_.xml.js.map +1 -0
  32. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.js +18 -0
  33. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.js.map +1 -0
  34. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.rels.js +17 -0
  35. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.rels.js.map +1 -0
  36. package/dist/node_modules/write-excel-file/modules/xlsx/files/rels.js +11 -0
  37. package/dist/node_modules/write-excel-file/modules/xlsx/files/rels.js.map +1 -0
  38. package/dist/node_modules/write-excel-file/modules/xlsx/files/sharedStrings.xml.js +42 -0
  39. package/dist/node_modules/write-excel-file/modules/xlsx/files/sharedStrings.xml.js.map +1 -0
  40. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/cell.js +102 -0
  41. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/cell.js.map +1 -0
  42. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/column.js +17 -0
  43. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/column.js.map +1 -0
  44. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/columns.js +15 -0
  45. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/columns.js.map +1 -0
  46. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/drawingReference.js +8 -0
  47. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/drawingReference.js.map +1 -0
  48. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/helpers/getCellStyleProperties.js +71 -0
  49. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/helpers/getCellStyleProperties.js.map +1 -0
  50. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/mergedCellsDescription.js +56 -0
  51. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/mergedCellsDescription.js.map +1 -0
  52. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageMargins.js +15 -0
  53. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageMargins.js.map +1 -0
  54. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageSetup.js +13 -0
  55. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageSetup.js.map +1 -0
  56. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/processMergedCells.js +44 -0
  57. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/processMergedCells.js.map +1 -0
  58. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/row.js +123 -0
  59. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/row.js.map +1 -0
  60. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheet.xml.js +41 -0
  61. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheet.xml.js.map +1 -0
  62. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetData.js +11 -0
  63. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetData.js.map +1 -0
  64. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetViews.js +17 -0
  65. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetViews.js.map +1 -0
  66. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml.rels.js +20 -0
  67. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml.rels.js.map +1 -0
  68. package/dist/node_modules/write-excel-file/modules/xlsx/files/styles.xml.js +77 -0
  69. package/dist/node_modules/write-excel-file/modules/xlsx/files/styles.xml.js.map +1 -0
  70. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.js +22 -0
  71. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.js.map +1 -0
  72. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.rels.js +13 -0
  73. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.rels.js.map +1 -0
  74. package/dist/node_modules/write-excel-file/modules/xlsx/generateXlsxFileContents.js +242 -0
  75. package/dist/node_modules/write-excel-file/modules/xlsx/generateXlsxFileContents.js.map +1 -0
  76. package/dist/node_modules/write-excel-file/modules/xlsx/getFeatures.js +29 -0
  77. package/dist/node_modules/write-excel-file/modules/xlsx/getFeatures.js.map +1 -0
  78. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/convertDateToSerialNumber.js +9 -0
  79. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/convertDateToSerialNumber.js.map +1 -0
  80. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getAdditionalContent.js +42 -0
  81. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getAdditionalContent.js.map +1 -0
  82. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getElementXml.js +43 -0
  83. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getElementXml.js.map +1 -0
  84. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getWrittenFiles.js +93 -0
  85. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getWrittenFiles.js.map +1 -0
  86. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/transformContent.js +39 -0
  87. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/transformContent.js.map +1 -0
  88. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getAlignmentXml.js +17 -0
  89. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getAlignmentXml.js.map +1 -0
  90. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getBorderXml.js +29 -0
  91. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getBorderXml.js.map +1 -0
  92. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getCellAddress.js +14 -0
  93. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getCellAddress.js.map +1 -0
  94. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFileExtensionForContentType.js +11 -0
  95. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFileExtensionForContentType.js.map +1 -0
  96. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFillXml.js +14 -0
  97. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFillXml.js.map +1 -0
  98. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFontXml.js +12 -0
  99. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFontXml.js.map +1 -0
  100. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getOrderOfSiblings.js +24 -0
  101. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getOrderOfSiblings.js.map +1 -0
  102. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getXlsxColorForHexColor.js +9 -0
  103. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getXlsxColorForHexColor.js.map +1 -0
  104. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasAlignment.js +9 -0
  105. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasAlignment.js.map +1 -0
  106. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasBorder.js +9 -0
  107. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasBorder.js.map +1 -0
  108. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFill.js +9 -0
  109. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFill.js.map +1 -0
  110. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFont.js +9 -0
  111. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFont.js.map +1 -0
  112. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isCellObject.js +9 -0
  113. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isCellObject.js.map +1 -0
  114. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isObject.js +9 -0
  115. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isObject.js.map +1 -0
  116. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/orderOfSiblings.js +27 -0
  117. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/orderOfSiblings.js.map +1 -0
  118. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSharedStrings.js +17 -0
  119. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSharedStrings.js.map +1 -0
  120. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSheets.js +74 -0
  121. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSheets.js.map +1 -0
  122. package/dist/node_modules/write-excel-file/modules/xlsx/initializeStyles.js +138 -0
  123. package/dist/node_modules/write-excel-file/modules/xlsx/initializeStyles.js.map +1 -0
  124. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetData.js +40 -0
  125. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetData.js.map +1 -0
  126. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetName.js +11 -0
  127. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetName.js.map +1 -0
  128. package/dist/node_modules/write-excel-file/modules/xml/appendMarkupInsideElement.js +9 -0
  129. package/dist/node_modules/write-excel-file/modules/xml/appendMarkupInsideElement.js.map +1 -0
  130. package/dist/node_modules/write-excel-file/modules/xml/applyEnclosingElementOffset.js +9 -0
  131. package/dist/node_modules/write-excel-file/modules/xml/applyEnclosingElementOffset.js.map +1 -0
  132. package/dist/node_modules/write-excel-file/modules/xml/escapeXmlSpecialCharacters.js +12 -0
  133. package/dist/node_modules/write-excel-file/modules/xml/escapeXmlSpecialCharacters.js.map +1 -0
  134. package/dist/node_modules/write-excel-file/modules/xml/findElement.js +12 -0
  135. package/dist/node_modules/write-excel-file/modules/xml/findElement.js.map +1 -0
  136. package/dist/node_modules/write-excel-file/modules/xml/findElementInsideElement.js +12 -0
  137. package/dist/node_modules/write-excel-file/modules/xml/findElementInsideElement.js.map +1 -0
  138. package/dist/node_modules/write-excel-file/modules/xml/findElementsNonRecursive_.js +41 -0
  139. package/dist/node_modules/write-excel-file/modules/xml/findElementsNonRecursive_.js.map +1 -0
  140. package/dist/node_modules/write-excel-file/modules/xml/getAttributesString.js +14 -0
  141. package/dist/node_modules/write-excel-file/modules/xml/getAttributesString.js.map +1 -0
  142. package/dist/node_modules/write-excel-file/modules/xml/getChildElements.js +42 -0
  143. package/dist/node_modules/write-excel-file/modules/xml/getChildElements.js.map +1 -0
  144. package/dist/node_modules/write-excel-file/modules/xml/getClosingTagMarkup.js +8 -0
  145. package/dist/node_modules/write-excel-file/modules/xml/getClosingTagMarkup.js.map +1 -0
  146. package/dist/node_modules/write-excel-file/modules/xml/getMarkupInsideElement.js +8 -0
  147. package/dist/node_modules/write-excel-file/modules/xml/getMarkupInsideElement.js.map +1 -0
  148. package/dist/node_modules/write-excel-file/modules/xml/getOpeningTagMarkup.js +9 -0
  149. package/dist/node_modules/write-excel-file/modules/xml/getOpeningTagMarkup.js.map +1 -0
  150. package/dist/node_modules/write-excel-file/modules/xml/getSelfClosingTagMarkup.js +9 -0
  151. package/dist/node_modules/write-excel-file/modules/xml/getSelfClosingTagMarkup.js.map +1 -0
  152. package/dist/node_modules/write-excel-file/modules/xml/insertElementMarkupAccordingToOrderOfSiblings.js +64 -0
  153. package/dist/node_modules/write-excel-file/modules/xml/insertElementMarkupAccordingToOrderOfSiblings.js.map +1 -0
  154. package/dist/node_modules/write-excel-file/modules/xml/prependMarkupInsideElement.js +9 -0
  155. package/dist/node_modules/write-excel-file/modules/xml/prependMarkupInsideElement.js.map +1 -0
  156. package/dist/node_modules/write-excel-file/modules/xml/removeInvalidXmlCharacters.js +9 -0
  157. package/dist/node_modules/write-excel-file/modules/xml/removeInvalidXmlCharacters.js.map +1 -0
  158. package/dist/node_modules/write-excel-file/modules/xml/replaceElement.js +8 -0
  159. package/dist/node_modules/write-excel-file/modules/xml/replaceElement.js.map +1 -0
  160. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeName.js +10 -0
  161. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeName.js.map +1 -0
  162. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeValue.js +11 -0
  163. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeValue.js.map +1 -0
  164. package/dist/node_modules/write-excel-file/modules/xml/sanitizeTextContent.js +11 -0
  165. package/dist/node_modules/write-excel-file/modules/xml/sanitizeTextContent.js.map +1 -0
  166. package/dist/node_modules/write-excel-file/modules/xml/setMarkupInsideElement.js +8 -0
  167. package/dist/node_modules/write-excel-file/modules/xml/setMarkupInsideElement.js.map +1 -0
  168. package/dist/node_modules/write-excel-file/modules/zip/zipToArrayBuffer.js +18 -0
  169. package/dist/node_modules/write-excel-file/modules/zip/zipToArrayBuffer.js.map +1 -0
  170. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
  171. package/dist/planmagnet/PlanMagnetRoot.js +160 -147
  172. package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
  173. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  174. package/dist/planmagnet/PlanMagnetRoutes.js +126 -106
  175. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  176. package/dist/planmagnet/comments/CommentThread.js +36 -36
  177. package/dist/planmagnet/comments/RoadmapComments.js +21 -21
  178. package/dist/planmagnet/controls/AutomationRuleControls.js +24 -24
  179. package/dist/planmagnet/controls/FeatureControls.js +60 -60
  180. package/dist/planmagnet/controls/Pickers.d.ts +10 -0
  181. package/dist/planmagnet/controls/Pickers.d.ts.map +1 -1
  182. package/dist/planmagnet/controls/Pickers.js +75 -27
  183. package/dist/planmagnet/controls/Pickers.js.map +1 -1
  184. package/dist/planmagnet/controls/SyncControls.js +59 -59
  185. package/dist/planmagnet/discussion/WorkItemDiscussionPanel.js +15 -15
  186. package/dist/planmagnet/docs/DocSuggestionsPanel.js +12 -12
  187. package/dist/planmagnet/docs/DocVersionCompare.js +3 -3
  188. package/dist/planmagnet/forecast/DeliveryForecastCard.d.ts +12 -0
  189. package/dist/planmagnet/forecast/DeliveryForecastCard.d.ts.map +1 -0
  190. package/dist/planmagnet/forecast/DeliveryForecastCard.js +208 -0
  191. package/dist/planmagnet/forecast/DeliveryForecastCard.js.map +1 -0
  192. package/dist/planmagnet/forecast/ProjectOutlookCard.d.ts +5 -0
  193. package/dist/planmagnet/forecast/ProjectOutlookCard.d.ts.map +1 -0
  194. package/dist/planmagnet/forecast/ProjectOutlookCard.js +190 -0
  195. package/dist/planmagnet/forecast/ProjectOutlookCard.js.map +1 -0
  196. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.d.ts +5 -0
  197. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.d.ts.map +1 -0
  198. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js +99 -0
  199. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js.map +1 -0
  200. package/dist/planmagnet/forecast/ResourceForecastCard.d.ts +8 -0
  201. package/dist/planmagnet/forecast/ResourceForecastCard.d.ts.map +1 -0
  202. package/dist/planmagnet/forecast/ResourceForecastCard.js +185 -0
  203. package/dist/planmagnet/forecast/ResourceForecastCard.js.map +1 -0
  204. package/dist/planmagnet/forecast/riskFlags.d.ts +35 -0
  205. package/dist/planmagnet/forecast/riskFlags.d.ts.map +1 -0
  206. package/dist/planmagnet/forecast/riskFlags.js +37 -0
  207. package/dist/planmagnet/forecast/riskFlags.js.map +1 -0
  208. package/dist/planmagnet/index.d.ts +2 -0
  209. package/dist/planmagnet/index.d.ts.map +1 -1
  210. package/dist/planmagnet/index.js +2 -0
  211. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -1
  212. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +216 -182
  213. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  214. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js +11 -11
  215. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js +4 -4
  216. package/dist/planmagnet/pages/DocsDocDetailPagePage.js +163 -163
  217. package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
  218. package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js +165 -165
  219. package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js.map +1 -1
  220. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.d.ts +2 -0
  221. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.d.ts.map +1 -0
  222. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js +234 -0
  223. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js.map +1 -0
  224. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
  225. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +206 -182
  226. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
  227. package/dist/planmagnet/pages/ReportsCreateReportPagePage.d.ts +6 -0
  228. package/dist/planmagnet/pages/ReportsCreateReportPagePage.d.ts.map +1 -1
  229. package/dist/planmagnet/pages/ReportsCreateReportPagePage.js +5 -177
  230. package/dist/planmagnet/pages/ReportsCreateReportPagePage.js.map +1 -1
  231. package/dist/planmagnet/pages/ReportsEditReportPagePage.d.ts +3 -0
  232. package/dist/planmagnet/pages/ReportsEditReportPagePage.d.ts.map +1 -0
  233. package/dist/planmagnet/pages/ReportsEditReportPagePage.js +15 -0
  234. package/dist/planmagnet/pages/ReportsEditReportPagePage.js.map +1 -0
  235. package/dist/planmagnet/pages/ReportsReportPagePage.d.ts +7 -0
  236. package/dist/planmagnet/pages/ReportsReportPagePage.d.ts.map +1 -0
  237. package/dist/planmagnet/pages/ReportsReportPagePage.js +226 -0
  238. package/dist/planmagnet/pages/ReportsReportPagePage.js.map +1 -0
  239. package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts.map +1 -1
  240. package/dist/planmagnet/pages/ReportsReportsPagePage.js +224 -496
  241. package/dist/planmagnet/pages/ReportsReportsPagePage.js.map +1 -1
  242. package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +1 -1
  243. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js +88 -83
  244. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +1 -1
  245. package/dist/planmagnet/pages/analytics/SprintDeliveryCards.d.ts.map +1 -1
  246. package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js +139 -112
  247. package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js.map +1 -1
  248. package/dist/planmagnet/pages/analytics/StatusFlowCard.js +21 -21
  249. package/dist/planmagnet/product/ProductControls.js +91 -91
  250. package/dist/planmagnet/reports/ExportMenu.d.ts +9 -0
  251. package/dist/planmagnet/reports/ExportMenu.d.ts.map +1 -0
  252. package/dist/planmagnet/reports/ExportMenu.js +116 -0
  253. package/dist/planmagnet/reports/ExportMenu.js.map +1 -0
  254. package/dist/planmagnet/reports/PrintReportView.d.ts +24 -0
  255. package/dist/planmagnet/reports/PrintReportView.d.ts.map +1 -0
  256. package/dist/planmagnet/reports/PrintReportView.js +75 -0
  257. package/dist/planmagnet/reports/PrintReportView.js.map +1 -0
  258. package/dist/planmagnet/reports/ReportBuilderCanvas.d.ts +8 -0
  259. package/dist/planmagnet/reports/ReportBuilderCanvas.d.ts.map +1 -0
  260. package/dist/planmagnet/reports/ReportBuilderCanvas.js +261 -0
  261. package/dist/planmagnet/reports/ReportBuilderCanvas.js.map +1 -0
  262. package/dist/planmagnet/reports/ReportBuilderPage.d.ts +5 -0
  263. package/dist/planmagnet/reports/ReportBuilderPage.d.ts.map +1 -0
  264. package/dist/planmagnet/reports/ReportBuilderPage.js +198 -0
  265. package/dist/planmagnet/reports/ReportBuilderPage.js.map +1 -0
  266. package/dist/planmagnet/reports/ReportRunHistory.d.ts +8 -0
  267. package/dist/planmagnet/reports/ReportRunHistory.d.ts.map +1 -0
  268. package/dist/planmagnet/reports/ReportRunHistory.js +63 -0
  269. package/dist/planmagnet/reports/ReportRunHistory.js.map +1 -0
  270. package/dist/planmagnet/reports/ReportWidgetRenderer.d.ts +7 -0
  271. package/dist/planmagnet/reports/ReportWidgetRenderer.d.ts.map +1 -0
  272. package/dist/planmagnet/reports/ReportWidgetRenderer.js +251 -0
  273. package/dist/planmagnet/reports/ReportWidgetRenderer.js.map +1 -0
  274. package/dist/planmagnet/reports/SchedulesPanel.d.ts +4 -0
  275. package/dist/planmagnet/reports/SchedulesPanel.d.ts.map +1 -0
  276. package/dist/planmagnet/reports/SchedulesPanel.js +457 -0
  277. package/dist/planmagnet/reports/SchedulesPanel.js.map +1 -0
  278. package/dist/planmagnet/reports/ShareDialog.d.ts +5 -0
  279. package/dist/planmagnet/reports/ShareDialog.d.ts.map +1 -0
  280. package/dist/planmagnet/reports/ShareDialog.js +234 -0
  281. package/dist/planmagnet/reports/ShareDialog.js.map +1 -0
  282. package/dist/planmagnet/reports/SharedReportPage.d.ts +4 -0
  283. package/dist/planmagnet/reports/SharedReportPage.d.ts.map +1 -0
  284. package/dist/planmagnet/reports/SharedReportPage.js +180 -0
  285. package/dist/planmagnet/reports/SharedReportPage.js.map +1 -0
  286. package/dist/planmagnet/reports/WidgetEditorDialog.d.ts +10 -0
  287. package/dist/planmagnet/reports/WidgetEditorDialog.d.ts.map +1 -0
  288. package/dist/planmagnet/reports/WidgetEditorDialog.js +220 -0
  289. package/dist/planmagnet/reports/WidgetEditorDialog.js.map +1 -0
  290. package/dist/planmagnet/reports/reportExportPptx.d.ts +4 -0
  291. package/dist/planmagnet/reports/reportExportPptx.d.ts.map +1 -0
  292. package/dist/planmagnet/reports/reportExportPptx.js +118 -0
  293. package/dist/planmagnet/reports/reportExportPptx.js.map +1 -0
  294. package/dist/planmagnet/reports/reportExportXlsx.d.ts +4 -0
  295. package/dist/planmagnet/reports/reportExportXlsx.d.ts.map +1 -0
  296. package/dist/planmagnet/reports/reportExportXlsx.js +42 -0
  297. package/dist/planmagnet/reports/reportExportXlsx.js.map +1 -0
  298. package/dist/planmagnet/reports/reportGraphql.d.ts +28 -0
  299. package/dist/planmagnet/reports/reportGraphql.d.ts.map +1 -0
  300. package/dist/planmagnet/reports/reportGraphql.js +360 -0
  301. package/dist/planmagnet/reports/reportGraphql.js.map +1 -0
  302. package/dist/planmagnet/reports/reportModel.d.ts +198 -0
  303. package/dist/planmagnet/reports/reportModel.d.ts.map +1 -0
  304. package/dist/planmagnet/reports/reportModel.js +328 -0
  305. package/dist/planmagnet/reports/reportModel.js.map +1 -0
  306. package/dist/planmagnet/reports/sharedReportRoute.d.ts +15 -0
  307. package/dist/planmagnet/reports/sharedReportRoute.d.ts.map +1 -0
  308. package/dist/planmagnet/reports/sharedReportRoute.js +9 -0
  309. package/dist/planmagnet/reports/sharedReportRoute.js.map +1 -0
  310. package/dist/planmagnet/roadmaps/RoadmapControls.js +60 -60
  311. package/dist/planmagnet/roadmaps/RoadmapNowNextLater.js +30 -30
  312. package/dist/planmagnet/roadmaps/RoadmapReviewPanel.js +21 -21
  313. package/dist/planmagnet/roadmaps/RoadmapVersionsPanel.js +22 -22
  314. package/package.json +6 -4
@@ -2,34 +2,36 @@ import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
2
  import { Legend as t } from "../../node_modules/recharts/es6/component/Legend.js";
3
3
  import { Tooltip as n } from "../../node_modules/recharts/es6/component/Tooltip.js";
4
4
  import { ResponsiveContainer as r } from "../../node_modules/recharts/es6/component/ResponsiveContainer.js";
5
- import { Bar as ee } from "../../node_modules/recharts/es6/cartesian/Bar.js";
6
- import { ReferenceLine as te } from "../../node_modules/recharts/es6/cartesian/ReferenceLine.js";
7
- import { CartesianGrid as i } from "../../node_modules/recharts/es6/cartesian/CartesianGrid.js";
5
+ import { Bar as i } from "../../node_modules/recharts/es6/cartesian/Bar.js";
6
+ import { ReferenceLine as ee } from "../../node_modules/recharts/es6/cartesian/ReferenceLine.js";
7
+ import { ReferenceArea as te } from "../../node_modules/recharts/es6/cartesian/ReferenceArea.js";
8
+ import { CartesianGrid as a } from "../../node_modules/recharts/es6/cartesian/CartesianGrid.js";
8
9
  import { Line as ne } from "../../node_modules/recharts/es6/cartesian/Line.js";
9
10
  import { Area as re } from "../../node_modules/recharts/es6/cartesian/Area.js";
10
- import { XAxis as a } from "../../node_modules/recharts/es6/cartesian/XAxis.js";
11
- import { YAxis as o } from "../../node_modules/recharts/es6/cartesian/YAxis.js";
11
+ import { XAxis as o } from "../../node_modules/recharts/es6/cartesian/XAxis.js";
12
+ import { YAxis as s } from "../../node_modules/recharts/es6/cartesian/YAxis.js";
12
13
  import { LineChart as ie } from "../../node_modules/recharts/es6/chart/LineChart.js";
13
14
  import { BarChart as ae } from "../../node_modules/recharts/es6/chart/BarChart.js";
14
15
  import { AreaChart as oe } from "../../node_modules/recharts/es6/chart/AreaChart.js";
15
- import { countLabel as s, useProjectCounts as se, useSprintCounts as ce } from "../hooks/useCounts.js";
16
- import { BudgetPerformanceCard as le, CycleTimeCard as ue } from "./analytics/DeliveryHealthCards.js";
17
- import { QualityMetricsCard as de } from "./analytics/QualityMetricsCard.js";
18
- import { DeliveryKpisCard as fe } from "./analytics/DeliveryKpisCard.js";
19
- import { ThroughputCard as pe } from "./analytics/ThroughputCard.js";
20
- import { StatusFlowCard as me } from "./analytics/StatusFlowCard.js";
21
- import { WorkBreakdownCard as he } from "./analytics/WorkBreakdownCard.js";
22
- import { activePreset as ge, isValidRange as c, presetRange as l, scopeToProjectId as _e, toRangeVariables as ve } from "./analytics/analyticsRange.js";
16
+ import { countLabel as c, useProjectCounts as se, useSprintCounts as ce } from "../hooks/useCounts.js";
17
+ import { DeliveryForecastCard as le } from "../forecast/DeliveryForecastCard.js";
18
+ import { BudgetPerformanceCard as ue, CycleTimeCard as de } from "./analytics/DeliveryHealthCards.js";
19
+ import { QualityMetricsCard as fe } from "./analytics/QualityMetricsCard.js";
20
+ import { DeliveryKpisCard as pe } from "./analytics/DeliveryKpisCard.js";
21
+ import { ThroughputCard as me } from "./analytics/ThroughputCard.js";
22
+ import { StatusFlowCard as he } from "./analytics/StatusFlowCard.js";
23
+ import { WorkBreakdownCard as ge } from "./analytics/WorkBreakdownCard.js";
24
+ import { activePreset as _e, isValidRange as l, presetRange as ve, scopeToProjectId as ye, toRangeVariables as be } from "./analytics/analyticsRange.js";
23
25
  import { useState as u } from "react";
24
- import { BarChart3 as ye, FolderKanban as be, Target as xe, TrendingUp as Se, Zap as Ce } from "lucide-react";
25
- import { useSearchParams as we } from "react-router";
26
+ import { BarChart3 as xe, FolderKanban as Se, Target as Ce, TrendingUp as we, Zap as Te } from "lucide-react";
27
+ import { useSearchParams as Ee } from "react-router";
26
28
  import { gql as d } from "@apollo/client";
27
29
  import { useQuery as f } from "@apollo/client/react";
28
- import { Fragment as Te, jsx as p, jsxs as m } from "react/jsx-runtime";
29
- import { useI18n as Ee } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
30
- import { Badge as De, Card as h, CardContent as g, CardHeader as _, CardTitle as v, Input as y, Select as b, SelectContent as x, SelectItem as S, SelectTrigger as C, SelectValue as w } from "@burdenoff/fe-libs/ui";
30
+ import { Fragment as De, jsx as p, jsxs as m } from "react/jsx-runtime";
31
+ import { useI18n as Oe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
32
+ import { Badge as ke, Card as h, CardContent as g, CardHeader as _, CardTitle as v, Input as y, Select as b, SelectContent as x, SelectItem as S, SelectTrigger as C, SelectValue as w } from "@burdenoff/fe-libs/ui";
31
33
  //#region src/planmagnet/pages/AnalyticsAnalyticsPagePage.tsx
32
- var Oe = d`
34
+ var Ae = d`
33
35
  query AnalyticsProjectSprints($workspaceId: ID!, $projectId: String) {
34
36
  planmagnetSprints(
35
37
  workspaceId: $workspaceId
@@ -45,7 +47,7 @@ var Oe = d`
45
47
  }
46
48
  }
47
49
  }
48
- `, ke = d`
50
+ `, je = d`
49
51
  query AnalyticsMilestoneRisk($workspaceId: ID!, $yesterday: DateTime) {
50
52
  missed: planmagnetMilestones(
51
53
  workspaceId: $workspaceId
@@ -62,7 +64,7 @@ var Oe = d`
62
64
  totalCount
63
65
  }
64
66
  }
65
- `, Ae = d`
67
+ `, Me = d`
66
68
  query GetAnalyticsWorkItemCounts($workspaceId: ID!) {
67
69
  planmagnetWorkItemCounts(workspaceId: $workspaceId) {
68
70
  total
@@ -80,7 +82,7 @@ var Oe = d`
80
82
  }
81
83
  }
82
84
  }
83
- `, je = d`
85
+ `, Ne = d`
84
86
  query GetAnalyticsData($workspaceId: ID!, $projectPagination: PlanmagnetPaginationInput) {
85
87
  planmagnetProjects(workspaceId: $workspaceId, pagination: $projectPagination) {
86
88
  items {
@@ -95,7 +97,7 @@ var Oe = d`
95
97
  totalCount
96
98
  }
97
99
  }
98
- `, Me = d`
100
+ `, Pe = d`
99
101
  query GetSprintBurndown($workspaceId: ID!, $sprintId: ID!) {
100
102
  planmagnetSprintBurndown(workspaceId: $workspaceId, sprintId: $sprintId) {
101
103
  sprintId
@@ -112,7 +114,7 @@ var Oe = d`
112
114
  }
113
115
  }
114
116
  }
115
- `, Ne = d`
117
+ `, Fe = d`
116
118
  query GetVelocity($workspaceId: ID!, $projectId: ID!, $trailingSprintCount: Int) {
117
119
  planmagnetVelocity(
118
120
  workspaceId: $workspaceId
@@ -122,6 +124,11 @@ var Oe = d`
122
124
  projectId
123
125
  averageVelocity
124
126
  forecastNextSprintPoints
127
+ forecastRange {
128
+ p15
129
+ p85
130
+ }
131
+ insufficientHistory
125
132
  sprints {
126
133
  sprintId
127
134
  sprintName
@@ -132,7 +139,7 @@ var Oe = d`
132
139
  }
133
140
  }
134
141
  }
135
- `, Pe = d`
142
+ `, Ie = d`
136
143
  query GetCumulativeFlow(
137
144
  $workspaceId: ID!
138
145
  $projectId: ID!
@@ -171,20 +178,20 @@ function E(e) {
171
178
  return `${t.getUTCMonth() + 1}/${t.getUTCDate()}`;
172
179
  }
173
180
  function D() {
174
- let { workspaceId: d } = e(), { t: D } = Ee(), [Fe, O] = u(""), [k, Ie] = we(), A = k.get("from"), j = k.get("to"), [M, N] = u(() => A && j && c(A, j) ? {
181
+ let { workspaceId: d } = e(), { t: D } = Oe(), [Le, O] = u(""), [k, Re] = Ee(), A = k.get("from"), j = k.get("to"), [M, N] = u(() => A && j && l(A, j) ? {
175
182
  from: A,
176
183
  to: j
177
- } : l("30")), [Le, Re] = u(M), [P, ze] = u(k.get("project") || "all"), F = _e(P), I = ge(M), Be = c(M.from, M.to), Ve = Be ? null : D("planmagnet.analytics.range.invalid", "\"From\" must be on or before \"To\".");
178
- function L(e, t) {
179
- N(e), c(e.from, e.to) && Re(e);
184
+ } : ve("30")), [ze, Be] = u(M), [P, Ve] = u(k.get("project") || "all"), F = ye(P), He = _e(M), Ue = l(M.from, M.to), We = Ue ? null : D("planmagnet.analytics.range.invalid", "\"From\" must be on or before \"To\".");
185
+ function I(e, t) {
186
+ N(e), l(e.from, e.to) && Be(e);
180
187
  let n = new URLSearchParams(k);
181
- n.set("from", e.from), n.set("to", e.to), t === "all" ? n.delete("project") : n.set("project", t), Ie(n, { replace: !0 });
188
+ n.set("from", e.from), n.set("to", e.to), t === "all" ? n.delete("project") : n.set("project", t), Re(n, { replace: !0 });
182
189
  }
183
- function He(e) {
184
- L(l(e), P);
190
+ function Ge(e) {
191
+ I(ve(e), P);
185
192
  }
186
- function Ue(e) {
187
- e && M.to && c(e, M.to) ? L({
193
+ function Ke(e) {
194
+ e && M.to && l(e, M.to) ? I({
188
195
  from: e,
189
196
  to: M.to
190
197
  }, P) : N((t) => ({
@@ -192,8 +199,8 @@ function D() {
192
199
  from: e
193
200
  }));
194
201
  }
195
- function We(e) {
196
- e && M.from && c(M.from, e) ? L({
202
+ function qe(e) {
203
+ e && M.from && l(M.from, e) ? I({
197
204
  from: M.from,
198
205
  to: e
199
206
  }, P) : N((t) => ({
@@ -201,98 +208,98 @@ function D() {
201
208
  to: e
202
209
  }));
203
210
  }
204
- function Ge(e) {
205
- ze(e), O(""), L(M, e);
211
+ function Je(e) {
212
+ Ve(e), O(""), I(M, e);
206
213
  }
207
- let { startDate: R, endDate: z } = ve(Be ? M : Le), { data: Ke, loading: qe, error: Je } = f(je, {
214
+ let { startDate: L, endDate: R } = be(Ue ? M : ze), { data: Ye, loading: Xe, error: Ze } = f(Ne, {
208
215
  variables: {
209
216
  workspaceId: d,
210
217
  projectPagination: { first: 100 }
211
218
  },
212
219
  skip: !d
213
- }), { data: Ye } = f(Ae, {
220
+ }), { data: Qe } = f(Me, {
214
221
  variables: { workspaceId: d },
215
222
  skip: !d
216
- }), B = Ye?.planmagnetWorkItemCounts, Xe = se(), Ze = ce(), [Qe] = u(() => (/* @__PURE__ */ new Date(Date.now() - 864e5)).toISOString().slice(0, 10)), { data: V } = f(ke, {
223
+ }), z = Qe?.planmagnetWorkItemCounts, $e = se(), et = ce(), [tt] = u(() => (/* @__PURE__ */ new Date(Date.now() - 864e5)).toISOString().slice(0, 10)), { data: B } = f(je, {
217
224
  variables: {
218
225
  workspaceId: d,
219
- yesterday: Qe
226
+ yesterday: tt
220
227
  },
221
228
  skip: !d
222
- }), H = Ke?.planmagnetProjects?.items ?? [], U = F || H[0]?.id || "", { data: $e } = f(Oe, {
229
+ }), V = Ye?.planmagnetProjects?.items ?? [], H = F || V[0]?.id || "", { data: nt } = f(Ae, {
223
230
  variables: {
224
231
  workspaceId: d,
225
- projectId: U
232
+ projectId: H
226
233
  },
227
- skip: !d || !U
228
- }), W = $e?.planmagnetSprints.items ?? [], et = W.filter((e) => e.status === "COMPLETED").sort((e, t) => (t.completedAt ?? t.endDate ?? "").localeCompare(e.completedAt ?? e.endDate ?? ""))[0], tt = W.find((e) => e.status === "ACTIVE" || e.status === "REVIEW") ?? et ?? W[0], G = Fe || tt?.id || "", K = H.find((e) => e.id === U)?.name ?? "", { data: nt, loading: rt } = f(Me, {
234
+ skip: !d || !H
235
+ }), U = nt?.planmagnetSprints.items ?? [], rt = U.filter((e) => e.status === "COMPLETED").sort((e, t) => (t.completedAt ?? t.endDate ?? "").localeCompare(e.completedAt ?? e.endDate ?? ""))[0], it = U.find((e) => e.status === "ACTIVE" || e.status === "REVIEW") ?? rt ?? U[0], W = Le || it?.id || "", G = V.find((e) => e.id === H)?.name ?? "", { data: at, loading: ot } = f(Pe, {
229
236
  variables: {
230
237
  workspaceId: d,
231
- sprintId: G
238
+ sprintId: W
232
239
  },
233
- skip: !d || !G
234
- }), { data: it, loading: at } = f(Ne, {
240
+ skip: !d || !W
241
+ }), { data: st, loading: ct } = f(Fe, {
235
242
  variables: {
236
243
  workspaceId: d,
237
- projectId: U,
244
+ projectId: H,
238
245
  trailingSprintCount: 6
239
246
  },
240
- skip: !d || !U
241
- }), { data: ot, loading: st } = f(Pe, {
247
+ skip: !d || !H
248
+ }), { data: lt, loading: ut } = f(Ie, {
242
249
  variables: {
243
250
  workspaceId: d,
244
- projectId: U,
245
- startDate: R,
246
- endDate: z
251
+ projectId: H,
252
+ startDate: L,
253
+ endDate: R
247
254
  },
248
- skip: !d || !U
255
+ skip: !d || !H
249
256
  });
250
- if (qe && !Ke) return /* @__PURE__ */ p("div", {
257
+ if (Xe && !Ye) return /* @__PURE__ */ p("div", {
251
258
  className: "flex items-center justify-center p-12",
252
259
  children: /* @__PURE__ */ p("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
253
260
  });
254
- if (Je) return /* @__PURE__ */ m("div", {
261
+ if (Ze) return /* @__PURE__ */ m("div", {
255
262
  className: "p-6 text-red-500",
256
263
  children: [
257
264
  D("planmagnet.analytics.errorLoading", "Error loading analytics"),
258
265
  ": ",
259
- Je.message
266
+ Ze.message
260
267
  ]
261
268
  });
262
- let q = (e) => B?.byStatus.find((t) => t.status === e), ct = q("CANCELLED")?.count ?? 0, lt = B ? q("DONE")?.count ?? 0 : null, J = B ? B.total : null, Y = B ? B.blocked : null, ut = B ? B.points : null, dt = B ? q("DONE")?.points ?? 0 : null, ft = (e) => {
263
- let t = B?.byProject.filter((t) => t.projectId === e) ?? [], n = t.filter((e) => e.status !== "CANCELLED").reduce((e, t) => e + t.count, 0), r = t.filter((e) => e.status === "DONE").reduce((e, t) => e + t.count, 0);
269
+ let K = (e) => z?.byStatus.find((t) => t.status === e), q = K("CANCELLED")?.count ?? 0, dt = z ? K("DONE")?.count ?? 0 : null, J = z ? z.total : null, Y = z ? z.blocked : null, ft = z ? z.points : null, pt = z ? K("DONE")?.points ?? 0 : null, mt = (e) => {
270
+ let t = z?.byProject.filter((t) => t.projectId === e) ?? [], n = t.filter((e) => e.status !== "CANCELLED").reduce((e, t) => e + t.count, 0), r = t.filter((e) => e.status === "DONE").reduce((e, t) => e + t.count, 0);
264
271
  return n > 0 ? Math.round(r / n * 100) : 0;
265
- }, pt = Ze?.running ?? null, mt = V ? V.missed.totalCount + V.overdue.totalCount : null, ht = Xe?.active ?? null, gt = J != null && lt != null && J - ct > 0 ? Math.round(lt / (J - ct) * 100) : null, _t = (nt?.planmagnetSprintBurndown)?.points.map((e) => ({
272
+ }, ht = et?.running ?? null, gt = B ? B.missed.totalCount + B.overdue.totalCount : null, _t = $e?.active ?? null, vt = J != null && dt != null && J - q > 0 ? Math.round(dt / (J - q) * 100) : null, yt = (at?.planmagnetSprintBurndown)?.points.map((e) => ({
266
273
  day: E(e.date),
267
274
  remaining: e.remainingPoints,
268
275
  completed: e.completedPoints
269
- })) ?? [], X = it?.planmagnetVelocity, Z = X?.sprints.map((e) => ({
276
+ })) ?? [], X = st?.planmagnetVelocity, Z = X?.sprints.map((e) => ({
270
277
  name: e.sprintName,
271
278
  completed: e.completedPoints,
272
279
  planned: e.plannedPoints ?? void 0
273
- })) ?? [], vt = X ? Math.round(X.averageVelocity) : 0, yt = X ? Math.round(X.forecastNextSprintPoints) : 0, Q = ot?.planmagnetCumulativeFlow, bt = Array.from(new Set(Q?.points.flatMap((e) => e.statuses.map((e) => e.status)) ?? [])), $ = Q?.points.map((e) => {
280
+ })) ?? [], bt = X ? Math.round(X.averageVelocity) : 0, xt = X ? Math.round(X.forecastNextSprintPoints) : 0, Q = X?.forecastRange ?? null, St = X?.insufficientHistory ?? !1, Ct = lt?.planmagnetCumulativeFlow, wt = Array.from(new Set(Ct?.points.flatMap((e) => e.statuses.map((e) => e.status)) ?? [])), $ = Ct?.points.map((e) => {
274
281
  let t = { day: E(e.date) };
275
282
  for (let n of e.statuses) t[n.status] = n.count;
276
283
  return t;
277
- }) ?? [], xt = [
284
+ }) ?? [], Tt = [
278
285
  {
279
286
  label: D("planmagnet.analytics.metrics.totalWorkItems.label", "Total Work Items"),
280
- value: s(J),
281
- trend: `${s(gt)}% ${D("planmagnet.analytics.metrics.totalWorkItems.trend", "completed")}`
287
+ value: c(J),
288
+ trend: `${c(vt)}% ${D("planmagnet.analytics.metrics.totalWorkItems.trend", "completed")}`
282
289
  },
283
290
  {
284
291
  label: D("planmagnet.analytics.metrics.storyPoints.label", "Story Points"),
285
- value: s(ut),
286
- trend: `${s(dt)} ${D("planmagnet.analytics.metrics.storyPoints.trend", "completed")}`
292
+ value: c(ft),
293
+ trend: `${c(pt)} ${D("planmagnet.analytics.metrics.storyPoints.trend", "completed")}`
287
294
  },
288
295
  {
289
296
  label: D("planmagnet.analytics.metrics.activeProjects.label", "Active Projects"),
290
- value: s(ht),
291
- trend: `${s(Xe?.all)} ${D("planmagnet.analytics.metrics.activeProjects.trend", "total")}`
297
+ value: c(_t),
298
+ trend: `${c($e?.all)} ${D("planmagnet.analytics.metrics.activeProjects.trend", "total")}`
292
299
  },
293
300
  {
294
301
  label: D("planmagnet.analytics.metrics.blockedItems.label", "Blocked Items"),
295
- value: s(Y),
302
+ value: c(Y),
296
303
  trend: Y == null ? "" : Y > 0 ? D("planmagnet.analytics.metrics.blockedItems.attention", "Needs attention") : D("planmagnet.analytics.metrics.blockedItems.clear", "All clear")
297
304
  }
298
305
  ];
@@ -323,9 +330,9 @@ function D() {
323
330
  "90"
324
331
  ].map((e) => /* @__PURE__ */ p("button", {
325
332
  type: "button",
326
- "aria-pressed": I === e,
327
- onClick: () => He(e),
328
- className: `px-2.5 py-1 text-xs rounded ${I === e ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-muted"}`,
333
+ "aria-pressed": He === e,
334
+ onClick: () => Ge(e),
335
+ className: `px-2.5 py-1 text-xs rounded ${He === e ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-muted"}`,
329
336
  children: D("planmagnet.analytics.range.last", "Last {{days}} days", { days: e })
330
337
  }, e))
331
338
  }),
@@ -343,7 +350,7 @@ function D() {
343
350
  className: "h-8 w-36",
344
351
  value: M.from,
345
352
  max: M.to,
346
- onChange: (e) => Ue(e.target.value)
353
+ onChange: (e) => Ke(e.target.value)
347
354
  }),
348
355
  /* @__PURE__ */ p("span", {
349
356
  className: "text-muted-foreground text-sm",
@@ -360,19 +367,19 @@ function D() {
360
367
  className: "h-8 w-36",
361
368
  value: M.to,
362
369
  min: M.from,
363
- onChange: (e) => We(e.target.value)
370
+ onChange: (e) => qe(e.target.value)
364
371
  })
365
372
  ]
366
373
  }),
367
- Ve && /* @__PURE__ */ p("p", {
374
+ We && /* @__PURE__ */ p("p", {
368
375
  role: "alert",
369
376
  className: "text-xs text-status-error-text",
370
- children: Ve
377
+ children: We
371
378
  })
372
379
  ]
373
380
  }), /* @__PURE__ */ m(b, {
374
381
  value: P,
375
- onValueChange: Ge,
382
+ onValueChange: Je,
376
383
  children: [/* @__PURE__ */ p(C, {
377
384
  className: "h-8 w-56",
378
385
  "data-testid": "analytics-project",
@@ -380,7 +387,7 @@ function D() {
380
387
  }), /* @__PURE__ */ m(x, { children: [/* @__PURE__ */ p(S, {
381
388
  value: "all",
382
389
  children: D("planmagnet.analytics.range.allProjects", "All projects")
383
- }), H.map((e) => /* @__PURE__ */ p(S, {
390
+ }), V.map((e) => /* @__PURE__ */ p(S, {
384
391
  value: e.id,
385
392
  children: e.name
386
393
  }, e.id))] })]
@@ -388,7 +395,7 @@ function D() {
388
395
  }),
389
396
  /* @__PURE__ */ p("div", {
390
397
  className: "grid grid-cols-2 md:grid-cols-4 gap-4",
391
- children: xt.map((e) => /* @__PURE__ */ p(h, { children: /* @__PURE__ */ m(g, {
398
+ children: Tt.map((e) => /* @__PURE__ */ p(h, { children: /* @__PURE__ */ m(g, {
392
399
  className: "pt-4",
393
400
  children: [
394
401
  /* @__PURE__ */ p("p", {
@@ -413,20 +420,20 @@ function D() {
413
420
  className: "pt-4",
414
421
  children: [/* @__PURE__ */ m("div", {
415
422
  className: "flex items-center gap-2 text-muted-foreground text-xs",
416
- children: [/* @__PURE__ */ p(be, { className: "h-4 w-4" }), D("planmagnet.analytics.summary.activeProjects", "Active Projects")]
423
+ children: [/* @__PURE__ */ p(Se, { className: "h-4 w-4" }), D("planmagnet.analytics.summary.activeProjects", "Active Projects")]
417
424
  }), /* @__PURE__ */ p("p", {
418
425
  className: "text-xl font-bold mt-1",
419
- children: s(ht)
426
+ children: c(_t)
420
427
  })]
421
428
  }) }),
422
429
  /* @__PURE__ */ p(h, { children: /* @__PURE__ */ m(g, {
423
430
  className: "pt-4",
424
431
  children: [/* @__PURE__ */ m("div", {
425
432
  className: "flex items-center gap-2 text-muted-foreground text-xs",
426
- children: [/* @__PURE__ */ p(Ce, { className: "h-4 w-4" }), D("planmagnet.analytics.summary.activeSprints", "Active Sprints")]
433
+ children: [/* @__PURE__ */ p(Te, { className: "h-4 w-4" }), D("planmagnet.analytics.summary.activeSprints", "Active Sprints")]
427
434
  }), /* @__PURE__ */ p("p", {
428
435
  className: "text-xl font-bold mt-1",
429
- children: s(pt)
436
+ children: c(ht)
430
437
  })]
431
438
  }) }),
432
439
  /* @__PURE__ */ p(h, { children: /* @__PURE__ */ m(g, {
@@ -434,16 +441,16 @@ function D() {
434
441
  children: [
435
442
  /* @__PURE__ */ m("div", {
436
443
  className: "flex items-center gap-2 text-muted-foreground text-xs",
437
- children: [/* @__PURE__ */ p(Se, { className: "h-4 w-4" }), D("planmagnet.analytics.summary.avgVelocity", "Avg Velocity")]
444
+ children: [/* @__PURE__ */ p(we, { className: "h-4 w-4" }), D("planmagnet.analytics.summary.avgVelocity", "Avg Velocity")]
438
445
  }),
439
446
  /* @__PURE__ */ p("p", {
440
447
  className: "text-xs text-muted-foreground truncate",
441
- children: K || "—"
448
+ children: G || "—"
442
449
  }),
443
450
  /* @__PURE__ */ m("p", {
444
451
  className: "text-xl font-bold mt-1",
445
452
  children: [
446
- vt,
453
+ bt,
447
454
  " ",
448
455
  D("planmagnet.analytics.summary.pointsShort", "pts")
449
456
  ]
@@ -454,11 +461,11 @@ function D() {
454
461
  className: "pt-4",
455
462
  children: [/* @__PURE__ */ m("div", {
456
463
  className: "flex items-center gap-2 text-muted-foreground text-xs",
457
- children: [/* @__PURE__ */ p(xe, { className: "h-4 w-4" }), D("planmagnet.analytics.summary.atRisk", "At Risk")]
464
+ children: [/* @__PURE__ */ p(Ce, { className: "h-4 w-4" }), D("planmagnet.analytics.summary.atRisk", "At Risk")]
458
465
  }), /* @__PURE__ */ m("p", {
459
466
  className: "text-xl font-bold mt-1",
460
467
  children: [
461
- s(mt),
468
+ c(gt),
462
469
  " ",
463
470
  D("planmagnet.analytics.summary.milestones", "milestones")
464
471
  ]
@@ -473,16 +480,16 @@ function D() {
473
480
  children: D("planmagnet.analytics.delivery.title", "Sprint Delivery Analytics")
474
481
  }), /* @__PURE__ */ p("p", {
475
482
  className: "text-xs text-muted-foreground",
476
- children: D("planmagnet.analytics.delivery.forProject", "For {{project}}", { project: K || D("planmagnet.analytics.delivery.noProject", "no project") })
483
+ children: D("planmagnet.analytics.delivery.forProject", "For {{project}}", { project: G || D("planmagnet.analytics.delivery.noProject", "no project") })
477
484
  })] }), /* @__PURE__ */ p("div", {
478
485
  className: "flex gap-2 sm:ml-auto",
479
486
  children: /* @__PURE__ */ m(b, {
480
- value: G,
487
+ value: W,
481
488
  onValueChange: O,
482
489
  children: [/* @__PURE__ */ p(C, {
483
490
  className: "h-8 w-48",
484
491
  children: /* @__PURE__ */ p(w, { placeholder: D("planmagnet.analytics.delivery.sprintPlaceholder", "Select sprint") })
485
- }), /* @__PURE__ */ p(x, { children: W.map((e) => /* @__PURE__ */ p(S, {
492
+ }), /* @__PURE__ */ p(x, { children: U.map((e) => /* @__PURE__ */ p(S, {
486
493
  value: e.id,
487
494
  children: e.name
488
495
  }, e.id)) })]
@@ -493,25 +500,25 @@ function D() {
493
500
  className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
494
501
  children: [/* @__PURE__ */ m(h, { children: [/* @__PURE__ */ p(_, { children: /* @__PURE__ */ m(v, {
495
502
  className: "flex items-center gap-2",
496
- children: [/* @__PURE__ */ p(ye, { className: "h-4 w-4" }), D("planmagnet.analytics.burndown.title", "Sprint Burndown")]
497
- }) }), /* @__PURE__ */ p(g, { children: rt ? /* @__PURE__ */ p("div", {
503
+ children: [/* @__PURE__ */ p(xe, { className: "h-4 w-4" }), D("planmagnet.analytics.burndown.title", "Sprint Burndown")]
504
+ }) }), /* @__PURE__ */ p(g, { children: ot ? /* @__PURE__ */ p("div", {
498
505
  className: "flex justify-center py-12",
499
506
  children: /* @__PURE__ */ p("div", { className: "animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full" })
500
- }) : _t.length > 0 ? /* @__PURE__ */ p(r, {
507
+ }) : yt.length > 0 ? /* @__PURE__ */ p(r, {
501
508
  width: "100%",
502
509
  height: 220,
503
510
  children: /* @__PURE__ */ m(ie, {
504
- data: _t,
511
+ data: yt,
505
512
  children: [
506
- /* @__PURE__ */ p(i, {
513
+ /* @__PURE__ */ p(a, {
507
514
  strokeDasharray: "3 3",
508
515
  opacity: .2
509
516
  }),
510
- /* @__PURE__ */ p(a, {
517
+ /* @__PURE__ */ p(o, {
511
518
  dataKey: "day",
512
519
  tick: { fontSize: 11 }
513
520
  }),
514
- /* @__PURE__ */ p(o, {
521
+ /* @__PURE__ */ p(s, {
515
522
  tick: { fontSize: 11 },
516
523
  allowDecimals: !1
517
524
  }),
@@ -541,7 +548,7 @@ function D() {
541
548
  }) })] }), /* @__PURE__ */ m(h, { children: [/* @__PURE__ */ p(_, { children: /* @__PURE__ */ m(v, {
542
549
  className: "flex items-center gap-2",
543
550
  children: [
544
- /* @__PURE__ */ p(Se, { className: "h-4 w-4" }),
551
+ /* @__PURE__ */ p(we, { className: "h-4 w-4" }),
545
552
  D("planmagnet.analytics.velocity.title", "Sprint Velocity"),
546
553
  " (",
547
554
  Z.length,
@@ -549,69 +556,96 @@ function D() {
549
556
  D("planmagnet.analytics.velocity.sprints", "Sprints"),
550
557
  ")"
551
558
  ]
552
- }) }), /* @__PURE__ */ p(g, { children: at ? /* @__PURE__ */ p("div", {
559
+ }) }), /* @__PURE__ */ p(g, { children: ct ? /* @__PURE__ */ p("div", {
553
560
  className: "flex justify-center py-12",
554
561
  children: /* @__PURE__ */ p("div", { className: "animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full" })
555
- }) : Z.length > 0 ? /* @__PURE__ */ m(Te, { children: [/* @__PURE__ */ p(r, {
556
- width: "100%",
557
- height: 190,
558
- children: /* @__PURE__ */ m(ae, {
559
- data: Z,
560
- children: [
561
- /* @__PURE__ */ p(i, {
562
- strokeDasharray: "3 3",
563
- opacity: .2
564
- }),
565
- /* @__PURE__ */ p(a, {
566
- dataKey: "name",
567
- tick: { fontSize: 11 }
568
- }),
569
- /* @__PURE__ */ p(o, {
570
- tick: { fontSize: 11 },
571
- allowDecimals: !1
572
- }),
573
- /* @__PURE__ */ p(n, {}),
574
- /* @__PURE__ */ p(t, { wrapperStyle: { fontSize: 12 } }),
575
- /* @__PURE__ */ p(ee, {
576
- dataKey: "planned",
577
- name: D("planmagnet.analytics.velocity.planned", "Planned"),
578
- fill: "#cbd5e1"
579
- }),
580
- /* @__PURE__ */ p(ee, {
581
- dataKey: "completed",
582
- name: D("planmagnet.analytics.velocity.completed", "Completed"),
583
- fill: "#6366f1"
584
- }),
585
- /* @__PURE__ */ p(te, {
586
- y: vt,
587
- stroke: "#22c55e",
588
- strokeDasharray: "4 4",
589
- label: {
590
- value: D("planmagnet.analytics.velocity.avgLabel", "avg"),
591
- fontSize: 10,
592
- position: "right"
593
- }
594
- })
595
- ]
596
- })
597
- }), /* @__PURE__ */ p("p", {
598
- className: "text-xs text-muted-foreground text-center mt-2",
599
- children: Z.length === 1 ? D("planmagnet.analytics.velocity.trailingAverageOne", "Average of the last completed sprint: {{points}} pts per sprint", { points: yt }) : D("planmagnet.analytics.velocity.trailingAverage", "Average of the last {{count}} completed sprints: {{points}} pts per sprint", {
600
- points: yt,
601
- count: Z.length
562
+ }) : Z.length > 0 ? /* @__PURE__ */ m(De, { children: [
563
+ /* @__PURE__ */ p(r, {
564
+ width: "100%",
565
+ height: 190,
566
+ children: /* @__PURE__ */ m(ae, {
567
+ data: Z,
568
+ children: [
569
+ /* @__PURE__ */ p(a, {
570
+ strokeDasharray: "3 3",
571
+ opacity: .2
572
+ }),
573
+ /* @__PURE__ */ p(o, {
574
+ dataKey: "name",
575
+ tick: { fontSize: 11 }
576
+ }),
577
+ /* @__PURE__ */ p(s, {
578
+ tick: { fontSize: 11 },
579
+ allowDecimals: !1
580
+ }),
581
+ /* @__PURE__ */ p(n, {}),
582
+ /* @__PURE__ */ p(t, { wrapperStyle: { fontSize: 12 } }),
583
+ Q && /* @__PURE__ */ p(te, {
584
+ y1: Q.p15,
585
+ y2: Q.p85,
586
+ fill: "var(--color-chart-2)",
587
+ fillOpacity: .12,
588
+ stroke: "none"
589
+ }),
590
+ /* @__PURE__ */ p(i, {
591
+ dataKey: "planned",
592
+ name: D("planmagnet.analytics.velocity.planned", "Planned"),
593
+ fill: "#cbd5e1"
594
+ }),
595
+ /* @__PURE__ */ p(i, {
596
+ dataKey: "completed",
597
+ name: D("planmagnet.analytics.velocity.completed", "Completed"),
598
+ fill: "#6366f1"
599
+ }),
600
+ /* @__PURE__ */ p(ee, {
601
+ y: bt,
602
+ stroke: "#22c55e",
603
+ strokeDasharray: "4 4",
604
+ label: {
605
+ value: D("planmagnet.analytics.velocity.avgLabel", "avg"),
606
+ fontSize: 10,
607
+ position: "right"
608
+ }
609
+ })
610
+ ]
611
+ })
612
+ }),
613
+ /* @__PURE__ */ m("p", {
614
+ className: "text-xs text-muted-foreground text-center mt-2",
615
+ children: [Z.length === 1 ? D("planmagnet.analytics.velocity.trailingAverageOne", "Median of the last completed sprint: {{points}} pts per sprint", { points: xt }) : D("planmagnet.analytics.velocity.trailingAverage", "Median of the last {{count}} completed sprints: {{points}} pts per sprint", {
616
+ points: xt,
617
+ count: Z.length
618
+ }), Q && ` · ${D("planmagnet.analytics.velocity.range", "likely range (p15–p85): {{low}}–{{high}} pts", {
619
+ low: Math.round(Q.p15),
620
+ high: Math.round(Q.p85)
621
+ })}`]
622
+ }),
623
+ St && /* @__PURE__ */ p("p", {
624
+ className: "text-xs text-status-warning-text text-center mt-1",
625
+ children: D("planmagnet.analytics.velocity.insufficientHistory", "Fewer than 3 sprints with completed points — this forecast is low-confidence.")
626
+ }),
627
+ /* @__PURE__ */ p("p", {
628
+ className: "text-xs text-muted-foreground text-center mt-1",
629
+ children: D("planmagnet.analytics.velocity.methodLabel", "Statistical forecast (not AI-generated).")
602
630
  })
603
- })] }) : /* @__PURE__ */ p("p", {
631
+ ] }) : /* @__PURE__ */ p("p", {
604
632
  className: "text-sm text-muted-foreground py-8 text-center",
605
633
  children: D("planmagnet.analytics.velocity.empty", "No completed sprints yet for this project")
606
634
  }) })] })]
607
635
  }),
636
+ /* @__PURE__ */ p(le, {
637
+ workspaceId: d,
638
+ projectId: H,
639
+ sprintId: W || void 0,
640
+ sprintName: U.find((e) => e.id === W)?.name
641
+ }),
608
642
  /* @__PURE__ */ m(h, { children: [/* @__PURE__ */ m(_, { children: [/* @__PURE__ */ m(v, {
609
643
  className: "flex items-center gap-2",
610
- children: [/* @__PURE__ */ p(ye, { className: "h-4 w-4" }), D("planmagnet.analytics.cfd.title", "Cumulative Flow Diagram")]
644
+ children: [/* @__PURE__ */ p(xe, { className: "h-4 w-4" }), D("planmagnet.analytics.cfd.title", "Cumulative Flow Diagram")]
611
645
  }), /* @__PURE__ */ p("p", {
612
646
  className: "text-xs text-muted-foreground",
613
- children: D("planmagnet.analytics.cfd.subtitle", "Selected date range, for {{project}}.", { project: K || D("planmagnet.analytics.delivery.noProject", "no project") })
614
- })] }), /* @__PURE__ */ p(g, { children: st ? /* @__PURE__ */ p("div", {
647
+ children: D("planmagnet.analytics.cfd.subtitle", "Selected date range, for {{project}}.", { project: G || D("planmagnet.analytics.delivery.noProject", "no project") })
648
+ })] }), /* @__PURE__ */ p(g, { children: ut ? /* @__PURE__ */ p("div", {
615
649
  className: "flex justify-center py-12",
616
650
  children: /* @__PURE__ */ p("div", { className: "animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full" })
617
651
  }) : $.length > 0 ? /* @__PURE__ */ p(r, {
@@ -620,21 +654,21 @@ function D() {
620
654
  children: /* @__PURE__ */ m(oe, {
621
655
  data: $,
622
656
  children: [
623
- /* @__PURE__ */ p(i, {
657
+ /* @__PURE__ */ p(a, {
624
658
  strokeDasharray: "3 3",
625
659
  opacity: .2
626
660
  }),
627
- /* @__PURE__ */ p(a, {
661
+ /* @__PURE__ */ p(o, {
628
662
  dataKey: "day",
629
663
  tick: { fontSize: 11 }
630
664
  }),
631
- /* @__PURE__ */ p(o, {
665
+ /* @__PURE__ */ p(s, {
632
666
  tick: { fontSize: 11 },
633
667
  allowDecimals: !1
634
668
  }),
635
669
  /* @__PURE__ */ p(n, {}),
636
670
  /* @__PURE__ */ p(t, { wrapperStyle: { fontSize: 12 } }),
637
- bt.map((e) => /* @__PURE__ */ p(re, {
671
+ wt.map((e) => /* @__PURE__ */ p(re, {
638
672
  type: "monotone",
639
673
  dataKey: e,
640
674
  name: e.toLowerCase().replace("_", " "),
@@ -649,34 +683,34 @@ function D() {
649
683
  className: "text-sm text-muted-foreground py-8 text-center",
650
684
  children: D("planmagnet.analytics.cfd.empty", "No work items found for this project")
651
685
  }) })] }),
652
- /* @__PURE__ */ p(pe, {
686
+ /* @__PURE__ */ p(me, {
653
687
  workspaceId: d,
654
- projectId: U,
655
- startDate: R,
656
- endDate: z
688
+ projectId: H,
689
+ startDate: L,
690
+ endDate: R
657
691
  }),
658
692
  /* @__PURE__ */ m("div", {
659
693
  className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
660
- children: [/* @__PURE__ */ p(de, {
694
+ children: [/* @__PURE__ */ p(fe, {
661
695
  workspaceId: d,
662
696
  projectId: F,
663
- startDate: R,
664
- endDate: z
665
- }), /* @__PURE__ */ p(fe, {
697
+ startDate: L,
698
+ endDate: R
699
+ }), /* @__PURE__ */ p(pe, {
666
700
  workspaceId: d,
667
701
  projectId: F,
668
- startDate: R,
669
- endDate: z
702
+ startDate: L,
703
+ endDate: R
670
704
  })]
671
705
  }),
672
706
  /* @__PURE__ */ m("div", {
673
707
  className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
674
- children: [/* @__PURE__ */ p(ue, {
708
+ children: [/* @__PURE__ */ p(de, {
675
709
  workspaceId: d,
676
- projectId: U,
677
- startDate: R,
678
- endDate: z
679
- }), /* @__PURE__ */ p(le, {
710
+ projectId: H,
711
+ startDate: L,
712
+ endDate: R
713
+ }), /* @__PURE__ */ p(ue, {
680
714
  workspaceId: d,
681
715
  projectId: F
682
716
  })]
@@ -687,20 +721,20 @@ function D() {
687
721
  }) }),
688
722
  /* @__PURE__ */ m("div", {
689
723
  className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
690
- children: [/* @__PURE__ */ p(me, {
724
+ children: [/* @__PURE__ */ p(he, {
691
725
  workspaceId: d,
692
- projectId: U,
693
- startDate: R,
694
- endDate: z
695
- }), /* @__PURE__ */ p(he, {
726
+ projectId: H,
727
+ startDate: L,
728
+ endDate: R
729
+ }), /* @__PURE__ */ p(ge, {
696
730
  workspaceId: d,
697
731
  projectId: F
698
732
  })]
699
733
  }),
700
734
  /* @__PURE__ */ m(h, { children: [/* @__PURE__ */ p(_, { children: /* @__PURE__ */ p(v, { children: D("planmagnet.analytics.projectHealth.title", "Project Health") }) }), /* @__PURE__ */ p(g, { children: /* @__PURE__ */ m("div", {
701
735
  className: "space-y-3",
702
- children: [H.filter((e) => e.status === "ACTIVE").map((e) => {
703
- let t = ft(e.id), n = e.endDate && new Date(e.endDate) < /* @__PURE__ */ new Date() && t < 100 ? "at_risk" : t >= 75 ? "on_track" : "in_progress";
736
+ children: [V.filter((e) => e.status === "ACTIVE").map((e) => {
737
+ let t = mt(e.id), n = e.endDate && new Date(e.endDate) < /* @__PURE__ */ new Date() && t < 100 ? "at_risk" : t >= 75 ? "on_track" : "in_progress";
704
738
  return /* @__PURE__ */ m("div", {
705
739
  className: "flex items-center gap-4",
706
740
  children: [
@@ -722,14 +756,14 @@ function D() {
722
756
  className: "text-sm w-12 text-right",
723
757
  children: [t, "%"]
724
758
  }),
725
- /* @__PURE__ */ p(De, {
759
+ /* @__PURE__ */ p(ke, {
726
760
  variant: "outline",
727
761
  className: "capitalize text-xs w-20 justify-center",
728
762
  children: n.replace("_", " ")
729
763
  })
730
764
  ]
731
765
  }, e.id);
732
- }), H.filter((e) => e.status === "ACTIVE").length === 0 && /* @__PURE__ */ p("p", {
766
+ }), V.filter((e) => e.status === "ACTIVE").length === 0 && /* @__PURE__ */ p("p", {
733
767
  className: "text-sm text-muted-foreground text-center py-4",
734
768
  children: D("planmagnet.analytics.projectHealth.empty", "No active projects found")
735
769
  })]