@burdenoff/microfe-planmagnet 2026.930.25 → 2026.1001.1
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 +154 -147
- package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +122 -106
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- 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/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/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/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 +14 -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/package.json +6 -4
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { Legend as e } from "../../node_modules/recharts/es6/component/Legend.js";
|
|
2
|
+
import { Tooltip as t } from "../../node_modules/recharts/es6/component/Tooltip.js";
|
|
3
|
+
import { ResponsiveContainer as n } from "../../node_modules/recharts/es6/component/ResponsiveContainer.js";
|
|
4
|
+
import { Bar as r } from "../../node_modules/recharts/es6/cartesian/Bar.js";
|
|
5
|
+
import { CartesianGrid as i } from "../../node_modules/recharts/es6/cartesian/CartesianGrid.js";
|
|
6
|
+
import { XAxis as a } from "../../node_modules/recharts/es6/cartesian/XAxis.js";
|
|
7
|
+
import { YAxis as o } from "../../node_modules/recharts/es6/cartesian/YAxis.js";
|
|
8
|
+
import { BarChart as s } from "../../node_modules/recharts/es6/chart/BarChart.js";
|
|
9
|
+
import { extractRows as c, humanizeKey as l, pickLabelField as u, pickNumericFields as d, scalarFields as f } from "./reportModel.js";
|
|
10
|
+
import { useId as p, useMemo as m, useState as h } from "react";
|
|
11
|
+
import { AlertTriangle as g, ChevronDown as _, ChevronRight as v, Lock as y } from "lucide-react";
|
|
12
|
+
import { jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
13
|
+
import { Table as S, TableBody as C, TableCaption as w, TableCell as T, TableHead as E, TableHeader as D, TableRow as O } from "@burdenoff/fe-libs/ui";
|
|
14
|
+
//#region src/planmagnet/reports/ReportWidgetRenderer.tsx
|
|
15
|
+
var k = [
|
|
16
|
+
"var(--color-chart-1)",
|
|
17
|
+
"var(--color-chart-2)",
|
|
18
|
+
"var(--color-chart-3)",
|
|
19
|
+
"var(--color-chart-4)",
|
|
20
|
+
"var(--color-chart-5)",
|
|
21
|
+
"var(--color-chart-6)"
|
|
22
|
+
], A = 4, j = 60, M = 8, N = 100;
|
|
23
|
+
function P(e) {
|
|
24
|
+
return typeof e == "string" && /^\d{4}-\d{2}-\d{2}([T ]|$)/.test(e);
|
|
25
|
+
}
|
|
26
|
+
function F(e) {
|
|
27
|
+
if (e == null) return "—";
|
|
28
|
+
if (typeof e == "boolean") return e ? "Yes" : "No";
|
|
29
|
+
if (P(e)) {
|
|
30
|
+
let t = new Date(e);
|
|
31
|
+
if (!Number.isNaN(t.getTime())) return `${t.getUTCFullYear()}-${String(t.getUTCMonth() + 1).padStart(2, "0")}-${String(t.getUTCDate()).padStart(2, "0")}`;
|
|
32
|
+
}
|
|
33
|
+
return typeof e == "number" ? Number.isInteger(e) ? String(e) : e.toFixed(2) : String(e);
|
|
34
|
+
}
|
|
35
|
+
function I(e) {
|
|
36
|
+
if (P(e)) {
|
|
37
|
+
let t = new Date(e);
|
|
38
|
+
if (!Number.isNaN(t.getTime())) return `${t.getUTCMonth() + 1}/${t.getUTCDate()}`;
|
|
39
|
+
}
|
|
40
|
+
return e == null ? "" : String(e);
|
|
41
|
+
}
|
|
42
|
+
function L(e, t) {
|
|
43
|
+
let n = /* @__PURE__ */ new Set(), r = [];
|
|
44
|
+
t && (n.add(t), r.push(t));
|
|
45
|
+
for (let t of e) for (let [e] of f(t)) if (!n.has(e) && (n.add(e), r.push(e), r.length >= M)) return r;
|
|
46
|
+
return r;
|
|
47
|
+
}
|
|
48
|
+
function R(e) {
|
|
49
|
+
return !e || typeof e != "object" || Array.isArray(e) ? [] : f(e);
|
|
50
|
+
}
|
|
51
|
+
function z(e) {
|
|
52
|
+
let t = [{
|
|
53
|
+
label: "Count",
|
|
54
|
+
value: String(e.length)
|
|
55
|
+
}], n = d(e, u(e)).slice(0, 4);
|
|
56
|
+
for (let r of n) {
|
|
57
|
+
let n = e.reduce((e, t) => {
|
|
58
|
+
let n = t[r];
|
|
59
|
+
return e + (typeof n == "number" ? n : 0);
|
|
60
|
+
}, 0);
|
|
61
|
+
t.push({
|
|
62
|
+
label: `Total ${l(r)}`,
|
|
63
|
+
value: F(n)
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return t;
|
|
67
|
+
}
|
|
68
|
+
function B({ result: e }) {
|
|
69
|
+
let t = R(e), n = t.length > 0 ? t.map(([e, t]) => ({
|
|
70
|
+
label: l(e),
|
|
71
|
+
value: F(t)
|
|
72
|
+
})) : z(c(e));
|
|
73
|
+
return n.length === 0 ? /* @__PURE__ */ b("p", {
|
|
74
|
+
className: "text-sm text-muted-foreground",
|
|
75
|
+
children: "No figures in this result."
|
|
76
|
+
}) : /* @__PURE__ */ b("dl", {
|
|
77
|
+
className: "grid grid-cols-2 gap-3 sm:grid-cols-3",
|
|
78
|
+
children: n.map((e) => /* @__PURE__ */ x("div", {
|
|
79
|
+
className: "rounded-md border border-border bg-muted/40 p-2",
|
|
80
|
+
children: [/* @__PURE__ */ b("dt", {
|
|
81
|
+
className: "text-[11px] text-muted-foreground",
|
|
82
|
+
children: e.label
|
|
83
|
+
}), /* @__PURE__ */ b("dd", {
|
|
84
|
+
className: "text-lg font-semibold tabular-nums",
|
|
85
|
+
children: e.value
|
|
86
|
+
})]
|
|
87
|
+
}, e.label))
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function V({ rows: e, labelField: t, title: n }) {
|
|
91
|
+
let [r, i] = h(!1), a = p(), o = L(e, t);
|
|
92
|
+
return /* @__PURE__ */ x("div", {
|
|
93
|
+
className: "mt-2",
|
|
94
|
+
children: [/* @__PURE__ */ x("button", {
|
|
95
|
+
type: "button",
|
|
96
|
+
className: "inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline",
|
|
97
|
+
"aria-expanded": r,
|
|
98
|
+
"aria-controls": a,
|
|
99
|
+
onClick: () => i((e) => !e),
|
|
100
|
+
children: [b(r ? _ : v, { className: "h-3 w-3" }), "View data as a table"]
|
|
101
|
+
}), r && /* @__PURE__ */ b("div", {
|
|
102
|
+
id: a,
|
|
103
|
+
className: "mt-2 max-h-64 overflow-auto rounded-md border border-border",
|
|
104
|
+
children: /* @__PURE__ */ b(H, {
|
|
105
|
+
rows: e,
|
|
106
|
+
columns: o,
|
|
107
|
+
caption: `${n} — data`
|
|
108
|
+
})
|
|
109
|
+
})]
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
function H({ rows: e, columns: t, caption: n }) {
|
|
113
|
+
let r = e.slice(0, N);
|
|
114
|
+
return /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ x(S, { children: [
|
|
115
|
+
/* @__PURE__ */ b(w, {
|
|
116
|
+
className: "sr-only",
|
|
117
|
+
children: n
|
|
118
|
+
}),
|
|
119
|
+
/* @__PURE__ */ b(D, { children: /* @__PURE__ */ b(O, { children: t.map((e) => /* @__PURE__ */ b(E, {
|
|
120
|
+
scope: "col",
|
|
121
|
+
children: l(e)
|
|
122
|
+
}, e)) }) }),
|
|
123
|
+
/* @__PURE__ */ b(C, { children: r.map((e, n) => /* @__PURE__ */ b(O, { children: t.map((t) => /* @__PURE__ */ b(T, { children: F(e[t]) }, t)) }, n)) })
|
|
124
|
+
] }), e.length > r.length && /* @__PURE__ */ x("p", {
|
|
125
|
+
className: "p-2 text-left text-xs text-muted-foreground",
|
|
126
|
+
children: [
|
|
127
|
+
"Showing ",
|
|
128
|
+
r.length,
|
|
129
|
+
" of ",
|
|
130
|
+
e.length,
|
|
131
|
+
" rows."
|
|
132
|
+
]
|
|
133
|
+
})] });
|
|
134
|
+
}
|
|
135
|
+
function U({ result: f, title: p }) {
|
|
136
|
+
let h = m(() => c(f), [f]), g = m(() => u(h), [h]), _ = m(() => d(h, g).slice(0, A), [h, g]);
|
|
137
|
+
return h.length < 2 || _.length === 0 ? /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
138
|
+
className: "mb-2 text-xs text-muted-foreground",
|
|
139
|
+
children: "Not enough rows to chart — showing the figures instead."
|
|
140
|
+
}), /* @__PURE__ */ b(B, { result: f })] }) : /* @__PURE__ */ x("div", { children: [
|
|
141
|
+
/* @__PURE__ */ b(n, {
|
|
142
|
+
width: "100%",
|
|
143
|
+
height: 220,
|
|
144
|
+
children: /* @__PURE__ */ x(s, {
|
|
145
|
+
data: h.slice(0, j).map((e, t) => {
|
|
146
|
+
let n = { __label: g ? I(e[g]) : String(t + 1) };
|
|
147
|
+
for (let t of _) {
|
|
148
|
+
let r = e[t];
|
|
149
|
+
n[t] = typeof r == "number" ? r : 0;
|
|
150
|
+
}
|
|
151
|
+
return n;
|
|
152
|
+
}),
|
|
153
|
+
children: [
|
|
154
|
+
/* @__PURE__ */ b(i, {
|
|
155
|
+
strokeDasharray: "3 3",
|
|
156
|
+
opacity: .2
|
|
157
|
+
}),
|
|
158
|
+
/* @__PURE__ */ b(a, {
|
|
159
|
+
dataKey: "__label",
|
|
160
|
+
tick: { fontSize: 11 }
|
|
161
|
+
}),
|
|
162
|
+
/* @__PURE__ */ b(o, {
|
|
163
|
+
tick: { fontSize: 11 },
|
|
164
|
+
allowDecimals: !1
|
|
165
|
+
}),
|
|
166
|
+
/* @__PURE__ */ b(t, {}),
|
|
167
|
+
_.length > 1 && /* @__PURE__ */ b(e, { wrapperStyle: { fontSize: 12 } }),
|
|
168
|
+
_.map((e, t) => /* @__PURE__ */ b(r, {
|
|
169
|
+
dataKey: e,
|
|
170
|
+
name: l(e),
|
|
171
|
+
fill: k[t % k.length]
|
|
172
|
+
}, e))
|
|
173
|
+
]
|
|
174
|
+
})
|
|
175
|
+
}),
|
|
176
|
+
h.length > j && /* @__PURE__ */ x("p", {
|
|
177
|
+
className: "mt-1 text-[11px] text-muted-foreground",
|
|
178
|
+
children: [
|
|
179
|
+
"Showing the first ",
|
|
180
|
+
j,
|
|
181
|
+
" of ",
|
|
182
|
+
h.length,
|
|
183
|
+
" rows."
|
|
184
|
+
]
|
|
185
|
+
}),
|
|
186
|
+
/* @__PURE__ */ b(V, {
|
|
187
|
+
rows: h,
|
|
188
|
+
labelField: g,
|
|
189
|
+
title: p
|
|
190
|
+
})
|
|
191
|
+
] });
|
|
192
|
+
}
|
|
193
|
+
function W({ result: e }) {
|
|
194
|
+
let t = m(() => c(e), [e]), n = m(() => u(t), [t]);
|
|
195
|
+
return t.length === 0 ? /* @__PURE__ */ b("p", {
|
|
196
|
+
className: "text-sm text-muted-foreground",
|
|
197
|
+
children: "No rows in this result."
|
|
198
|
+
}) : /* @__PURE__ */ b("div", {
|
|
199
|
+
className: "max-h-80 overflow-auto rounded-md border border-border",
|
|
200
|
+
children: /* @__PURE__ */ b(H, {
|
|
201
|
+
rows: t,
|
|
202
|
+
columns: L(t, n),
|
|
203
|
+
caption: "Widget data"
|
|
204
|
+
})
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
function G({ widget: e, runResult: t }) {
|
|
208
|
+
if (e.type === "TEXT") return /* @__PURE__ */ b("div", {
|
|
209
|
+
className: "flex h-full items-center border-b border-border pb-1",
|
|
210
|
+
children: /* @__PURE__ */ b("h3", {
|
|
211
|
+
className: "text-sm font-semibold uppercase tracking-wide text-muted-foreground",
|
|
212
|
+
children: e.title
|
|
213
|
+
})
|
|
214
|
+
});
|
|
215
|
+
if (!t) return /* @__PURE__ */ b("p", {
|
|
216
|
+
className: "text-sm text-muted-foreground",
|
|
217
|
+
children: "Not run yet — choose “Run now” above."
|
|
218
|
+
});
|
|
219
|
+
if (t.status === "FORBIDDEN") return /* @__PURE__ */ x("div", {
|
|
220
|
+
className: "flex items-start gap-2 text-sm text-muted-foreground",
|
|
221
|
+
role: "status",
|
|
222
|
+
children: [/* @__PURE__ */ b(y, {
|
|
223
|
+
className: "mt-0.5 h-4 w-4 shrink-0",
|
|
224
|
+
"aria-hidden": !0
|
|
225
|
+
}), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", { children: "You do not have access to this data." }), t.message && /* @__PURE__ */ b("p", {
|
|
226
|
+
className: "text-xs",
|
|
227
|
+
children: t.message
|
|
228
|
+
})] })]
|
|
229
|
+
});
|
|
230
|
+
if (t.status === "ERROR") return /* @__PURE__ */ x("div", {
|
|
231
|
+
className: "flex items-start gap-2 text-sm text-destructive",
|
|
232
|
+
role: "alert",
|
|
233
|
+
children: [/* @__PURE__ */ b(g, {
|
|
234
|
+
className: "mt-0.5 h-4 w-4 shrink-0",
|
|
235
|
+
"aria-hidden": !0
|
|
236
|
+
}), /* @__PURE__ */ b("p", { children: t.message ?? "This widget could not be generated." })]
|
|
237
|
+
});
|
|
238
|
+
switch (e.type) {
|
|
239
|
+
case "KPI": return /* @__PURE__ */ b(B, { result: t.result });
|
|
240
|
+
case "CHART": return /* @__PURE__ */ b(U, {
|
|
241
|
+
result: t.result,
|
|
242
|
+
title: e.title
|
|
243
|
+
});
|
|
244
|
+
case "TABLE": return /* @__PURE__ */ b(W, { result: t.result });
|
|
245
|
+
default: return null;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
//#endregion
|
|
249
|
+
export { G as ReportWidgetRenderer };
|
|
250
|
+
|
|
251
|
+
//# sourceMappingURL=ReportWidgetRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReportWidgetRenderer.js","names":[],"sources":["../../../src/planmagnet/reports/ReportWidgetRenderer.tsx"],"sourcesContent":["import { useId, useMemo, useState } from 'react';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n Legend,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { Lock, ChevronDown, ChevronRight, AlertTriangle } from 'lucide-react';\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@burdenoff/fe-libs/ui';\nimport {\n extractRows,\n humanizeKey,\n pickLabelField,\n pickNumericFields,\n scalarFields,\n type ReportWidget,\n type Row,\n type WidgetRunResult,\n} from './reportModel';\n\n/**\n * Renders one widget's run result (ANR-13/15). The widget's `type` (KPI/CHART/TABLE/TEXT) decides the shape;\n * within CHART/TABLE/KPI, the actual rows/fields are derived generically from the JSON `result` via\n * `reportModel`'s `extractRows`/`pickLabelField`/`pickNumericFields` — there is no per-source switch here, so\n * every one of the 15 `PlanmagnetReportSource`s (including ones added later) renders without a code change.\n *\n * FORBIDDEN and ERROR always show an explicit message (never an empty chart/table) — see the widget-status\n * branch below. Every CHART also carries a same-data `<table>` (a `<details>` disclosure, not visually hidden)\n * as its text alternative, per this package's accessibility bar.\n */\n\nconst CHART_COLORS = [\n 'var(--color-chart-1)',\n 'var(--color-chart-2)',\n 'var(--color-chart-3)',\n 'var(--color-chart-4)',\n 'var(--color-chart-5)',\n 'var(--color-chart-6)',\n];\nconst MAX_CHART_SERIES = 4;\nconst MAX_CHART_POINTS = 60;\nconst MAX_TABLE_COLUMNS = 8;\nconst MAX_TABLE_ROWS = 100;\n\nfunction isIsoDateish(value: unknown): value is string {\n return typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}([T ]|$)/.test(value);\n}\n\n/** A scalar cell value as readable text — dates shortened to M/D, booleans spelled out, null/undefined blank. */\nfunction formatCell(value: unknown): string {\n if (value === null || value === undefined) return '—';\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n if (isIsoDateish(value)) {\n const date = new Date(value);\n if (!Number.isNaN(date.getTime())) {\n return `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(2, '0')}-${String(\n date.getUTCDate()\n ).padStart(2, '0')}`;\n }\n }\n if (typeof value === 'number') return Number.isInteger(value) ? String(value) : value.toFixed(2);\n return String(value);\n}\n\n/** The x-axis label for a chart point: a short date for date-ish values, the raw string/number otherwise. */\nfunction formatAxisLabel(value: unknown): string {\n if (isIsoDateish(value)) {\n const date = new Date(value as string);\n if (!Number.isNaN(date.getTime())) return `${date.getUTCMonth() + 1}/${date.getUTCDate()}`;\n }\n return value === null || value === undefined ? '' : String(value);\n}\n\nfunction tableColumns(rows: Row[], labelField: string | null): string[] {\n const seen = new Set<string>();\n const columns: string[] = [];\n if (labelField) {\n seen.add(labelField);\n columns.push(labelField);\n }\n for (const row of rows) {\n for (const [key] of scalarFields(row)) {\n if (seen.has(key)) continue;\n seen.add(key);\n columns.push(key);\n if (columns.length >= MAX_TABLE_COLUMNS) return columns;\n }\n }\n return columns;\n}\n\n/** The top-level result's own scalar fields, for a single-record source (PROJECT_STATUS, DELIVERY_KPIS, …). For\n * a bare array with no wrapper (WORK_ITEMS, RISKS, …) there is no top-level summary, so this returns `[]` and\n * the caller aggregates from rows instead. */\nfunction topLevelSummary(result: unknown): [string, string | number | boolean][] {\n if (!result || typeof result !== 'object' || Array.isArray(result)) return [];\n return scalarFields(result as Row);\n}\n\nfunction aggregateFromRows(rows: Row[]): { label: string; value: string }[] {\n const tiles: { label: string; value: string }[] = [\n { label: 'Count', value: String(rows.length) },\n ];\n const labelField = pickLabelField(rows);\n const numericFields = pickNumericFields(rows, labelField).slice(0, 4);\n for (const key of numericFields) {\n const total = rows.reduce((sum, row) => {\n const value = row[key];\n return sum + (typeof value === 'number' ? value : 0);\n }, 0);\n tiles.push({ label: `Total ${humanizeKey(key)}`, value: formatCell(total) });\n }\n return tiles;\n}\n\nfunction KpiTiles({ result }: { result: unknown }) {\n const summary = topLevelSummary(result);\n // extractRows/aggregateFromRows are cheap (object-key scans over an already in-memory JSON result), so this\n // is computed plainly rather than memoized — a `useMemo` here previously tripped\n // `react-hooks/preserve-manual-memoization` (the compiler could not reconcile it with its own inference).\n const tiles =\n summary.length > 0\n ? summary.map(([key, value]) => ({ label: humanizeKey(key), value: formatCell(value) }))\n : aggregateFromRows(extractRows(result));\n if (tiles.length === 0) {\n return <p className=\"text-sm text-muted-foreground\">No figures in this result.</p>;\n }\n return (\n <dl className=\"grid grid-cols-2 gap-3 sm:grid-cols-3\">\n {tiles.map((tile) => (\n <div key={tile.label} className=\"rounded-md border border-border bg-muted/40 p-2\">\n <dt className=\"text-[11px] text-muted-foreground\">{tile.label}</dt>\n <dd className=\"text-lg font-semibold tabular-nums\">{tile.value}</dd>\n </div>\n ))}\n </dl>\n );\n}\n\n/** The accessible text alternative every chart carries — a real `<table>` of the same rows, collapsed by\n * default (a sighted user who wants the chart isn't forced past it, but the data is one click away for\n * anyone who needs it: screen-reader users, anyone wanting exact values). */\nfunction DataTableDisclosure({\n rows,\n labelField,\n title,\n}: {\n rows: Row[];\n labelField: string | null;\n title: string;\n}) {\n const [open, setOpen] = useState(false);\n const panelId = useId();\n const columns = tableColumns(rows, labelField);\n return (\n <div className=\"mt-2\">\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline\"\n aria-expanded={open}\n aria-controls={panelId}\n onClick={() => setOpen((v) => !v)}\n >\n {open ? <ChevronDown className=\"h-3 w-3\" /> : <ChevronRight className=\"h-3 w-3\" />}\n View data as a table\n </button>\n {open && (\n <div id={panelId} className=\"mt-2 max-h-64 overflow-auto rounded-md border border-border\">\n <DataTable rows={rows} columns={columns} caption={`${title} — data`} />\n </div>\n )}\n </div>\n );\n}\n\nfunction DataTable({\n rows,\n columns,\n caption,\n}: {\n rows: Row[];\n columns: string[];\n caption: string;\n}) {\n const shown = rows.slice(0, MAX_TABLE_ROWS);\n return (\n <div>\n <Table>\n <TableCaption className=\"sr-only\">{caption}</TableCaption>\n <TableHeader>\n <TableRow>\n {columns.map((col) => (\n <TableHead key={col} scope=\"col\">\n {humanizeKey(col)}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {shown.map((row, index) => (\n // Rows carry no stable id across sources — the positional key is fine since this table is\n // read-only and re-rendered wholesale from a fresh run result each time, never reordered in place.\n <TableRow key={index}>\n {columns.map((col) => (\n <TableCell key={col}>{formatCell(row[col])}</TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n {rows.length > shown.length && (\n <p className=\"p-2 text-left text-xs text-muted-foreground\">\n Showing {shown.length} of {rows.length} rows.\n </p>\n )}\n </div>\n );\n}\n\nfunction ChartBody({ result, title }: { result: unknown; title: string }) {\n const rows = useMemo(() => extractRows(result), [result]);\n const labelField = useMemo(() => pickLabelField(rows), [rows]);\n const numericFields = useMemo(\n () => pickNumericFields(rows, labelField).slice(0, MAX_CHART_SERIES),\n [rows, labelField]\n );\n\n if (rows.length < 2 || numericFields.length === 0) {\n return (\n <div>\n <p className=\"mb-2 text-xs text-muted-foreground\">\n Not enough rows to chart — showing the figures instead.\n </p>\n <KpiTiles result={result} />\n </div>\n );\n }\n\n const chartData = rows.slice(0, MAX_CHART_POINTS).map((row, index) => {\n const point: Record<string, string | number> = {\n __label: labelField ? formatAxisLabel(row[labelField]) : String(index + 1),\n };\n for (const key of numericFields) {\n const value = row[key];\n point[key] = typeof value === 'number' ? value : 0;\n }\n return point;\n });\n\n return (\n <div>\n <ResponsiveContainer width=\"100%\" height={220}>\n <BarChart data={chartData}>\n <CartesianGrid strokeDasharray=\"3 3\" opacity={0.2} />\n <XAxis dataKey=\"__label\" tick={{ fontSize: 11 }} />\n <YAxis tick={{ fontSize: 11 }} allowDecimals={false} />\n <Tooltip />\n {numericFields.length > 1 && <Legend wrapperStyle={{ fontSize: 12 }} />}\n {numericFields.map((key, index) => (\n <Bar\n key={key}\n dataKey={key}\n name={humanizeKey(key)}\n fill={CHART_COLORS[index % CHART_COLORS.length]}\n />\n ))}\n </BarChart>\n </ResponsiveContainer>\n {rows.length > MAX_CHART_POINTS && (\n <p className=\"mt-1 text-[11px] text-muted-foreground\">\n Showing the first {MAX_CHART_POINTS} of {rows.length} rows.\n </p>\n )}\n <DataTableDisclosure rows={rows} labelField={labelField} title={title} />\n </div>\n );\n}\n\nfunction TableBodyContent({ result }: { result: unknown }) {\n const rows = useMemo(() => extractRows(result), [result]);\n const labelField = useMemo(() => pickLabelField(rows), [rows]);\n if (rows.length === 0) {\n return <p className=\"text-sm text-muted-foreground\">No rows in this result.</p>;\n }\n const columns = tableColumns(rows, labelField);\n return (\n <div className=\"max-h-80 overflow-auto rounded-md border border-border\">\n <DataTable rows={rows} columns={columns} caption=\"Widget data\" />\n </div>\n );\n}\n\nexport function ReportWidgetRenderer({\n widget,\n runResult,\n}: {\n widget: ReportWidget;\n runResult: WidgetRunResult | undefined;\n}) {\n if (widget.type === 'TEXT') {\n return (\n <div className=\"flex h-full items-center border-b border-border pb-1\">\n <h3 className=\"text-sm font-semibold uppercase tracking-wide text-muted-foreground\">\n {widget.title}\n </h3>\n </div>\n );\n }\n\n if (!runResult) {\n return (\n <p className=\"text-sm text-muted-foreground\">\n Not run yet — choose “Run now” above.\n </p>\n );\n }\n\n if (runResult.status === 'FORBIDDEN') {\n return (\n <div className=\"flex items-start gap-2 text-sm text-muted-foreground\" role=\"status\">\n <Lock className=\"mt-0.5 h-4 w-4 shrink-0\" aria-hidden={true} />\n <div>\n <p>You do not have access to this data.</p>\n {runResult.message && <p className=\"text-xs\">{runResult.message}</p>}\n </div>\n </div>\n );\n }\n\n if (runResult.status === 'ERROR') {\n return (\n <div className=\"flex items-start gap-2 text-sm text-destructive\" role=\"alert\">\n <AlertTriangle className=\"mt-0.5 h-4 w-4 shrink-0\" aria-hidden={true} />\n <p>{runResult.message ?? 'This widget could not be generated.'}</p>\n </div>\n );\n }\n\n switch (widget.type) {\n case 'KPI':\n return <KpiTiles result={runResult.result} />;\n case 'CHART':\n return <ChartBody result={runResult.result} title={widget.title} />;\n case 'TABLE':\n return <TableBodyContent result={runResult.result} />;\n default:\n return null;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchedulesPanel.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/reports/SchedulesPanel.tsx"],"names":[],"mappings":"AAqZA,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,2CAwHhE"}
|