@burdenoff/microfe-planmagnet 2026.930.24 → 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.
Files changed (318) hide show
  1. package/dist/_virtual/__vite-browser-external.js +9 -0
  2. package/dist/_virtual/__vite-browser-external.js.map +1 -0
  3. package/dist/_virtual/_rolldown/runtime.js +5 -2
  4. package/dist/index.js +3 -1
  5. package/dist/node_modules/fflate/esm/browser.js +554 -0
  6. package/dist/node_modules/fflate/esm/browser.js.map +1 -0
  7. package/dist/node_modules/jszip/dist/jszip.min.js +3038 -0
  8. package/dist/node_modules/jszip/dist/jszip.min.js.map +1 -0
  9. package/dist/node_modules/pptxgenjs/dist/pptxgen.es.js +2151 -0
  10. package/dist/node_modules/pptxgenjs/dist/pptxgen.es.js.map +1 -0
  11. package/dist/node_modules/write-excel-file/browser/index.js +3 -0
  12. package/dist/node_modules/write-excel-file/modules/export/convertFileContentToUint8ArrayBrowser.js +13 -0
  13. package/dist/node_modules/write-excel-file/modules/export/convertFileContentToUint8ArrayBrowser.js.map +1 -0
  14. package/dist/node_modules/write-excel-file/modules/export/convertFilesContentToUint8Arrays.js +21 -0
  15. package/dist/node_modules/write-excel-file/modules/export/convertFilesContentToUint8Arrays.js.map +1 -0
  16. package/dist/node_modules/write-excel-file/modules/export/downloadBlob.js +11 -0
  17. package/dist/node_modules/write-excel-file/modules/export/downloadBlob.js.map +1 -0
  18. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileBrowser.js +23 -0
  19. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileBrowser.js.map +1 -0
  20. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileUniversal.js +22 -0
  21. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileUniversal.js.map +1 -0
  22. package/dist/node_modules/write-excel-file/modules/getSheetData/getSheetData.js +18 -0
  23. package/dist/node_modules/write-excel-file/modules/getSheetData/getSheetData.js.map +1 -0
  24. package/dist/node_modules/write-excel-file/modules/xlsx/features/conditionalFormatting.js +131 -0
  25. package/dist/node_modules/write-excel-file/modules/xlsx/features/conditionalFormatting.js.map +1 -0
  26. package/dist/node_modules/write-excel-file/modules/xlsx/features/images.js +188 -0
  27. package/dist/node_modules/write-excel-file/modules/xlsx/features/images.js.map +1 -0
  28. package/dist/node_modules/write-excel-file/modules/xlsx/features/stickyRowsOrColumns.js +52 -0
  29. package/dist/node_modules/write-excel-file/modules/xlsx/features/stickyRowsOrColumns.js.map +1 -0
  30. package/dist/node_modules/write-excel-file/modules/xlsx/files/_Content_Types_.xml.js +18 -0
  31. package/dist/node_modules/write-excel-file/modules/xlsx/files/_Content_Types_.xml.js.map +1 -0
  32. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.js +18 -0
  33. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.js.map +1 -0
  34. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.rels.js +17 -0
  35. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.rels.js.map +1 -0
  36. package/dist/node_modules/write-excel-file/modules/xlsx/files/rels.js +11 -0
  37. package/dist/node_modules/write-excel-file/modules/xlsx/files/rels.js.map +1 -0
  38. package/dist/node_modules/write-excel-file/modules/xlsx/files/sharedStrings.xml.js +42 -0
  39. package/dist/node_modules/write-excel-file/modules/xlsx/files/sharedStrings.xml.js.map +1 -0
  40. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/cell.js +102 -0
  41. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/cell.js.map +1 -0
  42. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/column.js +17 -0
  43. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/column.js.map +1 -0
  44. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/columns.js +15 -0
  45. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/columns.js.map +1 -0
  46. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/drawingReference.js +8 -0
  47. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/drawingReference.js.map +1 -0
  48. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/helpers/getCellStyleProperties.js +71 -0
  49. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/helpers/getCellStyleProperties.js.map +1 -0
  50. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/mergedCellsDescription.js +56 -0
  51. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/mergedCellsDescription.js.map +1 -0
  52. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageMargins.js +15 -0
  53. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageMargins.js.map +1 -0
  54. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageSetup.js +13 -0
  55. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageSetup.js.map +1 -0
  56. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/processMergedCells.js +44 -0
  57. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/processMergedCells.js.map +1 -0
  58. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/row.js +123 -0
  59. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/row.js.map +1 -0
  60. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheet.xml.js +41 -0
  61. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheet.xml.js.map +1 -0
  62. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetData.js +11 -0
  63. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetData.js.map +1 -0
  64. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetViews.js +17 -0
  65. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetViews.js.map +1 -0
  66. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml.rels.js +20 -0
  67. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml.rels.js.map +1 -0
  68. package/dist/node_modules/write-excel-file/modules/xlsx/files/styles.xml.js +77 -0
  69. package/dist/node_modules/write-excel-file/modules/xlsx/files/styles.xml.js.map +1 -0
  70. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.js +22 -0
  71. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.js.map +1 -0
  72. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.rels.js +13 -0
  73. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.rels.js.map +1 -0
  74. package/dist/node_modules/write-excel-file/modules/xlsx/generateXlsxFileContents.js +242 -0
  75. package/dist/node_modules/write-excel-file/modules/xlsx/generateXlsxFileContents.js.map +1 -0
  76. package/dist/node_modules/write-excel-file/modules/xlsx/getFeatures.js +29 -0
  77. package/dist/node_modules/write-excel-file/modules/xlsx/getFeatures.js.map +1 -0
  78. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/convertDateToSerialNumber.js +9 -0
  79. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/convertDateToSerialNumber.js.map +1 -0
  80. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getAdditionalContent.js +42 -0
  81. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getAdditionalContent.js.map +1 -0
  82. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getElementXml.js +43 -0
  83. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getElementXml.js.map +1 -0
  84. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getWrittenFiles.js +93 -0
  85. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getWrittenFiles.js.map +1 -0
  86. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/transformContent.js +39 -0
  87. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/transformContent.js.map +1 -0
  88. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getAlignmentXml.js +17 -0
  89. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getAlignmentXml.js.map +1 -0
  90. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getBorderXml.js +29 -0
  91. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getBorderXml.js.map +1 -0
  92. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getCellAddress.js +14 -0
  93. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getCellAddress.js.map +1 -0
  94. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFileExtensionForContentType.js +11 -0
  95. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFileExtensionForContentType.js.map +1 -0
  96. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFillXml.js +14 -0
  97. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFillXml.js.map +1 -0
  98. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFontXml.js +12 -0
  99. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFontXml.js.map +1 -0
  100. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getOrderOfSiblings.js +24 -0
  101. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getOrderOfSiblings.js.map +1 -0
  102. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getXlsxColorForHexColor.js +9 -0
  103. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getXlsxColorForHexColor.js.map +1 -0
  104. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasAlignment.js +9 -0
  105. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasAlignment.js.map +1 -0
  106. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasBorder.js +9 -0
  107. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasBorder.js.map +1 -0
  108. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFill.js +9 -0
  109. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFill.js.map +1 -0
  110. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFont.js +9 -0
  111. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFont.js.map +1 -0
  112. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isCellObject.js +9 -0
  113. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isCellObject.js.map +1 -0
  114. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isObject.js +9 -0
  115. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isObject.js.map +1 -0
  116. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/orderOfSiblings.js +27 -0
  117. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/orderOfSiblings.js.map +1 -0
  118. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSharedStrings.js +17 -0
  119. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSharedStrings.js.map +1 -0
  120. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSheets.js +74 -0
  121. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSheets.js.map +1 -0
  122. package/dist/node_modules/write-excel-file/modules/xlsx/initializeStyles.js +138 -0
  123. package/dist/node_modules/write-excel-file/modules/xlsx/initializeStyles.js.map +1 -0
  124. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetData.js +40 -0
  125. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetData.js.map +1 -0
  126. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetName.js +11 -0
  127. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetName.js.map +1 -0
  128. package/dist/node_modules/write-excel-file/modules/xml/appendMarkupInsideElement.js +9 -0
  129. package/dist/node_modules/write-excel-file/modules/xml/appendMarkupInsideElement.js.map +1 -0
  130. package/dist/node_modules/write-excel-file/modules/xml/applyEnclosingElementOffset.js +9 -0
  131. package/dist/node_modules/write-excel-file/modules/xml/applyEnclosingElementOffset.js.map +1 -0
  132. package/dist/node_modules/write-excel-file/modules/xml/escapeXmlSpecialCharacters.js +12 -0
  133. package/dist/node_modules/write-excel-file/modules/xml/escapeXmlSpecialCharacters.js.map +1 -0
  134. package/dist/node_modules/write-excel-file/modules/xml/findElement.js +12 -0
  135. package/dist/node_modules/write-excel-file/modules/xml/findElement.js.map +1 -0
  136. package/dist/node_modules/write-excel-file/modules/xml/findElementInsideElement.js +12 -0
  137. package/dist/node_modules/write-excel-file/modules/xml/findElementInsideElement.js.map +1 -0
  138. package/dist/node_modules/write-excel-file/modules/xml/findElementsNonRecursive_.js +41 -0
  139. package/dist/node_modules/write-excel-file/modules/xml/findElementsNonRecursive_.js.map +1 -0
  140. package/dist/node_modules/write-excel-file/modules/xml/getAttributesString.js +14 -0
  141. package/dist/node_modules/write-excel-file/modules/xml/getAttributesString.js.map +1 -0
  142. package/dist/node_modules/write-excel-file/modules/xml/getChildElements.js +42 -0
  143. package/dist/node_modules/write-excel-file/modules/xml/getChildElements.js.map +1 -0
  144. package/dist/node_modules/write-excel-file/modules/xml/getClosingTagMarkup.js +8 -0
  145. package/dist/node_modules/write-excel-file/modules/xml/getClosingTagMarkup.js.map +1 -0
  146. package/dist/node_modules/write-excel-file/modules/xml/getMarkupInsideElement.js +8 -0
  147. package/dist/node_modules/write-excel-file/modules/xml/getMarkupInsideElement.js.map +1 -0
  148. package/dist/node_modules/write-excel-file/modules/xml/getOpeningTagMarkup.js +9 -0
  149. package/dist/node_modules/write-excel-file/modules/xml/getOpeningTagMarkup.js.map +1 -0
  150. package/dist/node_modules/write-excel-file/modules/xml/getSelfClosingTagMarkup.js +9 -0
  151. package/dist/node_modules/write-excel-file/modules/xml/getSelfClosingTagMarkup.js.map +1 -0
  152. package/dist/node_modules/write-excel-file/modules/xml/insertElementMarkupAccordingToOrderOfSiblings.js +64 -0
  153. package/dist/node_modules/write-excel-file/modules/xml/insertElementMarkupAccordingToOrderOfSiblings.js.map +1 -0
  154. package/dist/node_modules/write-excel-file/modules/xml/prependMarkupInsideElement.js +9 -0
  155. package/dist/node_modules/write-excel-file/modules/xml/prependMarkupInsideElement.js.map +1 -0
  156. package/dist/node_modules/write-excel-file/modules/xml/removeInvalidXmlCharacters.js +9 -0
  157. package/dist/node_modules/write-excel-file/modules/xml/removeInvalidXmlCharacters.js.map +1 -0
  158. package/dist/node_modules/write-excel-file/modules/xml/replaceElement.js +8 -0
  159. package/dist/node_modules/write-excel-file/modules/xml/replaceElement.js.map +1 -0
  160. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeName.js +10 -0
  161. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeName.js.map +1 -0
  162. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeValue.js +11 -0
  163. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeValue.js.map +1 -0
  164. package/dist/node_modules/write-excel-file/modules/xml/sanitizeTextContent.js +11 -0
  165. package/dist/node_modules/write-excel-file/modules/xml/sanitizeTextContent.js.map +1 -0
  166. package/dist/node_modules/write-excel-file/modules/xml/setMarkupInsideElement.js +8 -0
  167. package/dist/node_modules/write-excel-file/modules/xml/setMarkupInsideElement.js.map +1 -0
  168. package/dist/node_modules/write-excel-file/modules/zip/zipToArrayBuffer.js +18 -0
  169. package/dist/node_modules/write-excel-file/modules/zip/zipToArrayBuffer.js.map +1 -0
  170. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
  171. package/dist/planmagnet/PlanMagnetRoot.js +154 -147
  172. package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
  173. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  174. package/dist/planmagnet/PlanMagnetRoutes.js +122 -106
  175. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  176. package/dist/planmagnet/comments/CommentThread.d.ts +8 -1
  177. package/dist/planmagnet/comments/CommentThread.d.ts.map +1 -1
  178. package/dist/planmagnet/comments/CommentThread.js +188 -181
  179. package/dist/planmagnet/comments/CommentThread.js.map +1 -1
  180. package/dist/planmagnet/comments/TargetComments.d.ts +10 -2
  181. package/dist/planmagnet/comments/TargetComments.d.ts.map +1 -1
  182. package/dist/planmagnet/comments/TargetComments.js +10 -8
  183. package/dist/planmagnet/comments/TargetComments.js.map +1 -1
  184. package/dist/planmagnet/comments/WorkItemComments.d.ts +7 -1
  185. package/dist/planmagnet/comments/WorkItemComments.d.ts.map +1 -1
  186. package/dist/planmagnet/comments/WorkItemComments.js +5 -4
  187. package/dist/planmagnet/comments/WorkItemComments.js.map +1 -1
  188. package/dist/planmagnet/controls/Pickers.d.ts +10 -0
  189. package/dist/planmagnet/controls/Pickers.d.ts.map +1 -1
  190. package/dist/planmagnet/controls/Pickers.js +75 -27
  191. package/dist/planmagnet/controls/Pickers.js.map +1 -1
  192. package/dist/planmagnet/discussion/WorkItemDiscussionPanel.d.ts +8 -0
  193. package/dist/planmagnet/discussion/WorkItemDiscussionPanel.d.ts.map +1 -0
  194. package/dist/planmagnet/discussion/WorkItemDiscussionPanel.js +217 -0
  195. package/dist/planmagnet/discussion/WorkItemDiscussionPanel.js.map +1 -0
  196. package/dist/planmagnet/docs/DocDiffView.d.ts +26 -0
  197. package/dist/planmagnet/docs/DocDiffView.d.ts.map +1 -0
  198. package/dist/planmagnet/docs/DocDiffView.js +52 -0
  199. package/dist/planmagnet/docs/DocDiffView.js.map +1 -0
  200. package/dist/planmagnet/docs/DocSuggestionsPanel.d.ts +13 -0
  201. package/dist/planmagnet/docs/DocSuggestionsPanel.d.ts.map +1 -0
  202. package/dist/planmagnet/docs/DocSuggestionsPanel.js +308 -0
  203. package/dist/planmagnet/docs/DocSuggestionsPanel.js.map +1 -0
  204. package/dist/planmagnet/docs/DocVersionCompare.d.ts +7 -0
  205. package/dist/planmagnet/docs/DocVersionCompare.d.ts.map +1 -0
  206. package/dist/planmagnet/docs/DocVersionCompare.js +105 -0
  207. package/dist/planmagnet/docs/DocVersionCompare.js.map +1 -0
  208. package/dist/planmagnet/hooks/usePresence.d.ts +39 -0
  209. package/dist/planmagnet/hooks/usePresence.d.ts.map +1 -0
  210. package/dist/planmagnet/hooks/usePresence.js +146 -0
  211. package/dist/planmagnet/hooks/usePresence.js.map +1 -0
  212. package/dist/planmagnet/index.d.ts +2 -0
  213. package/dist/planmagnet/index.d.ts.map +1 -1
  214. package/dist/planmagnet/index.js +2 -0
  215. package/dist/planmagnet/links/CodeLinksPanel.d.ts +22 -0
  216. package/dist/planmagnet/links/CodeLinksPanel.d.ts.map +1 -0
  217. package/dist/planmagnet/links/CodeLinksPanel.js +94 -0
  218. package/dist/planmagnet/links/CodeLinksPanel.js.map +1 -0
  219. package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts.map +1 -1
  220. package/dist/planmagnet/pages/DocsDocDetailPagePage.js +488 -217
  221. package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
  222. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.d.ts.map +1 -1
  223. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js +136 -130
  224. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js.map +1 -1
  225. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
  226. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +205 -196
  227. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
  228. package/dist/planmagnet/pages/ReportsCreateReportPagePage.d.ts +6 -0
  229. package/dist/planmagnet/pages/ReportsCreateReportPagePage.d.ts.map +1 -1
  230. package/dist/planmagnet/pages/ReportsCreateReportPagePage.js +5 -177
  231. package/dist/planmagnet/pages/ReportsCreateReportPagePage.js.map +1 -1
  232. package/dist/planmagnet/pages/ReportsEditReportPagePage.d.ts +3 -0
  233. package/dist/planmagnet/pages/ReportsEditReportPagePage.d.ts.map +1 -0
  234. package/dist/planmagnet/pages/ReportsEditReportPagePage.js +15 -0
  235. package/dist/planmagnet/pages/ReportsEditReportPagePage.js.map +1 -0
  236. package/dist/planmagnet/pages/ReportsReportPagePage.d.ts +7 -0
  237. package/dist/planmagnet/pages/ReportsReportPagePage.d.ts.map +1 -0
  238. package/dist/planmagnet/pages/ReportsReportPagePage.js +226 -0
  239. package/dist/planmagnet/pages/ReportsReportPagePage.js.map +1 -0
  240. package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts.map +1 -1
  241. package/dist/planmagnet/pages/ReportsReportsPagePage.js +224 -496
  242. package/dist/planmagnet/pages/ReportsReportsPagePage.js.map +1 -1
  243. package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
  244. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +194 -160
  245. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
  246. package/dist/planmagnet/presence/PresenceAvatars.d.ts +16 -0
  247. package/dist/planmagnet/presence/PresenceAvatars.d.ts.map +1 -0
  248. package/dist/planmagnet/presence/PresenceAvatars.js +56 -0
  249. package/dist/planmagnet/presence/PresenceAvatars.js.map +1 -0
  250. package/dist/planmagnet/reports/ExportMenu.d.ts +9 -0
  251. package/dist/planmagnet/reports/ExportMenu.d.ts.map +1 -0
  252. package/dist/planmagnet/reports/ExportMenu.js +116 -0
  253. package/dist/planmagnet/reports/ExportMenu.js.map +1 -0
  254. package/dist/planmagnet/reports/PrintReportView.d.ts +24 -0
  255. package/dist/planmagnet/reports/PrintReportView.d.ts.map +1 -0
  256. package/dist/planmagnet/reports/PrintReportView.js +75 -0
  257. package/dist/planmagnet/reports/PrintReportView.js.map +1 -0
  258. package/dist/planmagnet/reports/ReportBuilderCanvas.d.ts +8 -0
  259. package/dist/planmagnet/reports/ReportBuilderCanvas.d.ts.map +1 -0
  260. package/dist/planmagnet/reports/ReportBuilderCanvas.js +261 -0
  261. package/dist/planmagnet/reports/ReportBuilderCanvas.js.map +1 -0
  262. package/dist/planmagnet/reports/ReportBuilderPage.d.ts +5 -0
  263. package/dist/planmagnet/reports/ReportBuilderPage.d.ts.map +1 -0
  264. package/dist/planmagnet/reports/ReportBuilderPage.js +198 -0
  265. package/dist/planmagnet/reports/ReportBuilderPage.js.map +1 -0
  266. package/dist/planmagnet/reports/ReportRunHistory.d.ts +8 -0
  267. package/dist/planmagnet/reports/ReportRunHistory.d.ts.map +1 -0
  268. package/dist/planmagnet/reports/ReportRunHistory.js +63 -0
  269. package/dist/planmagnet/reports/ReportRunHistory.js.map +1 -0
  270. package/dist/planmagnet/reports/ReportWidgetRenderer.d.ts +7 -0
  271. package/dist/planmagnet/reports/ReportWidgetRenderer.d.ts.map +1 -0
  272. package/dist/planmagnet/reports/ReportWidgetRenderer.js +251 -0
  273. package/dist/planmagnet/reports/ReportWidgetRenderer.js.map +1 -0
  274. package/dist/planmagnet/reports/SchedulesPanel.d.ts +4 -0
  275. package/dist/planmagnet/reports/SchedulesPanel.d.ts.map +1 -0
  276. package/dist/planmagnet/reports/SchedulesPanel.js +457 -0
  277. package/dist/planmagnet/reports/SchedulesPanel.js.map +1 -0
  278. package/dist/planmagnet/reports/ShareDialog.d.ts +5 -0
  279. package/dist/planmagnet/reports/ShareDialog.d.ts.map +1 -0
  280. package/dist/planmagnet/reports/ShareDialog.js +234 -0
  281. package/dist/planmagnet/reports/ShareDialog.js.map +1 -0
  282. package/dist/planmagnet/reports/SharedReportPage.d.ts +4 -0
  283. package/dist/planmagnet/reports/SharedReportPage.d.ts.map +1 -0
  284. package/dist/planmagnet/reports/SharedReportPage.js +180 -0
  285. package/dist/planmagnet/reports/SharedReportPage.js.map +1 -0
  286. package/dist/planmagnet/reports/WidgetEditorDialog.d.ts +10 -0
  287. package/dist/planmagnet/reports/WidgetEditorDialog.d.ts.map +1 -0
  288. package/dist/planmagnet/reports/WidgetEditorDialog.js +220 -0
  289. package/dist/planmagnet/reports/WidgetEditorDialog.js.map +1 -0
  290. package/dist/planmagnet/reports/reportExportPptx.d.ts +4 -0
  291. package/dist/planmagnet/reports/reportExportPptx.d.ts.map +1 -0
  292. package/dist/planmagnet/reports/reportExportPptx.js +118 -0
  293. package/dist/planmagnet/reports/reportExportPptx.js.map +1 -0
  294. package/dist/planmagnet/reports/reportExportXlsx.d.ts +4 -0
  295. package/dist/planmagnet/reports/reportExportXlsx.d.ts.map +1 -0
  296. package/dist/planmagnet/reports/reportExportXlsx.js +42 -0
  297. package/dist/planmagnet/reports/reportExportXlsx.js.map +1 -0
  298. package/dist/planmagnet/reports/reportGraphql.d.ts +28 -0
  299. package/dist/planmagnet/reports/reportGraphql.d.ts.map +1 -0
  300. package/dist/planmagnet/reports/reportGraphql.js +360 -0
  301. package/dist/planmagnet/reports/reportGraphql.js.map +1 -0
  302. package/dist/planmagnet/reports/reportModel.d.ts +198 -0
  303. package/dist/planmagnet/reports/reportModel.d.ts.map +1 -0
  304. package/dist/planmagnet/reports/reportModel.js +328 -0
  305. package/dist/planmagnet/reports/reportModel.js.map +1 -0
  306. package/dist/planmagnet/reports/sharedReportRoute.d.ts +14 -0
  307. package/dist/planmagnet/reports/sharedReportRoute.d.ts.map +1 -0
  308. package/dist/planmagnet/reports/sharedReportRoute.js +9 -0
  309. package/dist/planmagnet/reports/sharedReportRoute.js.map +1 -0
  310. package/dist/planmagnet/utils/graphqlErrors.d.ts +6 -0
  311. package/dist/planmagnet/utils/graphqlErrors.d.ts.map +1 -1
  312. package/dist/planmagnet/utils/graphqlErrors.js +5 -2
  313. package/dist/planmagnet/utils/graphqlErrors.js.map +1 -1
  314. package/dist/planmagnet/utils/lineDiff.d.ts +21 -0
  315. package/dist/planmagnet/utils/lineDiff.d.ts.map +1 -0
  316. package/dist/planmagnet/utils/lineDiff.js +36 -0
  317. package/dist/planmagnet/utils/lineDiff.js.map +1 -0
  318. 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 &ldquo;Run now&rdquo; 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,4 @@
1
+ export declare function SchedulesPanel({ reportId }: {
2
+ reportId: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=SchedulesPanel.d.ts.map
@@ -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"}