@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,146 @@
1
+ import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
+ import { useCallback as t, useEffect as n, useMemo as r, useRef as i, useState as a } from "react";
3
+ import { gql as o } from "@apollo/client";
4
+ import { useApolloClient as s, useQuery as c, useSubscription as l } from "@apollo/client/react";
5
+ //#region src/planmagnet/hooks/usePresence.ts
6
+ var u = o`
7
+ query PlanmagnetPresenceList($targetId: ID!, $targetType: PlanmagnetPresenceTargetType!) {
8
+ planmagnetPresence(targetId: $targetId, targetType: $targetType) {
9
+ actorId
10
+ lastSeenAt
11
+ typing
12
+ }
13
+ }
14
+ `, d = o`
15
+ subscription PlanmagnetOnPresenceChangedFeed(
16
+ $workspaceId: ID!
17
+ $targetId: ID!
18
+ $targetType: PlanmagnetPresenceTargetType!
19
+ ) {
20
+ planmagnetOnPresenceChanged(
21
+ workspaceId: $workspaceId
22
+ targetId: $targetId
23
+ targetType: $targetType
24
+ ) {
25
+ actorId
26
+ at
27
+ kind
28
+ targetId
29
+ targetType
30
+ }
31
+ }
32
+ `, f = o`
33
+ mutation PlanmagnetPresenceHeartbeatSend(
34
+ $targetId: ID!
35
+ $targetType: PlanmagnetPresenceTargetType!
36
+ $typing: Boolean
37
+ ) {
38
+ planmagnetPresenceHeartbeat(targetId: $targetId, targetType: $targetType, typing: $typing)
39
+ }
40
+ `, p = o`
41
+ mutation PlanmagnetPresenceLeaveSend($targetId: ID!, $targetType: PlanmagnetPresenceTargetType!) {
42
+ planmagnetPresenceLeave(targetId: $targetId, targetType: $targetType)
43
+ }
44
+ `, m = 15e3, h = 5e3, g = 3e4, _ = 8e3, v = () => typeof document < "u" && document.visibilityState === "hidden";
45
+ function y(o, y) {
46
+ let { workspaceId: b, currentUser: x } = e(), S = s(), C = !!b && !!y, { data: w, refetch: T } = c(u, {
47
+ variables: {
48
+ targetId: y ?? "",
49
+ targetType: o
50
+ },
51
+ skip: !C,
52
+ fetchPolicy: "cache-and-network"
53
+ }), E = `${o}:${y ?? ""}`, [D, O] = a(!1), [k, A] = a(E);
54
+ E !== k && (A(E), O(!1)), l(d, {
55
+ variables: {
56
+ workspaceId: b ?? "",
57
+ targetId: y ?? "",
58
+ targetType: o
59
+ },
60
+ skip: !C,
61
+ onData: () => {
62
+ T().catch(() => void 0);
63
+ },
64
+ onError: (e) => {
65
+ console.debug("[usePresence] subscription unavailable, falling back to polling:", {
66
+ targetType: o,
67
+ message: e instanceof Error ? e.message : String(e)
68
+ }), O(!0);
69
+ }
70
+ }), n(() => {
71
+ if (!C || !D) return;
72
+ let e = setInterval(() => {
73
+ v() || T().catch(() => void 0);
74
+ }, g);
75
+ return () => clearInterval(e);
76
+ }, [
77
+ C,
78
+ D,
79
+ T
80
+ ]);
81
+ let j = i(0);
82
+ n(() => {
83
+ if (!C || !y) return;
84
+ let e = () => {
85
+ if (v()) return;
86
+ let e = Date.now() - j.current < _;
87
+ S.mutate({
88
+ mutation: f,
89
+ variables: {
90
+ targetId: y,
91
+ targetType: o,
92
+ typing: e
93
+ }
94
+ }).catch(() => void 0);
95
+ };
96
+ e();
97
+ let t = setInterval(e, m);
98
+ return () => clearInterval(t);
99
+ }, [
100
+ C,
101
+ y,
102
+ o,
103
+ S
104
+ ]), n(() => {
105
+ if (!(!C || !y)) return () => {
106
+ S.mutate({
107
+ mutation: p,
108
+ variables: {
109
+ targetId: y,
110
+ targetType: o
111
+ }
112
+ }).catch(() => void 0);
113
+ };
114
+ }, [
115
+ C,
116
+ y,
117
+ o,
118
+ S
119
+ ]);
120
+ let M = t(() => {
121
+ if (!C || !y) return;
122
+ let e = Date.now();
123
+ e - j.current < h || (j.current = e, S.mutate({
124
+ mutation: f,
125
+ variables: {
126
+ targetId: y,
127
+ targetType: o,
128
+ typing: !0
129
+ }
130
+ }).catch(() => void 0));
131
+ }, [
132
+ C,
133
+ y,
134
+ o,
135
+ S
136
+ ]), N = x?.id, P = r(() => w?.planmagnetPresence ?? [], [w]), F = r(() => P.filter((e) => e.actorId !== N), [P, N]);
137
+ return {
138
+ others: F,
139
+ typingActorIds: r(() => F.filter((e) => e.typing).map((e) => e.actorId), [F]),
140
+ notifyTyping: M
141
+ };
142
+ }
143
+ //#endregion
144
+ export { y as usePresence };
145
+
146
+ //# sourceMappingURL=usePresence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePresence.js","names":[],"sources":["../../../src/planmagnet/hooks/usePresence.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useApolloClient, useQuery, useSubscription } from '@apollo/client/react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\n/**\n * Live presence + typing on one target (CWF-24): who else is here, and who of them is typing right now.\n *\n * Heartbeat every 15 s while the tab is visible (paused while hidden — no point telling the server \"still here\"\n * from a backgrounded tab, and it would only cost quota for nothing anyone can see), an explicit\n * `planmagnetPresenceLeave` on unmount or when the target itself changes (closing this view, not merely going\n * idle — same distinction the mutation's own doc comment draws), and a typing heartbeat `notifyTyping()` callers\n * fire on every keystroke, throttled here to at most one per 5 s so a whole paragraph does not turn into a burst\n * of writes (the server also rate-limits to one heartbeat per 5s per actor+target, so this throttle is a client-\n * side courtesy, not the actual gate). There is no explicit \"stopped typing\" call — `PlanmagnetPresenceEntry.typing`\n * already goes stale 8 s after the last `typing: true` heartbeat (see that field's own schema doc comment), so a\n * caller that stops typing simply stops calling `notifyTyping()` and the flag lapses on its own.\n *\n * The live list comes from `planmagnetPresence`, kept fresh by `planmagnetOnPresenceChanged` — a THIN event (kind\n * + actorId only, CWF-24's own house rule against ever trusting a real-time payload as data) that triggers a\n * re-read under the caller's own permissions, same discipline `useLiveRefresh` uses elsewhere in this MFE. If the\n * subscription errors (including the expected \"no SSE transport\" case in a standalone/Storybook build — see\n * `useLiveRefresh`'s note on `PlanMagnetProvider`), this degrades to a 30 s poll rather than going silent.\n *\n * Heartbeat/leave/typing calls are fire-and-forget: presence is a nice-to-have, never something a refusal here\n * should surface as a page error, so failures are swallowed rather than thrown (mirroring how `useLiveRefresh`\n * treats a degraded subscription as expected, not exceptional).\n */\n\nexport type PlanmagnetPresenceTargetType = 'WORK_ITEM' | 'DOC' | 'ROADMAP' | 'PROJECT';\n\nexport interface PresenceOther {\n actorId: string;\n lastSeenAt: string;\n typing: boolean;\n}\n\nexport interface UsePresenceResult {\n /** Other actors present on this target within the last 30 s — the caller (self) is already excluded. */\n others: PresenceOther[];\n /** Ids of OTHER actors currently typing (fresh within the last 8 s, per the server) — self excluded. */\n typingActorIds: string[];\n /** Call on every keystroke in a composer for this target; throttled internally to one heartbeat per 5 s. */\n notifyTyping: () => void;\n}\n\nconst PRESENCE_QUERY = gql`\n query PlanmagnetPresenceList($targetId: ID!, $targetType: PlanmagnetPresenceTargetType!) {\n planmagnetPresence(targetId: $targetId, targetType: $targetType) {\n actorId\n lastSeenAt\n typing\n }\n }\n`;\n\nconst ON_PRESENCE_CHANGED = gql`\n subscription PlanmagnetOnPresenceChangedFeed(\n $workspaceId: ID!\n $targetId: ID!\n $targetType: PlanmagnetPresenceTargetType!\n ) {\n planmagnetOnPresenceChanged(\n workspaceId: $workspaceId\n targetId: $targetId\n targetType: $targetType\n ) {\n actorId\n at\n kind\n targetId\n targetType\n }\n }\n`;\n\nconst HEARTBEAT = gql`\n mutation PlanmagnetPresenceHeartbeatSend(\n $targetId: ID!\n $targetType: PlanmagnetPresenceTargetType!\n $typing: Boolean\n ) {\n planmagnetPresenceHeartbeat(targetId: $targetId, targetType: $targetType, typing: $typing)\n }\n`;\n\nconst LEAVE = gql`\n mutation PlanmagnetPresenceLeaveSend($targetId: ID!, $targetType: PlanmagnetPresenceTargetType!) {\n planmagnetPresenceLeave(targetId: $targetId, targetType: $targetType)\n }\n`;\n\nconst HEARTBEAT_INTERVAL_MS = 15_000;\nconst TYPING_MIN_INTERVAL_MS = 5_000;\nconst POLL_INTERVAL_MS = 30_000;\n// Matches `PlanmagnetPresenceEntry.typing`'s own freshness window (graphql/wspace.graphql): the server derives\n// `typing` from whichever heartbeat landed MOST RECENTLY, not from which one said `typing: true` most recently —\n// so the plain \"still here\" heartbeat below must keep echoing `true` for as long as a typing heartbeat would still\n// read as fresh server-side, or it clobbers the flag out from under an actor who never stopped typing.\nconst TYPING_FRESH_MS = 8_000;\n\nconst hidden = () => typeof document !== 'undefined' && document.visibilityState === 'hidden';\n\nexport function usePresence(\n targetType: PlanmagnetPresenceTargetType,\n targetId: string | null | undefined\n): UsePresenceResult {\n const { workspaceId, currentUser } = usePlanMagnet();\n const client = useApolloClient();\n const ready = Boolean(workspaceId) && Boolean(targetId);\n\n const { data, refetch } = useQuery<{ planmagnetPresence: PresenceOther[] }>(PRESENCE_QUERY, {\n variables: { targetId: targetId ?? '', targetType },\n skip: !ready,\n fetchPolicy: 'cache-and-network',\n });\n\n // Degrades to polling (below) the moment the subscription errors — including the \"no SSE transport configured\"\n // standalone/Storybook case `useLiveRefresh` documents; either way presence must keep working, just less live.\n // A target change starts optimistic again: the previous target's subscription failure says nothing about\n // whether this one will, so `degraded` resets the moment `targetKey` changes. Direct setState DURING RENDER,\n // guarded by comparing against the last-seen key, is the React-documented way to adjust state in response to a\n // prop change — the same pattern `useLiveRefresh.ts` uses for its own `modeKey`/`subscriptionKey` reset,\n // deliberately not a `useEffect` (which would cascade an extra render for the same outcome).\n const targetKey = `${targetType}:${targetId ?? ''}`;\n const [degraded, setDegraded] = useState(false);\n const [degradedKey, setDegradedKey] = useState(targetKey);\n if (targetKey !== degradedKey) {\n setDegradedKey(targetKey);\n setDegraded(false);\n }\n\n useSubscription(ON_PRESENCE_CHANGED, {\n variables: { workspaceId: workspaceId ?? '', targetId: targetId ?? '', targetType },\n skip: !ready,\n onData: () => {\n void refetch().catch(() => undefined);\n },\n onError: (error) => {\n console.debug('[usePresence] subscription unavailable, falling back to polling:', {\n targetType,\n message: error instanceof Error ? error.message : String(error),\n });\n setDegraded(true);\n },\n });\n\n useEffect(() => {\n if (!ready || !degraded) return;\n const id = setInterval(() => {\n if (hidden()) return;\n void refetch().catch(() => undefined);\n }, POLL_INTERVAL_MS);\n return () => clearInterval(id);\n }, [ready, degraded, refetch]);\n\n // Last time a typing heartbeat actually went out (shared with `notifyTyping` below) — declared here, ahead of\n // the plain heartbeat effect, so that effect can read it too.\n const lastTypingAt = useRef(0);\n\n // Heartbeat while visible: once immediately, then every 15 s — paused (not merely skipped) while the tab is\n // hidden, restarting clean the moment it becomes visible again. `typing` echoes whether a typing heartbeat is\n // still fresh rather than hardcoding `false`: this heartbeat and `notifyTyping`'s run on independent timers (15 s\n // vs ≤5 s), so over any typing session longer than 15 s this one WILL eventually land after a typing heartbeat —\n // sending a bare `false` there would make it \"the most recent heartbeat\" server-side and flip the typing flag\n // off (publishing a spurious STOPPED_TYPING to every other viewer) while the actor is still actively typing.\n useEffect(() => {\n if (!ready || !targetId) return;\n const beat = () => {\n if (hidden()) return;\n const typing = Date.now() - lastTypingAt.current < TYPING_FRESH_MS;\n void client\n .mutate({ mutation: HEARTBEAT, variables: { targetId, targetType, typing } })\n .catch(() => undefined);\n };\n beat();\n const id = setInterval(beat, HEARTBEAT_INTERVAL_MS);\n return () => clearInterval(id);\n }, [ready, targetId, targetType, client]);\n\n // Leave on unmount OR when the target itself changes (route/tab change) — a dedicated effect so this fires\n // exactly once per (targetId, targetType) teardown, never on an ordinary heartbeat tick.\n useEffect(() => {\n if (!ready || !targetId) return;\n return () => {\n void client\n .mutate({ mutation: LEAVE, variables: { targetId, targetType } })\n .catch(() => undefined);\n };\n }, [ready, targetId, targetType, client]);\n\n const notifyTyping = useCallback(() => {\n if (!ready || !targetId) return;\n const now = Date.now();\n if (now - lastTypingAt.current < TYPING_MIN_INTERVAL_MS) return;\n lastTypingAt.current = now;\n void client\n .mutate({ mutation: HEARTBEAT, variables: { targetId, targetType, typing: true } })\n .catch(() => undefined);\n }, [ready, targetId, targetType, client]);\n\n const selfId = currentUser?.id;\n const entries = useMemo(() => data?.planmagnetPresence ?? [], [data]);\n const others = useMemo(() => entries.filter((e) => e.actorId !== selfId), [entries, selfId]);\n const typingActorIds = useMemo(\n () => others.filter((e) => e.typing).map((e) => e.actorId),\n [others]\n );\n\n return { others, typingActorIds, notifyTyping };\n}\n"],"mappings":";;;;;AA8CA,IAAM,IAAiB,CAAG;;;;;;;;GAUpB,IAAsB,CAAG;;;;;;;;;;;;;;;;;;GAoBzB,IAAY,CAAG;;;;;;;;GAUf,IAAQ,CAAG;;;;GAMX,IAAwB,MACxB,IAAyB,KACzB,IAAmB,KAKnB,IAAkB,KAElB,UAAe,OAAO,WAAa,OAAe,SAAS,oBAAoB;AAErF,SAAgB,EACd,GACA,GACmB;CACnB,IAAM,EAAE,gBAAa,mBAAgB,GAAe,EAC9C,IAAS,GAAiB,EAC1B,IAAQ,EAAQ,KAAgB,EAAQ,GAExC,EAAE,SAAM,eAAY,EAAkD,GAAgB;EAC1F,WAAW;GAAE,UAAU,KAAY;GAAI;GAAY;EACnD,MAAM,CAAC;EACP,aAAa;EACd,CAAC,EASI,IAAY,GAAG,EAAW,GAAG,KAAY,MACzC,CAAC,GAAU,KAAe,EAAS,GAAM,EACzC,CAAC,GAAa,KAAkB,EAAS,EAAU;AAqBzD,CApBI,MAAc,MAChB,EAAe,EAAU,EACzB,EAAY,GAAM,GAGpB,EAAgB,GAAqB;EACnC,WAAW;GAAE,aAAa,KAAe;GAAI,UAAU,KAAY;GAAI;GAAY;EACnF,MAAM,CAAC;EACP,cAAc;AACP,MAAS,CAAC,YAAY,KAAA,EAAU;;EAEvC,UAAU,MAAU;AAKlB,GAJA,QAAQ,MAAM,oEAAoE;IAChF;IACA,SAAS,aAAiB,QAAQ,EAAM,UAAU,OAAO,EAAM;IAChE,CAAC,EACF,EAAY,GAAK;;EAEpB,CAAC,EAEF,QAAgB;AACd,MAAI,CAAC,KAAS,CAAC,EAAU;EACzB,IAAM,IAAK,kBAAkB;AACvB,MAAQ,IACP,GAAS,CAAC,YAAY,KAAA,EAAU;KACpC,EAAiB;AACpB,eAAa,cAAc,EAAG;IAC7B;EAAC;EAAO;EAAU;EAAQ,CAAC;CAI9B,IAAM,IAAe,EAAO,EAAE;AAwB9B,CAhBA,QAAgB;AACd,MAAI,CAAC,KAAS,CAAC,EAAU;EACzB,IAAM,UAAa;AACjB,OAAI,GAAQ,CAAE;GACd,IAAM,IAAS,KAAK,KAAK,GAAG,EAAa,UAAU;AAC9C,KACF,OAAO;IAAE,UAAU;IAAW,WAAW;KAAE;KAAU;KAAY;KAAQ;IAAE,CAAC,CAC5E,YAAY,KAAA,EAAU;;AAE3B,KAAM;EACN,IAAM,IAAK,YAAY,GAAM,EAAsB;AACnD,eAAa,cAAc,EAAG;IAC7B;EAAC;EAAO;EAAU;EAAY;EAAO,CAAC,EAIzC,QAAgB;AACV,SAAC,KAAS,CAAC,GACf,cAAa;AACN,KACF,OAAO;IAAE,UAAU;IAAO,WAAW;KAAE;KAAU;KAAY;IAAE,CAAC,CAChE,YAAY,KAAA,EAAU;;IAE1B;EAAC;EAAO;EAAU;EAAY;EAAO,CAAC;CAEzC,IAAM,IAAe,QAAkB;AACrC,MAAI,CAAC,KAAS,CAAC,EAAU;EACzB,IAAM,IAAM,KAAK,KAAK;AAClB,MAAM,EAAa,UAAU,MACjC,EAAa,UAAU,GAClB,EACF,OAAO;GAAE,UAAU;GAAW,WAAW;IAAE;IAAU;IAAY,QAAQ;IAAM;GAAE,CAAC,CAClF,YAAY,KAAA,EAAU;IACxB;EAAC;EAAO;EAAU;EAAY;EAAO,CAAC,EAEnC,IAAS,GAAa,IACtB,IAAU,QAAc,GAAM,sBAAsB,EAAE,EAAE,CAAC,EAAK,CAAC,EAC/D,IAAS,QAAc,EAAQ,QAAQ,MAAM,EAAE,YAAY,EAAO,EAAE,CAAC,GAAS,EAAO,CAAC;AAM5F,QAAO;EAAE;EAAQ,gBALM,QACf,EAAO,QAAQ,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,EAAE,QAAQ,EAC1D,CAAC,EAAO,CACT;EAEgC;EAAc"}
@@ -5,4 +5,6 @@ export { usePlanMagnet, usePlanMagnetNavigate } from './providers/PlanMagnetProv
5
5
  export { usePlanMagnetStore } from './store/planmagnetStore';
