@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.
- package/dist/_virtual/__vite-browser-external.js +9 -0
- package/dist/_virtual/__vite-browser-external.js.map +1 -0
- package/dist/_virtual/_rolldown/runtime.js +5 -2
- package/dist/index.js +3 -1
- package/dist/node_modules/fflate/esm/browser.js +554 -0
- package/dist/node_modules/fflate/esm/browser.js.map +1 -0
- package/dist/node_modules/jszip/dist/jszip.min.js +3038 -0
- package/dist/node_modules/jszip/dist/jszip.min.js.map +1 -0
- package/dist/node_modules/pptxgenjs/dist/pptxgen.es.js +2151 -0
- package/dist/node_modules/pptxgenjs/dist/pptxgen.es.js.map +1 -0
- package/dist/node_modules/write-excel-file/browser/index.js +3 -0
- package/dist/node_modules/write-excel-file/modules/export/convertFileContentToUint8ArrayBrowser.js +13 -0
- package/dist/node_modules/write-excel-file/modules/export/convertFileContentToUint8ArrayBrowser.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/export/convertFilesContentToUint8Arrays.js +21 -0
- package/dist/node_modules/write-excel-file/modules/export/convertFilesContentToUint8Arrays.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/export/downloadBlob.js +11 -0
- package/dist/node_modules/write-excel-file/modules/export/downloadBlob.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileBrowser.js +23 -0
- package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileBrowser.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileUniversal.js +22 -0
- package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileUniversal.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/getSheetData/getSheetData.js +18 -0
- package/dist/node_modules/write-excel-file/modules/getSheetData/getSheetData.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/features/conditionalFormatting.js +131 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/features/conditionalFormatting.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/features/images.js +188 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/features/images.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/features/stickyRowsOrColumns.js +52 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/features/stickyRowsOrColumns.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/_Content_Types_.xml.js +18 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/_Content_Types_.xml.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.js +18 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.rels.js +17 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.rels.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/rels.js +11 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/rels.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sharedStrings.xml.js +42 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sharedStrings.xml.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/cell.js +102 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/cell.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/column.js +17 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/column.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/columns.js +15 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/columns.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/drawingReference.js +8 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/drawingReference.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/helpers/getCellStyleProperties.js +71 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/helpers/getCellStyleProperties.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/mergedCellsDescription.js +56 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/mergedCellsDescription.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageMargins.js +15 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageMargins.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageSetup.js +13 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageSetup.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/processMergedCells.js +44 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/processMergedCells.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/row.js +123 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/row.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheet.xml.js +41 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheet.xml.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetData.js +11 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetData.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetViews.js +17 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetViews.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml.rels.js +20 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml.rels.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/styles.xml.js +77 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/styles.xml.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.js +22 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.rels.js +13 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.rels.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/generateXlsxFileContents.js +242 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/generateXlsxFileContents.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/getFeatures.js +29 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/getFeatures.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/convertDateToSerialNumber.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/convertDateToSerialNumber.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getAdditionalContent.js +42 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getAdditionalContent.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getElementXml.js +43 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getElementXml.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getWrittenFiles.js +93 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getWrittenFiles.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/transformContent.js +39 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/transformContent.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getAlignmentXml.js +17 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getAlignmentXml.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getBorderXml.js +29 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getBorderXml.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getCellAddress.js +14 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getCellAddress.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFileExtensionForContentType.js +11 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFileExtensionForContentType.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFillXml.js +14 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFillXml.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFontXml.js +12 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFontXml.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getOrderOfSiblings.js +24 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getOrderOfSiblings.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getXlsxColorForHexColor.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getXlsxColorForHexColor.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasAlignment.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasAlignment.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasBorder.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasBorder.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFill.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFill.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFont.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFont.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isCellObject.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isCellObject.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isObject.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isObject.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/orderOfSiblings.js +27 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/helpers/orderOfSiblings.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/initializeSharedStrings.js +17 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/initializeSharedStrings.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/initializeSheets.js +74 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/initializeSheets.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/initializeStyles.js +138 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/initializeStyles.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetData.js +40 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetData.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetName.js +11 -0
- package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetName.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/appendMarkupInsideElement.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xml/appendMarkupInsideElement.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/applyEnclosingElementOffset.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xml/applyEnclosingElementOffset.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/escapeXmlSpecialCharacters.js +12 -0
- package/dist/node_modules/write-excel-file/modules/xml/escapeXmlSpecialCharacters.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/findElement.js +12 -0
- package/dist/node_modules/write-excel-file/modules/xml/findElement.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/findElementInsideElement.js +12 -0
- package/dist/node_modules/write-excel-file/modules/xml/findElementInsideElement.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/findElementsNonRecursive_.js +41 -0
- package/dist/node_modules/write-excel-file/modules/xml/findElementsNonRecursive_.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/getAttributesString.js +14 -0
- package/dist/node_modules/write-excel-file/modules/xml/getAttributesString.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/getChildElements.js +42 -0
- package/dist/node_modules/write-excel-file/modules/xml/getChildElements.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/getClosingTagMarkup.js +8 -0
- package/dist/node_modules/write-excel-file/modules/xml/getClosingTagMarkup.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/getMarkupInsideElement.js +8 -0
- package/dist/node_modules/write-excel-file/modules/xml/getMarkupInsideElement.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/getOpeningTagMarkup.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xml/getOpeningTagMarkup.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/getSelfClosingTagMarkup.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xml/getSelfClosingTagMarkup.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/insertElementMarkupAccordingToOrderOfSiblings.js +64 -0
- package/dist/node_modules/write-excel-file/modules/xml/insertElementMarkupAccordingToOrderOfSiblings.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/prependMarkupInsideElement.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xml/prependMarkupInsideElement.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/removeInvalidXmlCharacters.js +9 -0
- package/dist/node_modules/write-excel-file/modules/xml/removeInvalidXmlCharacters.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/replaceElement.js +8 -0
- package/dist/node_modules/write-excel-file/modules/xml/replaceElement.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeName.js +10 -0
- package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeName.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeValue.js +11 -0
- package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeValue.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/sanitizeTextContent.js +11 -0
- package/dist/node_modules/write-excel-file/modules/xml/sanitizeTextContent.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/xml/setMarkupInsideElement.js +8 -0
- package/dist/node_modules/write-excel-file/modules/xml/setMarkupInsideElement.js.map +1 -0
- package/dist/node_modules/write-excel-file/modules/zip/zipToArrayBuffer.js +18 -0
- package/dist/node_modules/write-excel-file/modules/zip/zipToArrayBuffer.js.map +1 -0
- package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoot.js +160 -147
- package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +126 -106
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/comments/CommentThread.js +36 -36
- package/dist/planmagnet/comments/RoadmapComments.js +21 -21
- package/dist/planmagnet/controls/AutomationRuleControls.js +24 -24
- package/dist/planmagnet/controls/FeatureControls.js +60 -60
- package/dist/planmagnet/controls/Pickers.d.ts +10 -0
- package/dist/planmagnet/controls/Pickers.d.ts.map +1 -1
- package/dist/planmagnet/controls/Pickers.js +75 -27
- package/dist/planmagnet/controls/Pickers.js.map +1 -1
- package/dist/planmagnet/controls/SyncControls.js +59 -59
- package/dist/planmagnet/discussion/WorkItemDiscussionPanel.js +15 -15
- package/dist/planmagnet/docs/DocSuggestionsPanel.js +12 -12
- package/dist/planmagnet/docs/DocVersionCompare.js +3 -3
- package/dist/planmagnet/forecast/DeliveryForecastCard.d.ts +12 -0
- package/dist/planmagnet/forecast/DeliveryForecastCard.d.ts.map +1 -0
- package/dist/planmagnet/forecast/DeliveryForecastCard.js +208 -0
- package/dist/planmagnet/forecast/DeliveryForecastCard.js.map +1 -0
- package/dist/planmagnet/forecast/ProjectOutlookCard.d.ts +5 -0
- package/dist/planmagnet/forecast/ProjectOutlookCard.d.ts.map +1 -0
- package/dist/planmagnet/forecast/ProjectOutlookCard.js +190 -0
- package/dist/planmagnet/forecast/ProjectOutlookCard.js.map +1 -0
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.d.ts +5 -0
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.d.ts.map +1 -0
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js +99 -0
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js.map +1 -0
- package/dist/planmagnet/forecast/ResourceForecastCard.d.ts +8 -0
- package/dist/planmagnet/forecast/ResourceForecastCard.d.ts.map +1 -0
- package/dist/planmagnet/forecast/ResourceForecastCard.js +185 -0
- package/dist/planmagnet/forecast/ResourceForecastCard.js.map +1 -0
- package/dist/planmagnet/forecast/riskFlags.d.ts +35 -0
- package/dist/planmagnet/forecast/riskFlags.d.ts.map +1 -0
- package/dist/planmagnet/forecast/riskFlags.js +37 -0
- package/dist/planmagnet/forecast/riskFlags.js.map +1 -0
- package/dist/planmagnet/index.d.ts +2 -0
- package/dist/planmagnet/index.d.ts.map +1 -1
- package/dist/planmagnet/index.js +2 -0
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +216 -182
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js +11 -11
- package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js +4 -4
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js +163 -163
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js +165 -165
- package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js +234 -0
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +206 -182
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ReportsCreateReportPagePage.d.ts +6 -0
- package/dist/planmagnet/pages/ReportsCreateReportPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ReportsCreateReportPagePage.js +5 -177
- package/dist/planmagnet/pages/ReportsCreateReportPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ReportsEditReportPagePage.d.ts +3 -0
- package/dist/planmagnet/pages/ReportsEditReportPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ReportsEditReportPagePage.js +15 -0
- package/dist/planmagnet/pages/ReportsEditReportPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ReportsReportPagePage.d.ts +7 -0
- package/dist/planmagnet/pages/ReportsReportPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ReportsReportPagePage.js +226 -0
- package/dist/planmagnet/pages/ReportsReportPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ReportsReportsPagePage.js +224 -496
- package/dist/planmagnet/pages/ReportsReportsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.js +88 -83
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/analytics/SprintDeliveryCards.d.ts.map +1 -1
- package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js +139 -112
- package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js.map +1 -1
- package/dist/planmagnet/pages/analytics/StatusFlowCard.js +21 -21
- package/dist/planmagnet/product/ProductControls.js +91 -91
- package/dist/planmagnet/reports/ExportMenu.d.ts +9 -0
- package/dist/planmagnet/reports/ExportMenu.d.ts.map +1 -0
- package/dist/planmagnet/reports/ExportMenu.js +116 -0
- package/dist/planmagnet/reports/ExportMenu.js.map +1 -0
- package/dist/planmagnet/reports/PrintReportView.d.ts +24 -0
- package/dist/planmagnet/reports/PrintReportView.d.ts.map +1 -0
- package/dist/planmagnet/reports/PrintReportView.js +75 -0
- package/dist/planmagnet/reports/PrintReportView.js.map +1 -0
- package/dist/planmagnet/reports/ReportBuilderCanvas.d.ts +8 -0
- package/dist/planmagnet/reports/ReportBuilderCanvas.d.ts.map +1 -0
- package/dist/planmagnet/reports/ReportBuilderCanvas.js +261 -0
- package/dist/planmagnet/reports/ReportBuilderCanvas.js.map +1 -0
- package/dist/planmagnet/reports/ReportBuilderPage.d.ts +5 -0
- package/dist/planmagnet/reports/ReportBuilderPage.d.ts.map +1 -0
- package/dist/planmagnet/reports/ReportBuilderPage.js +198 -0
- package/dist/planmagnet/reports/ReportBuilderPage.js.map +1 -0
- package/dist/planmagnet/reports/ReportRunHistory.d.ts +8 -0
- package/dist/planmagnet/reports/ReportRunHistory.d.ts.map +1 -0
- package/dist/planmagnet/reports/ReportRunHistory.js +63 -0
- package/dist/planmagnet/reports/ReportRunHistory.js.map +1 -0
- package/dist/planmagnet/reports/ReportWidgetRenderer.d.ts +7 -0
- package/dist/planmagnet/reports/ReportWidgetRenderer.d.ts.map +1 -0
- package/dist/planmagnet/reports/ReportWidgetRenderer.js +251 -0
- package/dist/planmagnet/reports/ReportWidgetRenderer.js.map +1 -0
- package/dist/planmagnet/reports/SchedulesPanel.d.ts +4 -0
- package/dist/planmagnet/reports/SchedulesPanel.d.ts.map +1 -0
- package/dist/planmagnet/reports/SchedulesPanel.js +457 -0
- package/dist/planmagnet/reports/SchedulesPanel.js.map +1 -0
- package/dist/planmagnet/reports/ShareDialog.d.ts +5 -0
- package/dist/planmagnet/reports/ShareDialog.d.ts.map +1 -0
- package/dist/planmagnet/reports/ShareDialog.js +234 -0
- package/dist/planmagnet/reports/ShareDialog.js.map +1 -0
- package/dist/planmagnet/reports/SharedReportPage.d.ts +4 -0
- package/dist/planmagnet/reports/SharedReportPage.d.ts.map +1 -0
- package/dist/planmagnet/reports/SharedReportPage.js +180 -0
- package/dist/planmagnet/reports/SharedReportPage.js.map +1 -0
- package/dist/planmagnet/reports/WidgetEditorDialog.d.ts +10 -0
- package/dist/planmagnet/reports/WidgetEditorDialog.d.ts.map +1 -0
- package/dist/planmagnet/reports/WidgetEditorDialog.js +220 -0
- package/dist/planmagnet/reports/WidgetEditorDialog.js.map +1 -0
- package/dist/planmagnet/reports/reportExportPptx.d.ts +4 -0
- package/dist/planmagnet/reports/reportExportPptx.d.ts.map +1 -0
- package/dist/planmagnet/reports/reportExportPptx.js +118 -0
- package/dist/planmagnet/reports/reportExportPptx.js.map +1 -0
- package/dist/planmagnet/reports/reportExportXlsx.d.ts +4 -0
- package/dist/planmagnet/reports/reportExportXlsx.d.ts.map +1 -0
- package/dist/planmagnet/reports/reportExportXlsx.js +42 -0
- package/dist/planmagnet/reports/reportExportXlsx.js.map +1 -0
- package/dist/planmagnet/reports/reportGraphql.d.ts +28 -0
- package/dist/planmagnet/reports/reportGraphql.d.ts.map +1 -0
- package/dist/planmagnet/reports/reportGraphql.js +360 -0
- package/dist/planmagnet/reports/reportGraphql.js.map +1 -0
- package/dist/planmagnet/reports/reportModel.d.ts +198 -0
- package/dist/planmagnet/reports/reportModel.d.ts.map +1 -0
- package/dist/planmagnet/reports/reportModel.js +328 -0
- package/dist/planmagnet/reports/reportModel.js.map +1 -0
- package/dist/planmagnet/reports/sharedReportRoute.d.ts +15 -0
- package/dist/planmagnet/reports/sharedReportRoute.d.ts.map +1 -0
- package/dist/planmagnet/reports/sharedReportRoute.js +9 -0
- package/dist/planmagnet/reports/sharedReportRoute.js.map +1 -0
- package/dist/planmagnet/roadmaps/RoadmapControls.js +60 -60
- package/dist/planmagnet/roadmaps/RoadmapNowNextLater.js +30 -30
- package/dist/planmagnet/roadmaps/RoadmapReviewPanel.js +21 -21
- package/dist/planmagnet/roadmaps/RoadmapVersionsPanel.js +22 -22
- 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
|
|
6
|
-
import { ReferenceLine as
|
|
7
|
-
import {
|
|
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
|
|
11
|
-
import { YAxis as
|
|
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
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
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
|
|
25
|
-
import { useSearchParams as
|
|
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
|
|
29
|
-
import { useI18n as
|
|
30
|
-
import { Badge as
|
|
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
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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 } =
|
|
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
|
-
} :
|
|
178
|
-
function
|
|
179
|
-
N(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),
|
|
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
|
|
184
|
-
|
|
190
|
+
function Ge(e) {
|
|
191
|
+
I(ve(e), P);
|
|
185
192
|
}
|
|
186
|
-
function
|
|
187
|
-
e && M.to &&
|
|
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
|
|
196
|
-
e && M.from &&
|
|
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
|
|
205
|
-
|
|
211
|
+
function Je(e) {
|
|
212
|
+
Ve(e), O(""), I(M, e);
|
|
206
213
|
}
|
|
207
|
-
let { startDate:
|
|
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:
|
|
220
|
+
}), { data: Qe } = f(Me, {
|
|
214
221
|
variables: { workspaceId: d },
|
|
215
222
|
skip: !d
|
|
216
|
-
}),
|
|
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:
|
|
226
|
+
yesterday: tt
|
|
220
227
|
},
|
|
221
228
|
skip: !d
|
|
222
|
-
}),
|
|
229
|
+
}), V = Ye?.planmagnetProjects?.items ?? [], H = F || V[0]?.id || "", { data: nt } = f(Ae, {
|
|
223
230
|
variables: {
|
|
224
231
|
workspaceId: d,
|
|
225
|
-
projectId:
|
|
232
|
+
projectId: H
|
|
226
233
|
},
|
|
227
|
-
skip: !d || !
|
|
228
|
-
}),
|
|
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:
|
|
238
|
+
sprintId: W
|
|
232
239
|
},
|
|
233
|
-
skip: !d || !
|
|
234
|
-
}), { data:
|
|
240
|
+
skip: !d || !W
|
|
241
|
+
}), { data: st, loading: ct } = f(Fe, {
|
|
235
242
|
variables: {
|
|
236
243
|
workspaceId: d,
|
|
237
|
-
projectId:
|
|
244
|
+
projectId: H,
|
|
238
245
|
trailingSprintCount: 6
|
|
239
246
|
},
|
|
240
|
-
skip: !d || !
|
|
241
|
-
}), { data:
|
|
247
|
+
skip: !d || !H
|
|
248
|
+
}), { data: lt, loading: ut } = f(Ie, {
|
|
242
249
|
variables: {
|
|
243
250
|
workspaceId: d,
|
|
244
|
-
projectId:
|
|
245
|
-
startDate:
|
|
246
|
-
endDate:
|
|
251
|
+
projectId: H,
|
|
252
|
+
startDate: L,
|
|
253
|
+
endDate: R
|
|
247
254
|
},
|
|
248
|
-
skip: !d || !
|
|
255
|
+
skip: !d || !H
|
|
249
256
|
});
|
|
250
|
-
if (
|
|
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 (
|
|
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
|
-
|
|
266
|
+
Ze.message
|
|
260
267
|
]
|
|
261
268
|
});
|
|
262
|
-
let
|
|
263
|
-
let t =
|
|
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
|
-
},
|
|
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 =
|
|
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
|
-
})) ?? [],
|
|
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
|
-
}) ?? [],
|
|
284
|
+
}) ?? [], Tt = [
|
|
278
285
|
{
|
|
279
286
|
label: D("planmagnet.analytics.metrics.totalWorkItems.label", "Total Work Items"),
|
|
280
|
-
value:
|
|
281
|
-
trend: `${
|
|
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:
|
|
286
|
-
trend: `${
|
|
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:
|
|
291
|
-
trend: `${
|
|
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:
|
|
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":
|
|
327
|
-
onClick: () =>
|
|
328
|
-
className: `px-2.5 py-1 text-xs rounded ${
|
|
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) =>
|
|
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) =>
|
|
370
|
+
onChange: (e) => qe(e.target.value)
|
|
364
371
|
})
|
|
365
372
|
]
|
|
366
373
|
}),
|
|
367
|
-
|
|
374
|
+
We && /* @__PURE__ */ p("p", {
|
|
368
375
|
role: "alert",
|
|
369
376
|
className: "text-xs text-status-error-text",
|
|
370
|
-
children:
|
|
377
|
+
children: We
|
|
371
378
|
})
|
|
372
379
|
]
|
|
373
380
|
}), /* @__PURE__ */ m(b, {
|
|
374
381
|
value: P,
|
|
375
|
-
onValueChange:
|
|
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
|
-
}),
|
|
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:
|
|
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(
|
|
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:
|
|
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(
|
|
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:
|
|
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(
|
|
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:
|
|
448
|
+
children: G || "—"
|
|
442
449
|
}),
|
|
443
450
|
/* @__PURE__ */ m("p", {
|
|
444
451
|
className: "text-xl font-bold mt-1",
|
|
445
452
|
children: [
|
|
446
|
-
|
|
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(
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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(
|
|
497
|
-
}) }), /* @__PURE__ */ p(g, { children:
|
|
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
|
-
}) :
|
|
507
|
+
}) : yt.length > 0 ? /* @__PURE__ */ p(r, {
|
|
501
508
|
width: "100%",
|
|
502
509
|
height: 220,
|
|
503
510
|
children: /* @__PURE__ */ m(ie, {
|
|
504
|
-
data:
|
|
511
|
+
data: yt,
|
|
505
512
|
children: [
|
|
506
|
-
/* @__PURE__ */ p(
|
|
513
|
+
/* @__PURE__ */ p(a, {
|
|
507
514
|
strokeDasharray: "3 3",
|
|
508
515
|
opacity: .2
|
|
509
516
|
}),
|
|
510
|
-
/* @__PURE__ */ p(
|
|
517
|
+
/* @__PURE__ */ p(o, {
|
|
511
518
|
dataKey: "day",
|
|
512
519
|
tick: { fontSize: 11 }
|
|
513
520
|
}),
|
|
514
|
-
/* @__PURE__ */ p(
|
|
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(
|
|
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:
|
|
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(
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
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
|
-
|
|
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(
|
|
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:
|
|
614
|
-
})] }), /* @__PURE__ */ p(g, { children:
|
|
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(
|
|
657
|
+
/* @__PURE__ */ p(a, {
|
|
624
658
|
strokeDasharray: "3 3",
|
|
625
659
|
opacity: .2
|
|
626
660
|
}),
|
|
627
|
-
/* @__PURE__ */ p(
|
|
661
|
+
/* @__PURE__ */ p(o, {
|
|
628
662
|
dataKey: "day",
|
|
629
663
|
tick: { fontSize: 11 }
|
|
630
664
|
}),
|
|
631
|
-
/* @__PURE__ */ p(
|
|
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
|
-
|
|
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(
|
|
686
|
+
/* @__PURE__ */ p(me, {
|
|
653
687
|
workspaceId: d,
|
|
654
|
-
projectId:
|
|
655
|
-
startDate:
|
|
656
|
-
endDate:
|
|
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(
|
|
694
|
+
children: [/* @__PURE__ */ p(fe, {
|
|
661
695
|
workspaceId: d,
|
|
662
696
|
projectId: F,
|
|
663
|
-
startDate:
|
|
664
|
-
endDate:
|
|
665
|
-
}), /* @__PURE__ */ p(
|
|
697
|
+
startDate: L,
|
|
698
|
+
endDate: R
|
|
699
|
+
}), /* @__PURE__ */ p(pe, {
|
|
666
700
|
workspaceId: d,
|
|
667
701
|
projectId: F,
|
|
668
|
-
startDate:
|
|
669
|
-
endDate:
|
|
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(
|
|
708
|
+
children: [/* @__PURE__ */ p(de, {
|
|
675
709
|
workspaceId: d,
|
|
676
|
-
projectId:
|
|
677
|
-
startDate:
|
|
678
|
-
endDate:
|
|
679
|
-
}), /* @__PURE__ */ p(
|
|
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(
|
|
724
|
+
children: [/* @__PURE__ */ p(he, {
|
|
691
725
|
workspaceId: d,
|
|
692
|
-
projectId:
|
|
693
|
-
startDate:
|
|
694
|
-
endDate:
|
|
695
|
-
}), /* @__PURE__ */ p(
|
|
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: [
|
|
703
|
-
let t =
|
|
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(
|
|
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
|
-
}),
|
|
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
|
})]
|