6
6
  export { INTEGRATIONS_SYNCS_PATH, INTEGRATIONS_NEW_SYNC_PATH, INTEGRATIONS_SYNC_DETAIL_PATH, integrationsSyncDetailPath, } from './integrations/routes';
7
7
  export { PRIORITIZATION_PATH } from './product/routes';
8
+ export { SharedReportPage } from './reports/SharedReportPage';
9
+ export { SHARED_REPORT_ROUTE_PATH, SHARED_REPORT_BASE_PATH } from './reports/sharedReportRoute';
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/planmagnet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/planmagnet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -4,3 +4,5 @@ import "./PlanMagnetRoot.js";
4
4
  import "./admin/PlanMagnetAdminRoot.js";
5
5
  import "./store/planmagnetStore.js";
6
6
  import "./integrations/routes.js";
7
+ import "./reports/SharedReportPage.js";
8
+ import "./reports/sharedReportRoute.js";
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Code panel on the task detail page (AUT-12): the PRs/commits/releases GitHub sync discovered that mention this
3
+ * item's key. Purely presentational — `WorkItem.codeLinks` is already selected by the page's one detail query
4
+ * (newest by `remoteUpdatedAt` first, capped at 50 server-side), so this never fires a query of its own.
5
+ */
6
+ export type CodeLinkKind = 'PULL_REQUEST' | 'COMMIT' | 'RELEASE';
7
+ export type CodeLinkState = 'DRAFT' | 'OPEN' | 'CLOSED' | 'MERGED' | 'RELEASED';
8
+ export interface WorkItemCodeLink {
9
+ id: string;
10
+ kind: CodeLinkKind;
11
+ title: string;
12
+ url: string;
13
+ state: CodeLinkState | null;
14
+ number: number | null;
15
+ authorLogin: string | null;
16
+ mergedAt: string | null;
17
+ ref: string | null;
18
+ }
19
+ export declare function CodeLinksPanel({ codeLinks }: {
20
+ codeLinks: readonly WorkItemCodeLink[];
21
+ }): import("react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=CodeLinksPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeLinksPanel.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/links/CodeLinksPanel.tsx"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AACjE,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEhF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AA8DD,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,2CAyBvF"}
@@ -0,0 +1,94 @@
1
+ import { Code2 as e, ExternalLink as t, GitCommit as n, GitPullRequest as r, Tag as i } from "lucide-react";
2
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
3
+ import { Badge as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d } from "@burdenoff/fe-libs/ui";
4
+ //#region src/planmagnet/links/CodeLinksPanel.tsx
5
+ var f = {
6
+ PULL_REQUEST: r,
7
+ COMMIT: n,
8
+ RELEASE: i
9
+ }, p = {
10
+ PULL_REQUEST: "Pull request",
11
+ COMMIT: "Commit",
12
+ RELEASE: "Release"
13
+ }, m = {
14
+ DRAFT: "secondary",
15
+ OPEN: "info",
16
+ CLOSED: "destructive",
17
+ MERGED: "success",
18
+ RELEASED: "success"
19
+ };
20
+ function h({ link: e }) {
21
+ let n = f[e.kind];
22
+ return /* @__PURE__ */ o("li", {
23
+ className: "flex items-start justify-between gap-3 rounded-md border border-border-default p-2.5",
24
+ "data-testid": "code-link",
25
+ children: [/* @__PURE__ */ o("div", {
26
+ className: "flex min-w-0 items-start gap-2",
27
+ children: [/* @__PURE__ */ a(n, {
28
+ className: "mt-0.5 h-4 w-4 shrink-0 text-muted-foreground",
29
+ "aria-hidden": "true"
30
+ }), /* @__PURE__ */ o("div", {
31
+ className: "min-w-0 space-y-0.5",
32
+ children: [/* @__PURE__ */ o("a", {
33
+ href: e.url,
34
+ target: "_blank",
35
+ rel: "noopener noreferrer",
36
+ className: "inline-flex min-w-0 items-center gap-1 text-sm font-medium hover:underline",
37
+ children: [/* @__PURE__ */ a("span", {
38
+ className: "truncate",
39
+ children: e.title
40
+ }), /* @__PURE__ */ a(t, {
41
+ className: "h-3 w-3 shrink-0",
42
+ "aria-hidden": "true"
43
+ })]
44
+ }), /* @__PURE__ */ o("p", {
45
+ className: "text-xs text-muted-foreground",
46
+ children: [
47
+ p[e.kind],
48
+ e.number == null ? "" : ` #${e.number}`,
49
+ e.authorLogin ? ` · @${e.authorLogin}` : "",
50
+ e.ref ? ` · ${e.ref}` : "",
51
+ e.mergedAt ? ` · merged ${new Date(e.mergedAt).toLocaleDateString()}` : ""
52
+ ]
53
+ })]
54
+ })]
55
+ }), e.state && /* @__PURE__ */ a(s, {
56
+ variant: m[e.state],
57
+ className: "shrink-0 text-[11px] capitalize",
58
+ children: e.state.toLowerCase()
59
+ })]
60
+ });
61
+ }
62
+ function g({ codeLinks: t }) {
63
+ return /* @__PURE__ */ o(c, {
64
+ "data-testid": "code-links",
65
+ children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ o(d, {
66
+ className: "flex items-center gap-2",
67
+ children: [
68
+ /* @__PURE__ */ a(e, {
69
+ className: "h-4 w-4",
70
+ "aria-hidden": "true"
71
+ }),
72
+ "Code (",
73
+ t.length,
74
+ ")"
75
+ ]
76
+ }) }), /* @__PURE__ */ a(l, { children: t.length === 0 ? /* @__PURE__ */ o("p", {
77
+ className: "text-sm text-muted-foreground",
78
+ children: [
79
+ "No code changes linked yet. GitHub sync links a PR, commit or release here once it mentions this item’s key (",
80
+ "\"",
81
+ "fixes …",
82
+ "\"",
83
+ ", a branch name, a commit message)."
84
+ ]
85
+ }) : /* @__PURE__ */ a("ul", {
86
+ className: "space-y-2",
87
+ children: t.map((e) => /* @__PURE__ */ a(h, { link: e }, e.id))
88
+ }) })]
89
+ });
90
+ }
91
+ //#endregion
92
+ export { g as CodeLinksPanel };
93
+
94
+ //# sourceMappingURL=CodeLinksPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeLinksPanel.js","names":[],"sources":["../../../src/planmagnet/links/CodeLinksPanel.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { GitCommit, GitPullRequest, Tag as TagIcon, ExternalLink, Code2 } from 'lucide-react';\n\n/**\n * Code panel on the task detail page (AUT-12): the PRs/commits/releases GitHub sync discovered that mention this\n * item's key. Purely presentational — `WorkItem.codeLinks` is already selected by the page's one detail query\n * (newest by `remoteUpdatedAt` first, capped at 50 server-side), so this never fires a query of its own.\n */\n\nexport type CodeLinkKind = 'PULL_REQUEST' | 'COMMIT' | 'RELEASE';\nexport type CodeLinkState = 'DRAFT' | 'OPEN' | 'CLOSED' | 'MERGED' | 'RELEASED';\n\nexport interface WorkItemCodeLink {\n id: string;\n kind: CodeLinkKind;\n title: string;\n url: string;\n state: CodeLinkState | null;\n number: number | null;\n authorLogin: string | null;\n mergedAt: string | null;\n ref: string | null;\n}\n\nconst KIND_ICON: Record<CodeLinkKind, typeof GitPullRequest> = {\n PULL_REQUEST: GitPullRequest,\n COMMIT: GitCommit,\n RELEASE: TagIcon,\n};\n\nconst KIND_LABEL: Record<CodeLinkKind, string> = {\n PULL_REQUEST: 'Pull request',\n COMMIT: 'Commit',\n RELEASE: 'Release',\n};\n\nconst STATE_VARIANT: Record<\n CodeLinkState,\n 'default' | 'success' | 'warning' | 'info' | 'secondary' | 'destructive' | 'outline'\n> = {\n DRAFT: 'secondary',\n OPEN: 'info',\n CLOSED: 'destructive',\n MERGED: 'success',\n RELEASED: 'success',\n};\n\nfunction CodeLinkRow({ link }: { link: WorkItemCodeLink }) {\n const Icon = KIND_ICON[link.kind];\n return (\n <li\n className=\"flex items-start justify-between gap-3 rounded-md border border-border-default p-2.5\"\n data-testid=\"code-link\"\n >\n <div className=\"flex min-w-0 items-start gap-2\">\n <Icon className=\"mt-0.5 h-4 w-4 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n <div className=\"min-w-0 space-y-0.5\">\n <a\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex min-w-0 items-center gap-1 text-sm font-medium hover:underline\"\n >\n <span className=\"truncate\">{link.title}</span>\n <ExternalLink className=\"h-3 w-3 shrink-0\" aria-hidden=\"true\" />\n </a>\n <p className=\"text-xs text-muted-foreground\">\n {KIND_LABEL[link.kind]}\n {link.number != null ? ` #${link.number}` : ''}\n {link.authorLogin ? ` · @${link.authorLogin}` : ''}\n {link.ref ? ` · ${link.ref}` : ''}\n {link.mergedAt ? ` · merged ${new Date(link.mergedAt).toLocaleDateString()}` : ''}\n </p>\n </div>\n </div>\n {link.state && (\n <Badge variant={STATE_VARIANT[link.state]} className=\"shrink-0 text-[11px] capitalize\">\n {link.state.toLowerCase()}\n </Badge>\n )}\n </li>\n );\n}\n\nexport function CodeLinksPanel({ codeLinks }: { codeLinks: readonly WorkItemCodeLink[] }) {\n return (\n <Card data-testid=\"code-links\">\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Code2 className=\"h-4 w-4\" aria-hidden=\"true\" />\n Code ({codeLinks.length})\n </CardTitle>\n </CardHeader>\n <CardContent>\n {codeLinks.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">\n No code changes linked yet. GitHub sync links a PR, commit or release here once it\n mentions this item&rsquo;s key ({'\"'}fixes …{'\"'}, a branch name, a commit message).\n </p>\n ) : (\n <ul className=\"space-y-2\">\n {codeLinks.map((link) => (\n <CodeLinkRow key={link.id} link={link} />\n ))}\n </ul>\n )}\n </CardContent>\n </Card>\n );\n}\n"],"mappings":";;;;AAwBA,IAAM,IAAyD;CAC7D,cAAc;CACd,QAAQ;CACR,SAAS;CACV,EAEK,IAA2C;CAC/C,cAAc;CACd,QAAQ;CACR,SAAS;CACV,EAEK,IAGF;CACF,OAAO;CACP,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,UAAU;CACX;AAED,SAAS,EAAY,EAAE,WAAoC;CACzD,IAAM,IAAO,EAAU,EAAK;AAC5B,QACE,kBAAC,MAAD;EACE,WAAU;EACV,eAAY;YAFd,CAIE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,GAAD;IAAM,WAAU;IAAgD,eAAY;IAAS,CAAA,EACrF,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,KAAD;KACE,MAAM,EAAK;KACX,QAAO;KACP,KAAI;KACJ,WAAU;eAJZ,CAME,kBAAC,QAAD;MAAM,WAAU;gBAAY,EAAK;MAAa,CAAA,EAC9C,kBAAC,GAAD;MAAc,WAAU;MAAmB,eAAY;MAAS,CAAA,CAC9D;QACJ,kBAAC,KAAD;KAAG,WAAU;eAAb;MACG,EAAW,EAAK;MAChB,EAAK,UAAU,OAA4B,KAArB,KAAK,EAAK;MAChC,EAAK,cAAc,OAAO,EAAK,gBAAgB;MAC/C,EAAK,MAAM,MAAM,EAAK,QAAQ;MAC9B,EAAK,WAAW,aAAa,IAAI,KAAK,EAAK,SAAS,CAAC,oBAAoB,KAAK;MAC7E;OACA;MACF;MACL,EAAK,SACJ,kBAAC,GAAD;GAAO,SAAS,EAAc,EAAK;GAAQ,WAAU;aAClD,EAAK,MAAM,aAAa;GACnB,CAAA,CAEP;;;AAIT,SAAgB,EAAe,EAAE,gBAAyD;AACxF,QACE,kBAAC,GAAD;EAAM,eAAY;YAAlB,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;GAAW,WAAU;aAArB;IACE,kBAAC,GAAD;KAAO,WAAU;KAAU,eAAY;KAAS,CAAA;;IACzC,EAAU;IAAO;IACd;MACD,CAAA,EACb,kBAAC,GAAD,EAAA,UACG,EAAU,WAAW,IACpB,kBAAC,KAAD;GAAG,WAAU;aAAb;IAA6C;IAEV;IAAI;IAAQ;IAAI;IAC/C;OAEJ,kBAAC,MAAD;GAAI,WAAU;aACX,EAAU,KAAK,MACd,kBAAC,GAAD,EAAiC,SAAQ,EAAvB,EAAK,GAAkB,CACzC;GACC,CAAA,EAEK,CAAA,CACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"DocsDocDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/DocsDocDetailPagePage.tsx"],"names":[],"mappings":"AAsIA,wBAAgB,qBAAqB,4CA2bpC"}
1
+ {"version":3,"file":"DocsDocDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/DocsDocDetailPagePage.tsx"],"names":[],"mappings":"AAiRA,wBAAgB,qBAAqB,4CAsrBpC"}