@x15ventures/x15-ui-library 3.18.0 → 3.20.0

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 (484) hide show
  1. package/THIRD_PARTY_LICENSES.md +11182 -0
  2. package/dist/cjs/autoGenerated/libraryThemes.js +12 -12
  3. package/dist/cjs/autoGenerated/libraryThemes.js.map +1 -1
  4. package/dist/cjs/autoGenerated/libraryThemes.json +12 -12
  5. package/dist/cjs/components/design/banners/pageBanner/PageBanner.js +27 -12
  6. package/dist/cjs/components/design/banners/pageBanner/PageBanner.js.map +1 -1
  7. package/dist/cjs/components/design/card/cardHeader/CardHeaderItem.js +22 -15
  8. package/dist/cjs/components/design/card/cardHeader/CardHeaderItem.js.map +1 -1
  9. package/dist/cjs/components/design/dialog/dialog.css +4 -0
  10. package/dist/cjs/components/design/logos/LogoLink.js +2 -1
  11. package/dist/cjs/components/design/logos/LogoLink.js.map +1 -1
  12. package/dist/cjs/components/design/logos/VentureLogo.js +2 -1
  13. package/dist/cjs/components/design/logos/VentureLogo.js.map +1 -1
  14. package/dist/cjs/components/design/revealMore/RevealMoreBelow.js +2 -2
  15. package/dist/cjs/components/design/revealMore/RevealMoreBelow.js.map +1 -1
  16. package/dist/cjs/components/design/skeleton/Skeleton.js +15 -5
  17. package/dist/cjs/components/design/skeleton/Skeleton.js.map +1 -1
  18. package/dist/cjs/components/design/themeLoader/ThemeLoader.js +1 -1
  19. package/dist/cjs/components/design/themeLoader/ThemeLoader.js.map +1 -1
  20. package/dist/cjs/components/form/buttons/SimpleButton.js +3 -1
  21. package/dist/cjs/components/form/buttons/SimpleButton.js.map +1 -1
  22. package/dist/cjs/components/form/buttons/button.interface.js.map +1 -1
  23. package/dist/cjs/components/form/buttons/userPicButton/UserPicButton.js +5 -3
  24. package/dist/cjs/components/form/buttons/userPicButton/UserPicButton.js.map +1 -1
  25. package/dist/cjs/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.js +64 -19
  26. package/dist/cjs/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.js.map +1 -1
  27. package/dist/cjs/components/navigation/link/Link.js +2 -1
  28. package/dist/cjs/components/navigation/link/Link.js.map +1 -1
  29. package/dist/cjs/components/testing/devToolbar/DevToolbar.js +5 -3
  30. package/dist/cjs/components/testing/devToolbar/DevToolbar.js.map +1 -1
  31. package/dist/cjs/constants/fileUploadTypes.js +9 -4
  32. package/dist/cjs/constants/fileUploadTypes.js.map +1 -1
  33. package/dist/cjs/helpers/dateHelpers.js +34 -23
  34. package/dist/cjs/helpers/dateHelpers.js.map +1 -1
  35. package/dist/cjs/helpers/fileHelpers.js +58 -0
  36. package/dist/cjs/helpers/fileHelpers.js.map +1 -0
  37. package/dist/cjs/helpers/index.js +44 -0
  38. package/dist/cjs/helpers/index.js.map +1 -1
  39. package/dist/cjs/helpers/interactionsHelper.js +8 -1
  40. package/dist/cjs/helpers/interactionsHelper.js.map +1 -1
  41. package/dist/cjs/helpers/objectHelpers.js +23 -9
  42. package/dist/cjs/helpers/objectHelpers.js.map +1 -1
  43. package/dist/cjs/helpers/stringHelpers.js +61 -5
  44. package/dist/cjs/helpers/stringHelpers.js.map +1 -1
  45. package/dist/cjs/helpers/urlHelpers.js +48 -0
  46. package/dist/cjs/helpers/urlHelpers.js.map +1 -0
  47. package/dist/cjs/index.js +191 -0
  48. package/dist/cjs/index.js.map +1 -1
  49. package/dist/cjs/package.json +3 -305
  50. package/dist/cjs/styles/index.css +18 -0
  51. package/dist/cjs/styles/variables/cssVars/_designVariables.css +18 -0
  52. package/dist/cjs/widgets/documentComments/DocumentComments.js +305 -0
  53. package/dist/cjs/widgets/documentComments/DocumentComments.js.map +1 -0
  54. package/dist/cjs/widgets/documentComments/_documentCommentsVariables.css +0 -0
  55. package/dist/cjs/widgets/documentComments/documentComments.css +107 -0
  56. package/dist/cjs/widgets/documentComments/documentComments.interfaces.js +6 -0
  57. package/dist/cjs/widgets/documentComments/documentComments.interfaces.js.map +1 -0
  58. package/dist/cjs/widgets/documentComments/index.js +19 -0
  59. package/dist/cjs/widgets/documentComments/index.js.map +1 -0
  60. package/dist/cjs/widgets/documentComparer/DocumentComparer.js +309 -0
  61. package/dist/cjs/widgets/documentComparer/DocumentComparer.js.map +1 -0
  62. package/dist/cjs/widgets/documentComparer/_documentComparerVariables.css +0 -0
  63. package/dist/cjs/widgets/documentComparer/documentComparer.css +117 -0
  64. package/dist/cjs/widgets/documentComparer/documentComparer.interfaces.js +6 -0
  65. package/dist/cjs/widgets/documentComparer/documentComparer.interfaces.js.map +1 -0
  66. package/dist/cjs/widgets/documentComparer/index.js +19 -0
  67. package/dist/cjs/widgets/documentComparer/index.js.map +1 -0
  68. package/dist/cjs/widgets/documentEditor/DocumentEditor.js +142 -0
  69. package/dist/cjs/widgets/documentEditor/DocumentEditor.js.map +1 -0
  70. package/dist/cjs/widgets/documentEditor/_documentEditorVariables.css +0 -0
  71. package/dist/cjs/widgets/documentEditor/documentEditor.css +33 -0
  72. package/dist/cjs/widgets/documentEditor/documentEditor.interfaces.js +6 -0
  73. package/dist/cjs/widgets/documentEditor/documentEditor.interfaces.js.map +1 -0
  74. package/dist/cjs/widgets/documentEditor/index.js +19 -0
  75. package/dist/cjs/widgets/documentEditor/index.js.map +1 -0
  76. package/dist/cjs/widgets/documentViewer/DocumentViewer.js +206 -0
  77. package/dist/cjs/widgets/documentViewer/DocumentViewer.js.map +1 -0
  78. package/dist/cjs/widgets/documentViewer/_documentViewerVariables.css +0 -0
  79. package/dist/cjs/widgets/documentViewer/documentViewer.css +82 -0
  80. package/dist/cjs/widgets/documentViewer/documentViewer.interfaces.js +6 -0
  81. package/dist/cjs/widgets/documentViewer/documentViewer.interfaces.js.map +1 -0
  82. package/dist/cjs/widgets/documentViewer/index.js +19 -0
  83. package/dist/cjs/widgets/documentViewer/index.js.map +1 -0
  84. package/dist/cjs/widgets/index.js +126 -0
  85. package/dist/cjs/widgets/index.js.map +1 -1
  86. package/dist/cjs/widgets/shared/documents/ToggleGroup.js +32 -0
  87. package/dist/cjs/widgets/shared/documents/ToggleGroup.js.map +1 -0
  88. package/dist/cjs/widgets/shared/documents/_documentVariables.css +0 -0
  89. package/dist/cjs/widgets/shared/documents/annotations/AnnotationLayer.js +279 -0
  90. package/dist/cjs/widgets/shared/documents/annotations/AnnotationLayer.js.map +1 -0
  91. package/dist/cjs/widgets/shared/documents/annotations/_annotationLayerVariables.css +0 -0
  92. package/dist/cjs/widgets/shared/documents/annotations/annotationLayer.css +65 -0
  93. package/dist/cjs/widgets/shared/documents/annotations/annotations.interfaces.js +21 -0
  94. package/dist/cjs/widgets/shared/documents/annotations/annotations.interfaces.js.map +1 -0
  95. package/dist/cjs/widgets/shared/documents/annotations/highlightRegistry.js +67 -0
  96. package/dist/cjs/widgets/shared/documents/annotations/highlightRegistry.js.map +1 -0
  97. package/dist/cjs/widgets/shared/documents/annotations/index.js +39 -0
  98. package/dist/cjs/widgets/shared/documents/annotations/index.js.map +1 -0
  99. package/dist/cjs/widgets/shared/documents/annotations/textIndex.js +112 -0
  100. package/dist/cjs/widgets/shared/documents/annotations/textIndex.js.map +1 -0
  101. package/dist/cjs/widgets/shared/documents/annotations/textQuoteAnchor.js +160 -0
  102. package/dist/cjs/widgets/shared/documents/annotations/textQuoteAnchor.js.map +1 -0
  103. package/dist/cjs/widgets/shared/documents/documentHelpers.js +186 -0
  104. package/dist/cjs/widgets/shared/documents/documentHelpers.js.map +1 -0
  105. package/dist/cjs/widgets/shared/documents/documents.interfaces.js +6 -0
  106. package/dist/cjs/widgets/shared/documents/documents.interfaces.js.map +1 -0
  107. package/dist/cjs/widgets/shared/documents/engines/documentDiff/DocumentDiff.js +73 -0
  108. package/dist/cjs/widgets/shared/documents/engines/documentDiff/DocumentDiff.js.map +1 -0
  109. package/dist/cjs/widgets/shared/documents/engines/documentDiff/_documentDiffVariables.css +0 -0
  110. package/dist/cjs/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.js +114 -0
  111. package/dist/cjs/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.js.map +1 -0
  112. package/dist/cjs/widgets/shared/documents/engines/documentDiff/documentDiff.css +69 -0
  113. package/dist/cjs/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.js +6 -0
  114. package/dist/cjs/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.js.map +1 -0
  115. package/dist/cjs/widgets/shared/documents/engines/lazyEngines.js +19 -0
  116. package/dist/cjs/widgets/shared/documents/engines/lazyEngines.js.map +1 -0
  117. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.js +200 -0
  118. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.js.map +1 -0
  119. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/_markdownEditorEngineVariables.css +0 -0
  120. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.css +50 -0
  121. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.js +6 -0
  122. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.js.map +1 -0
  123. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.js +179 -0
  124. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.js.map +1 -0
  125. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.js +278 -0
  126. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.js.map +1 -0
  127. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.js +208 -0
  128. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.js.map +1 -0
  129. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.js +85 -0
  130. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.js.map +1 -0
  131. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/_markdownRendererVariables.css +0 -0
  132. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/markdownRenderer.css +78 -0
  133. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/index.js +64 -0
  134. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/index.js.map +1 -0
  135. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.js +6 -0
  136. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.js.map +1 -0
  137. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js +71 -0
  138. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js.map +1 -0
  139. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.js +192 -0
  140. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.js.map +1 -0
  141. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js +86 -0
  142. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js.map +1 -0
  143. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.js +38 -0
  144. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.js.map +1 -0
  145. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/WordRenderer.js +49 -0
  146. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/WordRenderer.js.map +1 -0
  147. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/renderWordDocument.js +214 -0
  148. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/renderWordDocument.js.map +1 -0
  149. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.js +112 -0
  150. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.js.map +1 -0
  151. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/wordXml.js +68 -0
  152. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/wordXml.js.map +1 -0
  153. package/dist/cjs/widgets/shared/documents/index.js +50 -0
  154. package/dist/cjs/widgets/shared/documents/index.js.map +1 -0
  155. package/dist/cjs/widgets/shared/documents/toggleGroup.css +8 -0
  156. package/dist/cjs/widgets/shared/documents/useDocumentContent.js +222 -0
  157. package/dist/cjs/widgets/shared/documents/useDocumentContent.js.map +1 -0
  158. package/dist/components/design/banners/pageBanner/PageBanner.d.ts.map +1 -1
  159. package/dist/components/design/card/cardHeader/CardHeaderItem.d.ts.map +1 -1
  160. package/dist/components/design/logos/LogoLink.d.ts.map +1 -1
  161. package/dist/components/design/logos/VentureLogo.d.ts.map +1 -1
  162. package/dist/components/design/skeleton/Skeleton.d.ts +1 -1
  163. package/dist/components/design/skeleton/Skeleton.d.ts.map +1 -1
  164. package/dist/components/design/themeLoader/ThemeLoader.d.ts.map +1 -1
  165. package/dist/components/form/buttons/SimpleButton.d.ts.map +1 -1
  166. package/dist/components/form/buttons/button.interface.d.ts +1 -0
  167. package/dist/components/form/buttons/button.interface.d.ts.map +1 -1
  168. package/dist/components/form/buttons/userPicButton/UserPicButton.d.ts.map +1 -1
  169. package/dist/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.d.ts.map +1 -1
  170. package/dist/components/navigation/link/Link.d.ts.map +1 -1
  171. package/dist/components/testing/devToolbar/DevToolbar.d.ts.map +1 -1
  172. package/dist/constants/fileUploadTypes.d.ts.map +1 -1
  173. package/dist/esm/autoGenerated/libraryThemes.js +12 -12
  174. package/dist/esm/autoGenerated/libraryThemes.js.map +1 -1
  175. package/dist/esm/autoGenerated/libraryThemes.json +12 -12
  176. package/dist/esm/components/design/banners/pageBanner/PageBanner.js +27 -12
  177. package/dist/esm/components/design/banners/pageBanner/PageBanner.js.map +1 -1
  178. package/dist/esm/components/design/card/cardHeader/CardHeaderItem.js +22 -15
  179. package/dist/esm/components/design/card/cardHeader/CardHeaderItem.js.map +1 -1
  180. package/dist/esm/components/design/dialog/dialog.css +4 -0
  181. package/dist/esm/components/design/logos/LogoLink.js +2 -1
  182. package/dist/esm/components/design/logos/LogoLink.js.map +1 -1
  183. package/dist/esm/components/design/logos/VentureLogo.js +2 -1
  184. package/dist/esm/components/design/logos/VentureLogo.js.map +1 -1
  185. package/dist/esm/components/design/revealMore/RevealMoreBelow.js +1 -1
  186. package/dist/esm/components/design/revealMore/RevealMoreBelow.js.map +1 -1
  187. package/dist/esm/components/design/skeleton/Skeleton.js +15 -5
  188. package/dist/esm/components/design/skeleton/Skeleton.js.map +1 -1
  189. package/dist/esm/components/design/themeLoader/ThemeLoader.js +1 -1
  190. package/dist/esm/components/design/themeLoader/ThemeLoader.js.map +1 -1
  191. package/dist/esm/components/form/buttons/SimpleButton.js +3 -1
  192. package/dist/esm/components/form/buttons/SimpleButton.js.map +1 -1
  193. package/dist/esm/components/form/buttons/button.interface.js.map +1 -1
  194. package/dist/esm/components/form/buttons/userPicButton/UserPicButton.js +5 -3
  195. package/dist/esm/components/form/buttons/userPicButton/UserPicButton.js.map +1 -1
  196. package/dist/esm/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.js +65 -19
  197. package/dist/esm/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.js.map +1 -1
  198. package/dist/esm/components/navigation/link/Link.js +2 -1
  199. package/dist/esm/components/navigation/link/Link.js.map +1 -1
  200. package/dist/esm/components/testing/devToolbar/DevToolbar.js +5 -3
  201. package/dist/esm/components/testing/devToolbar/DevToolbar.js.map +1 -1
  202. package/dist/esm/constants/fileUploadTypes.js +9 -4
  203. package/dist/esm/constants/fileUploadTypes.js.map +1 -1
  204. package/dist/esm/helpers/dateHelpers.js +34 -23
  205. package/dist/esm/helpers/dateHelpers.js.map +1 -1
  206. package/dist/esm/helpers/fileHelpers.js +48 -0
  207. package/dist/esm/helpers/fileHelpers.js.map +1 -0
  208. package/dist/esm/helpers/index.js +2 -0
  209. package/dist/esm/helpers/index.js.map +1 -1
  210. package/dist/esm/helpers/interactionsHelper.js +5 -0
  211. package/dist/esm/helpers/interactionsHelper.js.map +1 -1
  212. package/dist/esm/helpers/objectHelpers.js +23 -9
  213. package/dist/esm/helpers/objectHelpers.js.map +1 -1
  214. package/dist/esm/helpers/stringHelpers.js +61 -5
  215. package/dist/esm/helpers/stringHelpers.js.map +1 -1
  216. package/dist/esm/helpers/urlHelpers.js +40 -0
  217. package/dist/esm/helpers/urlHelpers.js.map +1 -0
  218. package/dist/esm/index.js +3 -1
  219. package/dist/esm/index.js.map +1 -1
  220. package/dist/esm/package.json +2 -304
  221. package/dist/esm/styles/index.css +18 -0
  222. package/dist/esm/styles/variables/cssVars/_designVariables.css +18 -0
  223. package/dist/esm/widgets/documentComments/DocumentComments.js +298 -0
  224. package/dist/esm/widgets/documentComments/DocumentComments.js.map +1 -0
  225. package/dist/esm/widgets/documentComments/_documentCommentsVariables.css +0 -0
  226. package/dist/esm/widgets/documentComments/documentComments.css +107 -0
  227. package/dist/esm/widgets/documentComments/documentComments.interfaces.js +2 -0
  228. package/dist/esm/widgets/documentComments/documentComments.interfaces.js.map +1 -0
  229. package/dist/esm/widgets/documentComments/index.js +2 -0
  230. package/dist/esm/widgets/documentComments/index.js.map +1 -0
  231. package/dist/esm/widgets/documentComparer/DocumentComparer.js +301 -0
  232. package/dist/esm/widgets/documentComparer/DocumentComparer.js.map +1 -0
  233. package/dist/esm/widgets/documentComparer/_documentComparerVariables.css +0 -0
  234. package/dist/esm/widgets/documentComparer/documentComparer.css +117 -0
  235. package/dist/esm/widgets/documentComparer/documentComparer.interfaces.js +2 -0
  236. package/dist/esm/widgets/documentComparer/documentComparer.interfaces.js.map +1 -0
  237. package/dist/esm/widgets/documentComparer/index.js +2 -0
  238. package/dist/esm/widgets/documentComparer/index.js.map +1 -0
  239. package/dist/esm/widgets/documentEditor/DocumentEditor.js +135 -0
  240. package/dist/esm/widgets/documentEditor/DocumentEditor.js.map +1 -0
  241. package/dist/esm/widgets/documentEditor/_documentEditorVariables.css +0 -0
  242. package/dist/esm/widgets/documentEditor/documentEditor.css +33 -0
  243. package/dist/esm/widgets/documentEditor/documentEditor.interfaces.js +2 -0
  244. package/dist/esm/widgets/documentEditor/documentEditor.interfaces.js.map +1 -0
  245. package/dist/esm/widgets/documentEditor/index.js +2 -0
  246. package/dist/esm/widgets/documentEditor/index.js.map +1 -0
  247. package/dist/esm/widgets/documentViewer/DocumentViewer.js +198 -0
  248. package/dist/esm/widgets/documentViewer/DocumentViewer.js.map +1 -0
  249. package/dist/esm/widgets/documentViewer/_documentViewerVariables.css +0 -0
  250. package/dist/esm/widgets/documentViewer/documentViewer.css +82 -0
  251. package/dist/esm/widgets/documentViewer/documentViewer.interfaces.js +2 -0
  252. package/dist/esm/widgets/documentViewer/documentViewer.interfaces.js.map +1 -0
  253. package/dist/esm/widgets/documentViewer/index.js +2 -0
  254. package/dist/esm/widgets/documentViewer/index.js.map +1 -0
  255. package/dist/esm/widgets/index.js +6 -0
  256. package/dist/esm/widgets/index.js.map +1 -1
  257. package/dist/esm/widgets/shared/documents/ToggleGroup.js +24 -0
  258. package/dist/esm/widgets/shared/documents/ToggleGroup.js.map +1 -0
  259. package/dist/esm/widgets/shared/documents/_documentVariables.css +0 -0
  260. package/dist/esm/widgets/shared/documents/annotations/AnnotationLayer.js +273 -0
  261. package/dist/esm/widgets/shared/documents/annotations/AnnotationLayer.js.map +1 -0
  262. package/dist/esm/widgets/shared/documents/annotations/_annotationLayerVariables.css +0 -0
  263. package/dist/esm/widgets/shared/documents/annotations/annotationLayer.css +65 -0
  264. package/dist/esm/widgets/shared/documents/annotations/annotations.interfaces.js +14 -0
  265. package/dist/esm/widgets/shared/documents/annotations/annotations.interfaces.js.map +1 -0
  266. package/dist/esm/widgets/shared/documents/annotations/highlightRegistry.js +58 -0
  267. package/dist/esm/widgets/shared/documents/annotations/highlightRegistry.js.map +1 -0
  268. package/dist/esm/widgets/shared/documents/annotations/index.js +4 -0
  269. package/dist/esm/widgets/shared/documents/annotations/index.js.map +1 -0
  270. package/dist/esm/widgets/shared/documents/annotations/textIndex.js +103 -0
  271. package/dist/esm/widgets/shared/documents/annotations/textIndex.js.map +1 -0
  272. package/dist/esm/widgets/shared/documents/annotations/textQuoteAnchor.js +150 -0
  273. package/dist/esm/widgets/shared/documents/annotations/textQuoteAnchor.js.map +1 -0
  274. package/dist/esm/widgets/shared/documents/documentHelpers.js +168 -0
  275. package/dist/esm/widgets/shared/documents/documentHelpers.js.map +1 -0
  276. package/dist/esm/widgets/shared/documents/documents.interfaces.js +2 -0
  277. package/dist/esm/widgets/shared/documents/documents.interfaces.js.map +1 -0
  278. package/dist/esm/widgets/shared/documents/engines/documentDiff/DocumentDiff.js +65 -0
  279. package/dist/esm/widgets/shared/documents/engines/documentDiff/DocumentDiff.js.map +1 -0
  280. package/dist/esm/widgets/shared/documents/engines/documentDiff/_documentDiffVariables.css +0 -0
  281. package/dist/esm/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.js +102 -0
  282. package/dist/esm/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.js.map +1 -0
  283. package/dist/esm/widgets/shared/documents/engines/documentDiff/documentDiff.css +69 -0
  284. package/dist/esm/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.js +2 -0
  285. package/dist/esm/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.js.map +1 -0
  286. package/dist/esm/widgets/shared/documents/engines/lazyEngines.js +13 -0
  287. package/dist/esm/widgets/shared/documents/engines/lazyEngines.js.map +1 -0
  288. package/dist/esm/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.js +191 -0
  289. package/dist/esm/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.js.map +1 -0
  290. package/dist/esm/widgets/shared/documents/engines/markdownEditor/_markdownEditorEngineVariables.css +0 -0
  291. package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.css +50 -0
  292. package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.js +2 -0
  293. package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.js.map +1 -0
  294. package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.js +170 -0
  295. package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.js.map +1 -0
  296. package/dist/esm/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.js +270 -0
  297. package/dist/esm/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.js.map +1 -0
  298. package/dist/esm/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.js +198 -0
  299. package/dist/esm/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.js.map +1 -0
  300. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.js +76 -0
  301. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.js.map +1 -0
  302. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/_markdownRendererVariables.css +0 -0
  303. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/markdownRenderer.css +78 -0
  304. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/index.js +5 -0
  305. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/index.js.map +1 -0
  306. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.js +2 -0
  307. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.js.map +1 -0
  308. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js +64 -0
  309. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js.map +1 -0
  310. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.js +182 -0
  311. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.js.map +1 -0
  312. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js +78 -0
  313. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js.map +1 -0
  314. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.js +30 -0
  315. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.js.map +1 -0
  316. package/dist/esm/widgets/shared/documents/engines/wordRenderer/WordRenderer.js +41 -0
  317. package/dist/esm/widgets/shared/documents/engines/wordRenderer/WordRenderer.js.map +1 -0
  318. package/dist/esm/widgets/shared/documents/engines/wordRenderer/renderWordDocument.js +207 -0
  319. package/dist/esm/widgets/shared/documents/engines/wordRenderer/renderWordDocument.js.map +1 -0
  320. package/dist/esm/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.js +105 -0
  321. package/dist/esm/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.js.map +1 -0
  322. package/dist/esm/widgets/shared/documents/engines/wordRenderer/wordXml.js +57 -0
  323. package/dist/esm/widgets/shared/documents/engines/wordRenderer/wordXml.js.map +1 -0
  324. package/dist/esm/widgets/shared/documents/index.js +3 -0
  325. package/dist/esm/widgets/shared/documents/index.js.map +1 -0
  326. package/dist/esm/widgets/shared/documents/toggleGroup.css +8 -0
  327. package/dist/esm/widgets/shared/documents/useDocumentContent.js +215 -0
  328. package/dist/esm/widgets/shared/documents/useDocumentContent.js.map +1 -0
  329. package/dist/helpers/dateHelpers.d.ts.map +1 -1
  330. package/dist/helpers/fileHelpers.d.ts +5 -0
  331. package/dist/helpers/fileHelpers.d.ts.map +1 -0
  332. package/dist/helpers/index.d.ts +3 -0
  333. package/dist/helpers/index.d.ts.map +1 -1
  334. package/dist/helpers/interactionsHelper.d.ts +2 -0
  335. package/dist/helpers/interactionsHelper.d.ts.map +1 -1
  336. package/dist/helpers/objectHelpers.d.ts.map +1 -1
  337. package/dist/helpers/stringHelpers.d.ts.map +1 -1
  338. package/dist/helpers/urlHelpers.d.ts +3 -0
  339. package/dist/helpers/urlHelpers.d.ts.map +1 -0
  340. package/dist/index.d.ts +5 -2
  341. package/dist/index.d.ts.map +1 -1
  342. package/dist/package.json +42 -28
  343. package/dist/widgets/documentComments/DocumentComments.d.ts +7 -0
  344. package/dist/widgets/documentComments/DocumentComments.d.ts.map +1 -0
  345. package/dist/widgets/documentComments/documentComments.interfaces.d.ts +57 -0
  346. package/dist/widgets/documentComments/documentComments.interfaces.d.ts.map +1 -0
  347. package/dist/widgets/documentComments/index.d.ts +3 -0
  348. package/dist/widgets/documentComments/index.d.ts.map +1 -0
  349. package/dist/widgets/documentComparer/DocumentComparer.d.ts +7 -0
  350. package/dist/widgets/documentComparer/DocumentComparer.d.ts.map +1 -0
  351. package/dist/widgets/documentComparer/documentComparer.interfaces.d.ts +78 -0
  352. package/dist/widgets/documentComparer/documentComparer.interfaces.d.ts.map +1 -0
  353. package/dist/widgets/documentComparer/index.d.ts +3 -0
  354. package/dist/widgets/documentComparer/index.d.ts.map +1 -0
  355. package/dist/widgets/documentEditor/DocumentEditor.d.ts +7 -0
  356. package/dist/widgets/documentEditor/DocumentEditor.d.ts.map +1 -0
  357. package/dist/widgets/documentEditor/documentEditor.interfaces.d.ts +40 -0
  358. package/dist/widgets/documentEditor/documentEditor.interfaces.d.ts.map +1 -0
  359. package/dist/widgets/documentEditor/index.d.ts +3 -0
  360. package/dist/widgets/documentEditor/index.d.ts.map +1 -0
  361. package/dist/widgets/documentViewer/DocumentViewer.d.ts +7 -0
  362. package/dist/widgets/documentViewer/DocumentViewer.d.ts.map +1 -0
  363. package/dist/widgets/documentViewer/documentViewer.interfaces.d.ts +47 -0
  364. package/dist/widgets/documentViewer/documentViewer.interfaces.d.ts.map +1 -0
  365. package/dist/widgets/documentViewer/index.d.ts +3 -0
  366. package/dist/widgets/documentViewer/index.d.ts.map +1 -0
  367. package/dist/widgets/index.d.ts +12 -0
  368. package/dist/widgets/index.d.ts.map +1 -1
  369. package/dist/widgets/shared/documents/ToggleGroup.d.ts +15 -0
  370. package/dist/widgets/shared/documents/ToggleGroup.d.ts.map +1 -0
  371. package/dist/widgets/shared/documents/annotations/AnnotationLayer.d.ts +27 -0
  372. package/dist/widgets/shared/documents/annotations/AnnotationLayer.d.ts.map +1 -0
  373. package/dist/widgets/shared/documents/annotations/annotations.interfaces.d.ts +43 -0
  374. package/dist/widgets/shared/documents/annotations/annotations.interfaces.d.ts.map +1 -0
  375. package/dist/widgets/shared/documents/annotations/highlightRegistry.d.ts +12 -0
  376. package/dist/widgets/shared/documents/annotations/highlightRegistry.d.ts.map +1 -0
  377. package/dist/widgets/shared/documents/annotations/index.d.ts +6 -0
  378. package/dist/widgets/shared/documents/annotations/index.d.ts.map +1 -0
  379. package/dist/widgets/shared/documents/annotations/textIndex.d.ts +16 -0
  380. package/dist/widgets/shared/documents/annotations/textIndex.d.ts.map +1 -0
  381. package/dist/widgets/shared/documents/annotations/textQuoteAnchor.d.ts +15 -0
  382. package/dist/widgets/shared/documents/annotations/textQuoteAnchor.d.ts.map +1 -0
  383. package/dist/widgets/shared/documents/documentHelpers.d.ts +14 -0
  384. package/dist/widgets/shared/documents/documentHelpers.d.ts.map +1 -0
  385. package/dist/widgets/shared/documents/documents.interfaces.d.ts +20 -0
  386. package/dist/widgets/shared/documents/documents.interfaces.d.ts.map +1 -0
  387. package/dist/widgets/shared/documents/engines/documentDiff/DocumentDiff.d.ts +6 -0
  388. package/dist/widgets/shared/documents/engines/documentDiff/DocumentDiff.d.ts.map +1 -0
  389. package/dist/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.d.ts +25 -0
  390. package/dist/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.d.ts.map +1 -0
  391. package/dist/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.d.ts +17 -0
  392. package/dist/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.d.ts.map +1 -0
  393. package/dist/widgets/shared/documents/engines/lazyEngines.d.ts +5 -0
  394. package/dist/widgets/shared/documents/engines/lazyEngines.d.ts.map +1 -0
  395. package/dist/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.d.ts +8 -0
  396. package/dist/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.d.ts.map +1 -0
  397. package/dist/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.d.ts +23 -0
  398. package/dist/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.d.ts.map +1 -0
  399. package/dist/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.d.ts +12 -0
  400. package/dist/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.d.ts.map +1 -0
  401. package/dist/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.d.ts +8 -0
  402. package/dist/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.d.ts.map +1 -0
  403. package/dist/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.d.ts +32 -0
  404. package/dist/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.d.ts.map +1 -0
  405. package/dist/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.d.ts +12 -0
  406. package/dist/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.d.ts.map +1 -0
  407. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/index.d.ts +7 -0
  408. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/index.d.ts.map +1 -0
  409. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.d.ts +16 -0
  410. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.d.ts.map +1 -0
  411. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.d.ts +3 -0
  412. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.d.ts.map +1 -0
  413. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.d.ts +6 -0
  414. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.d.ts.map +1 -0
  415. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.d.ts +3 -0
  416. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.d.ts.map +1 -0
  417. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.d.ts +8 -0
  418. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.d.ts.map +1 -0
  419. package/dist/widgets/shared/documents/engines/wordRenderer/WordRenderer.d.ts +11 -0
  420. package/dist/widgets/shared/documents/engines/wordRenderer/WordRenderer.d.ts.map +1 -0
  421. package/dist/widgets/shared/documents/engines/wordRenderer/renderWordDocument.d.ts +7 -0
  422. package/dist/widgets/shared/documents/engines/wordRenderer/renderWordDocument.d.ts.map +1 -0
  423. package/dist/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.d.ts +3 -0
  424. package/dist/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.d.ts.map +1 -0
  425. package/dist/widgets/shared/documents/engines/wordRenderer/wordXml.d.ts +21 -0
  426. package/dist/widgets/shared/documents/engines/wordRenderer/wordXml.d.ts.map +1 -0
  427. package/dist/widgets/shared/documents/index.d.ts +5 -0
  428. package/dist/widgets/shared/documents/index.d.ts.map +1 -0
  429. package/dist/widgets/shared/documents/useDocumentContent.d.ts +11 -0
  430. package/dist/widgets/shared/documents/useDocumentContent.d.ts.map +1 -0
  431. package/package.json +42 -28
  432. package/readme.md +49 -2
  433. package/dist/components/design/dialog/Dialog.test.d.ts +0 -5
  434. package/dist/components/design/dialog/Dialog.test.d.ts.map +0 -1
  435. package/dist/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.test.d.ts +0 -5
  436. package/dist/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.test.d.ts.map +0 -1
  437. package/dist/components/design/tooltip/Tooltip.test.d.ts +0 -2
  438. package/dist/components/design/tooltip/Tooltip.test.d.ts.map +0 -1
  439. package/dist/components/form/buttons/SimpleButton.test.d.ts +0 -5
  440. package/dist/components/form/buttons/SimpleButton.test.d.ts.map +0 -1
  441. package/dist/components/form/formFields/formFieldWrapper/FormField.test.d.ts +0 -5
  442. package/dist/components/form/formFields/formFieldWrapper/FormField.test.d.ts.map +0 -1
  443. package/dist/components/form/formFields/subComponents/inputs/checkbox/InputCheckbox.test.d.ts +0 -5
  444. package/dist/components/form/formFields/subComponents/inputs/checkbox/InputCheckbox.test.d.ts.map +0 -1
  445. package/dist/components/form/formFields/subComponents/inputs/checkbox/checkboxSwitch/CheckboxSwitch.test.d.ts +0 -5
  446. package/dist/components/form/formFields/subComponents/inputs/checkbox/checkboxSwitch/CheckboxSwitch.test.d.ts.map +0 -1
  447. package/dist/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.test.d.ts +0 -5
  448. package/dist/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.test.d.ts.map +0 -1
  449. package/dist/components/form/formFields/subComponents/inputs/file/fileAttachmentList/FileAttachmentsList.test.d.ts +0 -5
  450. package/dist/components/form/formFields/subComponents/inputs/file/fileAttachmentList/FileAttachmentsList.test.d.ts.map +0 -1
  451. package/dist/components/form/formFields/subComponents/inputs/text/InputText.test.d.ts +0 -5
  452. package/dist/components/form/formFields/subComponents/inputs/text/InputText.test.d.ts.map +0 -1
  453. package/dist/components/form/formFields/subComponents/nestedFormContext.test.d.ts +0 -5
  454. package/dist/components/form/formFields/subComponents/nestedFormContext.test.d.ts.map +0 -1
  455. package/dist/components/form/formFields/subComponents/select/Select.test.d.ts +0 -5
  456. package/dist/components/form/formFields/subComponents/select/Select.test.d.ts.map +0 -1
  457. package/dist/components/form/formFields/subComponents/textarea/Textarea.test.d.ts +0 -5
  458. package/dist/components/form/formFields/subComponents/textarea/Textarea.test.d.ts.map +0 -1
  459. package/dist/components/form/hookFormWrapper/HookFormWrapper.test.d.ts +0 -5
  460. package/dist/components/form/hookFormWrapper/HookFormWrapper.test.d.ts.map +0 -1
  461. package/dist/components/form/validation/ValidationMessages.test.d.ts +0 -5
  462. package/dist/components/form/validation/ValidationMessages.test.d.ts.map +0 -1
  463. package/dist/components/navigation/bubbleNavigator/bubbleNavigatorUtilities.test.d.ts +0 -2
  464. package/dist/components/navigation/bubbleNavigator/bubbleNavigatorUtilities.test.d.ts.map +0 -1
  465. package/dist/components/navigation/menu/menuItemContent/MenuItemIcon.test.d.ts +0 -5
  466. package/dist/components/navigation/menu/menuItemContent/MenuItemIcon.test.d.ts.map +0 -1
  467. package/dist/helpers/ageHelpers.test.d.ts +0 -2
  468. package/dist/helpers/ageHelpers.test.d.ts.map +0 -1
  469. package/dist/helpers/dateHelpers.test.d.ts +0 -2
  470. package/dist/helpers/dateHelpers.test.d.ts.map +0 -1
  471. package/dist/helpers/formatters.test.d.ts +0 -5
  472. package/dist/helpers/formatters.test.d.ts.map +0 -1
  473. package/dist/helpers/iconHelpers.test.d.ts +0 -5
  474. package/dist/helpers/iconHelpers.test.d.ts.map +0 -1
  475. package/dist/helpers/numberHelpers.test.d.ts +0 -5
  476. package/dist/helpers/numberHelpers.test.d.ts.map +0 -1
  477. package/dist/helpers/objectHelpers.test.d.ts +0 -2
  478. package/dist/helpers/objectHelpers.test.d.ts.map +0 -1
  479. package/dist/helpers/stringHelpers.test.d.ts +0 -2
  480. package/dist/helpers/stringHelpers.test.d.ts.map +0 -1
  481. package/dist/hooks/InteractiveHostFocus.test.d.ts +0 -5
  482. package/dist/hooks/InteractiveHostFocus.test.d.ts.map +0 -1
  483. package/dist/widgets/processLauncher/ProcessLauncher.test.d.ts +0 -5
  484. package/dist/widgets/processLauncher/ProcessLauncher.test.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownRenderer.js","names":["_react","_interopRequireWildcard","require","_reactMarkdown","_remarkGfm","_interopRequireDefault","_documentHelpers","_plugins","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","remarkPlugins","remarkGfm","remarkLineBreaks","remarkParagraphBreaks","remarkLayoutTables","remarkTableCellLists","remarkSafeTables","rehypePlugins","rehypeTableCleanup","headingTags","rehypeFootnoteLabel","labelId","tree","visit","node","properties","id","dataFootnoteRef","ariaDescribedBy","children","forEach","getHeadingComponents","headingOffset","undefined","fromEntries","map","tag","index","level","HeadingComponent","_node","props","createElement","_extends2","role","MarkdownRenderer","markdown","resolveResourceUrl","cssClass","components","useMemo","footnoteId","useId","scopedRehypePlugins","className","trim","remarkRehypeOptions","clobberPrefix","urlTransform","url","key","resolved","tagName","vetted","resolveDocumentResource","test","defaultUrlTransform","exports","_default"],"sources":["../../../../../../../src/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.tsx"],"sourcesContent":["import React, { createElement, FC, useId, useMemo } from 'react';\nimport ReactMarkdown, { Components, defaultUrlTransform, Options } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\n\nimport { resolveDocumentResource } from '../../documentHelpers';\nimport { ResolveResourceUrl } from '../../documents.interfaces';\nimport {\n rehypeTableCleanup,\n remarkLayoutTables,\n remarkLineBreaks,\n remarkParagraphBreaks,\n remarkSafeTables,\n remarkTableCellLists\n} from './plugins';\nimport { MarkdownNode, MarkdownTransformer } from './plugins/markdownNode.interfaces';\n\nimport './markdownRenderer.scss';\n\nexport type MarkdownRendererProps = {\n markdown: string;\n // Demote headings so an embedded document sits beneath the host page's own heading.\n headingOffset?: number;\n resolveResourceUrl?: ResolveResourceUrl;\n cssClass?: string;\n};\n\nconst remarkPlugins = [\n remarkGfm,\n remarkLineBreaks,\n remarkParagraphBreaks,\n remarkLayoutTables,\n remarkTableCellLists,\n remarkSafeTables\n] as Options['remarkPlugins'];\nconst rehypePlugins = [rehypeTableCleanup] as Options['rehypePlugins'];\nconst headingTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const;\n\n// mdast-util-to-hast prefixes footnote targets but leaves the shared label ID unprefixed.\nconst rehypeFootnoteLabel = (labelId: string): MarkdownTransformer => (tree) => {\n const visit = (node: MarkdownNode) => {\n if (node.properties?.id === 'footnote-label') {\n node.properties.id = labelId;\n }\n if (node.properties?.dataFootnoteRef) {\n node.properties.ariaDescribedBy = [labelId];\n }\n node.children?.forEach(visit);\n };\n visit(tree);\n};\n\nconst getHeadingComponents = (headingOffset: number): Components | undefined => {\n if (headingOffset <= 0) {\n return undefined;\n }\n return Object.fromEntries(headingTags.map((tag, index) => {\n const level = index + 1 + headingOffset;\n const HeadingComponent: FC<React.HTMLAttributes<HTMLHeadingElement> & { node?: unknown }> = (\n // `node` is react-markdown's AST node; it is removed so it is not written to the DOM.\n /* eslint-disable-next-line no-unused-vars */\n { node: _node, ...props }\n ) => (level <= 6\n ? createElement(`h${ level }`, props)\n : <div { ...props } role=\"heading\" aria-level={ level } />);\n return [tag, HeadingComponent];\n })) as Components;\n};\n\nexport const MarkdownRenderer: FC<MarkdownRendererProps> = (\n {\n markdown,\n headingOffset = 0,\n resolveResourceUrl,\n cssClass = ''\n }\n) => {\n const components = useMemo(() => getHeadingComponents(headingOffset), [headingOffset]);\n const footnoteId = useId();\n const scopedRehypePlugins = useMemo(() => [\n ...rehypePlugins ?? [],\n [rehypeFootnoteLabel, `document-${ footnoteId }-footnote-label`]\n ] as Options['rehypePlugins'], [footnoteId]);\n\n return (\n <div className={ `markdownRenderer ${ cssClass }`.trim() }>\n <ReactMarkdown\n remarkPlugins={ remarkPlugins }\n rehypePlugins={ scopedRehypePlugins }\n remarkRehypeOptions={ { clobberPrefix: `document-${ footnoteId }-` } }\n components={ components }\n urlTransform={ (url, key, node) => {\n // react-markdown visits final HAST, including children injected by remarkSafeTables.\n const resolved = resolveResourceUrl ? resolveResourceUrl(url) ?? '' : url;\n if (key === 'src' && node.tagName === 'img') {\n const vetted = resolveDocumentResource(resolved);\n if (/^(?:blob:|data:)/i.test(vetted)) {\n return vetted;\n }\n }\n return defaultUrlTransform(resolved);\n } }\n >\n { markdown }\n </ReactMarkdown>\n </div>\n );\n};\n\nexport default MarkdownRenderer;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,78 @@
1
+ .markdownRenderer {
2
+ padding: var(--markdownRendererPadding, var(--documentPadding, 30px));
3
+ max-width: var(--markdownRendererMaxWidth, 920px);
4
+ font-family: var(--documentFont);
5
+ color: var(--documentFgColor);
6
+ }
7
+ .markdownRenderer h1,
8
+ .markdownRenderer h2,
9
+ .markdownRenderer h3,
10
+ .markdownRenderer h4,
11
+ .markdownRenderer h5,
12
+ .markdownRenderer h6,
13
+ .markdownRenderer [role=heading] {
14
+ margin: var(--markdownRendererHeadingMargin, 25px 0 10px);
15
+ font-family: var(--documentHeadingFont);
16
+ }
17
+ .markdownRenderer h1:first-child,
18
+ .markdownRenderer h2:first-child,
19
+ .markdownRenderer h3:first-child,
20
+ .markdownRenderer h4:first-child,
21
+ .markdownRenderer h5:first-child,
22
+ .markdownRenderer h6:first-child,
23
+ .markdownRenderer [role=heading]:first-child {
24
+ margin-top: 0;
25
+ }
26
+ .markdownRenderer p,
27
+ .markdownRenderer li {
28
+ line-height: var(--markdownRendererLineHeight, 1.6);
29
+ }
30
+ .markdownRenderer table {
31
+ width: 100%;
32
+ border-collapse: collapse;
33
+ margin: var(--markdownRendererTableMargin, 20px 0);
34
+ }
35
+ .markdownRenderer th,
36
+ .markdownRenderer td {
37
+ border: var(--markdownRendererCellBorder, var(--documentBorder));
38
+ padding: var(--markdownRendererCellPadding, 10px);
39
+ vertical-align: top;
40
+ }
41
+ .markdownRenderer th {
42
+ background: var(--markdownRendererTableHeaderBg, var(--documentSubtleBg));
43
+ text-align: left;
44
+ }
45
+ .markdownRenderer td ul {
46
+ margin: 5px 0;
47
+ padding-left: 20px;
48
+ }
49
+ .markdownRenderer td li + li {
50
+ margin-top: 5px;
51
+ }
52
+ .markdownRenderer table.layoutTable > :is(thead, tbody, tfoot) > tr > :is(th, td):first-child:not(:last-child) {
53
+ min-width: var(--markdownRendererLayoutLabelMinWidth, clamp(100px, 20vw, 150px));
54
+ }
55
+ .markdownRenderer th.shortTableCell,
56
+ .markdownRenderer td.shortTableCell {
57
+ white-space: nowrap;
58
+ }
59
+ @media (max-width: 600px) {
60
+ .markdownRenderer th.shortTableCell,
61
+ .markdownRenderer td.shortTableCell {
62
+ white-space: normal;
63
+ }
64
+ }
65
+ .markdownRenderer code {
66
+ background: var(--markdownRendererCodeBg, var(--documentSubtleBg));
67
+ border-radius: var(--documentBorderRadius);
68
+ padding: 0 5px;
69
+ }
70
+ .markdownRenderer pre code {
71
+ display: block;
72
+ padding: 10px;
73
+ overflow-x: auto;
74
+ }
75
+ .markdownRenderer img {
76
+ max-width: 100%;
77
+ height: auto;
78
+ }
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "LAYOUT_TABLE_MARKER", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _tableHelpers.LAYOUT_TABLE_MARKER;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "hasMeaningfulTableText", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _tableHelpers.hasMeaningfulTableText;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "isLikelyLayoutTable", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _tableHelpers.isLikelyLayoutTable;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "rehypeTableCleanup", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _rehypeTableCleanup.rehypeTableCleanup;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "remarkLayoutTables", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _remarkPlugins.remarkLayoutTables;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "remarkLineBreaks", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _remarkPlugins.remarkLineBreaks;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "remarkParagraphBreaks", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _remarkPlugins.remarkParagraphBreaks;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "remarkSafeTables", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _remarkSafeTables.remarkSafeTables;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "remarkTableCellLists", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _remarkPlugins.remarkTableCellLists;
58
+ }
59
+ });
60
+ var _remarkPlugins = require("./remarkPlugins");
61
+ var _remarkSafeTables = require("./remarkSafeTables");
62
+ var _rehypeTableCleanup = require("./rehypeTableCleanup");
63
+ var _tableHelpers = require("./tableHelpers");
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_remarkPlugins","require","_remarkSafeTables","_rehypeTableCleanup","_tableHelpers"],"sources":["../../../../../../../../src/widgets/shared/documents/engines/markdownRenderer/plugins/index.ts"],"sourcesContent":["export {\n remarkLayoutTables,\n remarkLineBreaks,\n remarkParagraphBreaks,\n remarkTableCellLists\n} from './remarkPlugins';\nexport { remarkSafeTables } from './remarkSafeTables';\nexport { rehypeTableCleanup } from './rehypeTableCleanup';\nexport { hasMeaningfulTableText, isLikelyLayoutTable, LAYOUT_TABLE_MARKER } from './tableHelpers';\nexport type { LayoutTableCell } from './tableHelpers';\nexport type { MarkdownNode, MarkdownTransformer } from './markdownNode.interfaces';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAMA,IAAAC,iBAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=markdownNode.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownNode.interfaces.js","names":[],"sources":["../../../../../../../../src/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.ts"],"sourcesContent":["// Minimal structural view of mdast/hast nodes; the plugins only need these fields, which keeps\n// them free of the unified type packages.\nexport type MarkdownNode = {\n type: string;\n value?: string;\n tagName?: string;\n properties?: Record<string, unknown>;\n children?: MarkdownNode[];\n data?: {\n hName?: string;\n hProperties?: Record<string, unknown> & { className?: string[] };\n hChildren?: unknown[];\n };\n};\n\n/* eslint-disable-next-line no-unused-vars */\nexport type MarkdownTransformer = (tree: MarkdownNode) => void;\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.rehypeTableCleanup = void 0;
7
+ var _tableHelpers = require("./tableHelpers");
8
+ const SHORT_TABLE_CELL_MAX_LENGTH = 20;
9
+ const inlineTags = new Set(['strong', 'em', 'b', 'i', 'u', 'del', 's', 'code', 'a', 'span']);
10
+ const mediaTags = ['img', 'svg', 'video', 'audio', 'canvas'];
11
+ const getInlineText = node => {
12
+ if (node.type === 'text') {
13
+ return node.value ?? '';
14
+ }
15
+ if (node.type !== 'element' || !inlineTags.has(node.tagName ?? '')) {
16
+ return undefined;
17
+ }
18
+ const parts = node.children?.map(getInlineText) ?? [];
19
+ return parts.some(part => part === undefined) ? undefined : parts.join('');
20
+ };
21
+ const getClassNames = className => {
22
+ if (Array.isArray(className)) {
23
+ return className;
24
+ }
25
+ return typeof className === 'string' ? className.split(/\s+/) : [];
26
+ };
27
+
28
+ // Short cells (labels, codes, dates) are kept on one line rather than wrapping awkwardly.
29
+ const markShortCell = cell => {
30
+ const parts = cell.children?.map(getInlineText) ?? [];
31
+ if (parts.some(part => part === undefined)) {
32
+ return;
33
+ }
34
+ const text = parts.join('').replace(/\s+/g, ' ').trim();
35
+ if (!text || text.length > SHORT_TABLE_CELL_MAX_LENGTH) {
36
+ return;
37
+ }
38
+ const className = [...new Set([...getClassNames(cell.properties?.className), 'shortTableCell'])];
39
+ cell.properties = {
40
+ ...cell.properties,
41
+ className
42
+ };
43
+ };
44
+ const hasContent = node => node.type === 'text' && (0, _tableHelpers.hasMeaningfulTableText)(node.value ?? '') || node.type === 'element' && mediaTags.includes(node.tagName ?? '') || Boolean(node.children?.some(hasContent));
45
+ const isCell = node => node.tagName === 'td' || node.tagName === 'th';
46
+ const getCells = node => isCell(node) ? [node] : node.children?.flatMap(getCells) ?? [];
47
+
48
+ // Removes tables and table headers that converters emit with no visible content.
49
+ const rehypeTableCleanup = () => {
50
+ const transform = parent => {
51
+ if (isCell(parent)) {
52
+ markShortCell(parent);
53
+ }
54
+ if (!parent.children) {
55
+ return;
56
+ }
57
+ parent.children = parent.children.filter(node => {
58
+ if (node.tagName === 'table' && !getCells(node).some(hasContent)) {
59
+ return false;
60
+ }
61
+ if (parent.tagName === 'table' && node.tagName === 'thead' && !getCells(node).some(hasContent)) {
62
+ return false;
63
+ }
64
+ transform(node);
65
+ return true;
66
+ });
67
+ };
68
+ return transform;
69
+ };
70
+ exports.rehypeTableCleanup = rehypeTableCleanup;
71
+ //# sourceMappingURL=rehypeTableCleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rehypeTableCleanup.js","names":["_tableHelpers","require","SHORT_TABLE_CELL_MAX_LENGTH","inlineTags","Set","mediaTags","getInlineText","node","type","value","has","tagName","undefined","parts","children","map","some","part","join","getClassNames","className","Array","isArray","split","markShortCell","cell","text","replace","trim","length","properties","hasContent","hasMeaningfulTableText","includes","Boolean","isCell","getCells","flatMap","rehypeTableCleanup","transform","parent","filter","exports"],"sources":["../../../../../../../../src/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.ts"],"sourcesContent":["import { hasMeaningfulTableText } from './tableHelpers';\nimport { MarkdownNode, MarkdownTransformer } from './markdownNode.interfaces';\n\nconst SHORT_TABLE_CELL_MAX_LENGTH = 20;\nconst inlineTags = new Set(['strong', 'em', 'b', 'i', 'u', 'del', 's', 'code', 'a', 'span']);\nconst mediaTags = ['img', 'svg', 'video', 'audio', 'canvas'];\n\nconst getInlineText = (node: MarkdownNode): string | undefined => {\n if (node.type === 'text') {\n return node.value ?? '';\n }\n if (node.type !== 'element' || !inlineTags.has(node.tagName ?? '')) {\n return undefined;\n }\n const parts = node.children?.map(getInlineText) ?? [];\n return parts.some((part) => part === undefined) ? undefined : parts.join('');\n};\n\nconst getClassNames = (className: unknown): string[] => {\n if (Array.isArray(className)) {\n return className as string[];\n }\n return typeof className === 'string' ? className.split(/\\s+/) : [];\n};\n\n// Short cells (labels, codes, dates) are kept on one line rather than wrapping awkwardly.\nconst markShortCell = (cell: MarkdownNode): void => {\n const parts = cell.children?.map(getInlineText) ?? [];\n if (parts.some((part) => part === undefined)) {\n return;\n }\n const text = parts.join('').replace(/\\s+/g, ' ').trim();\n if (!text || text.length > SHORT_TABLE_CELL_MAX_LENGTH) {\n return;\n }\n const className = [...new Set([...getClassNames(cell.properties?.className), 'shortTableCell'])];\n cell.properties = { ...cell.properties, className };\n};\n\nconst hasContent = (node: MarkdownNode): boolean =>\n (node.type === 'text' && hasMeaningfulTableText(node.value ?? ''))\n || (node.type === 'element' && mediaTags.includes(node.tagName ?? ''))\n || Boolean(node.children?.some(hasContent));\n\nconst isCell = (node: MarkdownNode): boolean => node.tagName === 'td' || node.tagName === 'th';\n\nconst getCells = (node: MarkdownNode): MarkdownNode[] => (isCell(node) ? [node] : node.children?.flatMap(getCells) ?? []);\n\n// Removes tables and table headers that converters emit with no visible content.\nexport const rehypeTableCleanup = (): MarkdownTransformer => {\n const transform = (parent: MarkdownNode): void => {\n if (isCell(parent)) {\n markShortCell(parent);\n }\n if (!parent.children) {\n return;\n }\n parent.children = parent.children.filter((node) => {\n if (node.tagName === 'table' && !getCells(node).some(hasContent)) {\n return false;\n }\n if (parent.tagName === 'table' && node.tagName === 'thead' && !getCells(node).some(hasContent)) {\n return false;\n }\n transform(node);\n return true;\n });\n };\n return transform;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.remarkTableCellLists = exports.remarkParagraphBreaks = exports.remarkLineBreaks = exports.remarkLayoutTables = void 0;
7
+ var _tableHelpers = require("./tableHelpers");
8
+ const getText = node => node.value ?? node.children?.map(getText).join(' ') ?? '';
9
+
10
+ // Converted documents use `<br>` for line breaks; without raw HTML support they would vanish.
11
+ const remarkLineBreaks = () => {
12
+ const transform = node => {
13
+ if (node.type === 'html' && /^<br\s*\/?>$/i.test(node.value?.trim() ?? '')) {
14
+ node.type = 'break';
15
+ delete node.value;
16
+ }
17
+ node.children?.forEach(transform);
18
+ };
19
+ return transform;
20
+ };
21
+ exports.remarkLineBreaks = remarkLineBreaks;
22
+ const splitInlineContent = nodes => {
23
+ const paragraphs = [[]];
24
+ nodes.forEach(node => {
25
+ let segments;
26
+ if (node.type === 'text') {
27
+ segments = (node.value ?? '').split(/\r?\n/).map(value => [{
28
+ ...node,
29
+ value
30
+ }]);
31
+ } else if (node.children) {
32
+ segments = splitInlineContent(node.children).map(children => [{
33
+ ...node,
34
+ children
35
+ }]);
36
+ } else {
37
+ segments = [[node]];
38
+ }
39
+ segments.forEach((segment, index) => {
40
+ if (index > 0) {
41
+ paragraphs.push([]);
42
+ }
43
+ paragraphs[paragraphs.length - 1].push(...segment);
44
+ });
45
+ });
46
+ return paragraphs;
47
+ };
48
+
49
+ // Source documents treat each line as its own paragraph, whereas markdown joins adjacent lines.
50
+ const remarkParagraphBreaks = () => {
51
+ const transform = parent => {
52
+ if (!parent.children || ['list', 'listItem', 'table', 'tableCell'].includes(parent.type)) {
53
+ return;
54
+ }
55
+ parent.children = parent.children.flatMap(node => {
56
+ if (node.type === 'paragraph') {
57
+ return splitInlineContent(node.children ?? []).map(children => ({
58
+ ...node,
59
+ children
60
+ }));
61
+ }
62
+ transform(node);
63
+ return [node];
64
+ });
65
+ };
66
+ return transform;
67
+ };
68
+ exports.remarkParagraphBreaks = remarkParagraphBreaks;
69
+ const markLayoutTable = node => {
70
+ const properties = node.data?.hProperties ?? {};
71
+ const className = [...new Set([...(properties.className ?? []), 'layoutTable'])];
72
+ node.data = {
73
+ ...node.data,
74
+ hProperties: {
75
+ ...properties,
76
+ className
77
+ }
78
+ };
79
+ };
80
+ const remarkLayoutTables = () => {
81
+ const transform = parent => {
82
+ if (!parent.children) {
83
+ return;
84
+ }
85
+ parent.children = parent.children.filter((node, index, siblings) => {
86
+ const isMarker = node.type === 'html' && node.value?.trim() === _tableHelpers.LAYOUT_TABLE_MARKER;
87
+ if (isMarker && siblings[index + 1]?.type === 'table') {
88
+ markLayoutTable(siblings[index + 1]);
89
+ return false;
90
+ }
91
+ return true;
92
+ });
93
+ parent.children.forEach(node => {
94
+ if (node.type === 'table' && node.children) {
95
+ const rows = node.children.map((row, rowIndex) => row.children?.map(cell => ({
96
+ text: getText(cell),
97
+ isHeader: rowIndex === 0
98
+ })) ?? []);
99
+ if ((0, _tableHelpers.isLikelyLayoutTable)(rows)) {
100
+ markLayoutTable(node);
101
+ }
102
+ }
103
+ transform(node);
104
+ });
105
+ };
106
+ return transform;
107
+ };
108
+ exports.remarkLayoutTables = remarkLayoutTables;
109
+ const getInlineList = (text, allowSingleLeadingBullet = false) => {
110
+ const leadingBullets = /^-\s+(.+)\.$/.exec(text);
111
+ if (leadingBullets) {
112
+ const items = leadingBullets[1].split(/\.\s+-\s+/).map(item => item.trim());
113
+ if ((items.length >= 2 || allowSingleLeadingBullet) && items.every(Boolean)) {
114
+ return {
115
+ prefix: '',
116
+ items: items.map(item => `${item}.`)
117
+ };
118
+ }
119
+ }
120
+ const prefixedBullets = /^(.*?:)\s+-\s+(.+)$/.exec(text);
121
+ if (!prefixedBullets) {
122
+ return null;
123
+ }
124
+ const items = prefixedBullets[2].split(/;\s+(?:and\s+)?-\s+/).map(item => item.trim());
125
+ if (items.length < 2 || items.some(item => !item)) {
126
+ return null;
127
+ }
128
+ return {
129
+ prefix: `${prefixedBullets[1]} `,
130
+ items: items.map((item, index) => index < items.length - 1 ? `${item};` : item)
131
+ };
132
+ };
133
+ const getPlainText = cell => cell.children?.length === 1 && cell.children[0].type === 'text' ? cell.children[0].value ?? '' : null;
134
+ const setCellList = (cell, list) => {
135
+ cell.children = [...(list.prefix ? [{
136
+ type: 'text',
137
+ value: list.prefix
138
+ }] : []), {
139
+ type: 'list',
140
+ children: list.items.map(value => ({
141
+ type: 'listItem',
142
+ children: [{
143
+ type: 'paragraph',
144
+ children: [{
145
+ type: 'text',
146
+ value
147
+ }]
148
+ }]
149
+ }))
150
+ }];
151
+ };
152
+ const getCells = row => row?.children?.filter(cell => cell.type === 'tableCell') ?? [];
153
+ const containsList = cell => cell?.children?.some(child => child.type === 'list') ?? false;
154
+
155
+ // A lone "- item." is only a list when the same column holds a list in a neighbouring row.
156
+ const convertRelatedSingleBullets = table => {
157
+ const rows = table.children?.filter(row => row.type === 'tableRow') ?? [];
158
+ rows.forEach((row, rowIndex) => {
159
+ getCells(row).forEach((cell, cellIndex) => {
160
+ const text = getPlainText(cell);
161
+ const list = text === null ? null : getInlineList(text, true);
162
+ if (list?.items.length !== 1) {
163
+ return;
164
+ }
165
+ if (containsList(getCells(rows[rowIndex - 1])[cellIndex]) || containsList(getCells(rows[rowIndex + 1])[cellIndex])) {
166
+ setCellList(cell, list);
167
+ }
168
+ });
169
+ });
170
+ };
171
+
172
+ // Table cells cannot hold markdown lists, so converters flatten them to "- a. - b." text.
173
+ const remarkTableCellLists = () => {
174
+ const transform = node => {
175
+ if (node.type === 'table') {
176
+ node.children?.forEach(transform);
177
+ convertRelatedSingleBullets(node);
178
+ return;
179
+ }
180
+ if (node.type === 'tableCell') {
181
+ const text = getPlainText(node);
182
+ const list = text === null ? null : getInlineList(text);
183
+ if (list) {
184
+ setCellList(node, list);
185
+ }
186
+ }
187
+ node.children?.forEach(transform);
188
+ };
189
+ return transform;
190
+ };
191
+ exports.remarkTableCellLists = remarkTableCellLists;
192
+ //# sourceMappingURL=remarkPlugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remarkPlugins.js","names":["_tableHelpers","require","getText","node","value","children","map","join","remarkLineBreaks","transform","type","test","trim","forEach","exports","splitInlineContent","nodes","paragraphs","segments","split","segment","index","push","length","remarkParagraphBreaks","parent","includes","flatMap","markLayoutTable","properties","data","hProperties","className","Set","remarkLayoutTables","filter","siblings","isMarker","LAYOUT_TABLE_MARKER","rows","row","rowIndex","cell","text","isHeader","isLikelyLayoutTable","getInlineList","allowSingleLeadingBullet","leadingBullets","exec","items","item","every","Boolean","prefix","prefixedBullets","some","getPlainText","setCellList","list","getCells","containsList","child","convertRelatedSingleBullets","table","cellIndex","remarkTableCellLists"],"sources":["../../../../../../../../src/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.ts"],"sourcesContent":["import { isLikelyLayoutTable, LAYOUT_TABLE_MARKER } from './tableHelpers';\nimport { MarkdownNode, MarkdownTransformer } from './markdownNode.interfaces';\n\nconst getText = (node: MarkdownNode): string => node.value ?? node.children?.map(getText).join(' ') ?? '';\n\n// Converted documents use `<br>` for line breaks; without raw HTML support they would vanish.\nexport const remarkLineBreaks = (): MarkdownTransformer => {\n const transform = (node: MarkdownNode): void => {\n if (node.type === 'html' && /^<br\\s*\\/?>$/i.test(node.value?.trim() ?? '')) {\n node.type = 'break';\n delete node.value;\n }\n node.children?.forEach(transform);\n };\n return transform;\n};\n\nconst splitInlineContent = (nodes: MarkdownNode[]): MarkdownNode[][] => {\n const paragraphs: MarkdownNode[][] = [[]];\n nodes.forEach((node) => {\n let segments: MarkdownNode[][];\n if (node.type === 'text') {\n segments = (node.value ?? '').split(/\\r?\\n/).map((value) => [{ ...node, value }]);\n } else if (node.children) {\n segments = splitInlineContent(node.children).map((children) => [{ ...node, children }]);\n } else {\n segments = [[node]];\n }\n segments.forEach((segment, index) => {\n if (index > 0) {\n paragraphs.push([]);\n }\n paragraphs[paragraphs.length - 1].push(...segment);\n });\n });\n return paragraphs;\n};\n\n// Source documents treat each line as its own paragraph, whereas markdown joins adjacent lines.\nexport const remarkParagraphBreaks = (): MarkdownTransformer => {\n const transform = (parent: MarkdownNode): void => {\n if (!parent.children || ['list', 'listItem', 'table', 'tableCell'].includes(parent.type)) {\n return;\n }\n parent.children = parent.children.flatMap((node) => {\n if (node.type === 'paragraph') {\n return splitInlineContent(node.children ?? []).map((children) => ({ ...node, children }));\n }\n transform(node);\n return [node];\n });\n };\n return transform;\n};\n\nconst markLayoutTable = (node: MarkdownNode): void => {\n const properties = node.data?.hProperties ?? {};\n const className = [...new Set([...(properties.className ?? []), 'layoutTable'])];\n node.data = { ...node.data, hProperties: { ...properties, className } };\n};\n\nexport const remarkLayoutTables = (): MarkdownTransformer => {\n const transform = (parent: MarkdownNode): void => {\n if (!parent.children) {\n return;\n }\n parent.children = parent.children.filter((node, index, siblings) => {\n const isMarker = node.type === 'html' && node.value?.trim() === LAYOUT_TABLE_MARKER;\n if (isMarker && siblings[index + 1]?.type === 'table') {\n markLayoutTable(siblings[index + 1]);\n return false;\n }\n return true;\n });\n parent.children.forEach((node) => {\n if (node.type === 'table' && node.children) {\n const rows = node.children.map((row, rowIndex) =>\n row.children?.map((cell) => ({ text: getText(cell), isHeader: rowIndex === 0 })) ?? []\n );\n if (isLikelyLayoutTable(rows)) {\n markLayoutTable(node);\n }\n }\n transform(node);\n });\n };\n return transform;\n};\n\ntype InlineList = {\n prefix: string;\n items: string[];\n};\n\nconst getInlineList = (text: string, allowSingleLeadingBullet = false): InlineList | null => {\n const leadingBullets = /^-\\s+(.+)\\.$/.exec(text);\n if (leadingBullets) {\n const items = leadingBullets[1].split(/\\.\\s+-\\s+/).map((item) => item.trim());\n if ((items.length >= 2 || allowSingleLeadingBullet) && items.every(Boolean)) {\n return { prefix: '', items: items.map((item) => `${ item }.`) };\n }\n }\n\n const prefixedBullets = /^(.*?:)\\s+-\\s+(.+)$/.exec(text);\n if (!prefixedBullets) {\n return null;\n }\n const items = prefixedBullets[2].split(/;\\s+(?:and\\s+)?-\\s+/).map((item) => item.trim());\n if (items.length < 2 || items.some((item) => !item)) {\n return null;\n }\n return {\n prefix: `${ prefixedBullets[1] } `,\n items: items.map((item, index) => (index < items.length - 1 ? `${ item };` : item))\n };\n};\n\nconst getPlainText = (cell: MarkdownNode): string | null =>\n cell.children?.length === 1 && cell.children[0].type === 'text' ? cell.children[0].value ?? '' : null;\n\nconst setCellList = (cell: MarkdownNode, list: InlineList): void => {\n cell.children = [\n ...(list.prefix ? [{ type: 'text', value: list.prefix }] : []),\n {\n type: 'list',\n children: list.items.map((value) => ({\n type: 'listItem',\n children: [{ type: 'paragraph', children: [{ type: 'text', value }] }]\n }))\n }\n ];\n};\n\nconst getCells = (row: MarkdownNode | undefined): MarkdownNode[] => row?.children?.filter((cell) => cell.type === 'tableCell') ?? [];\n\nconst containsList = (cell: MarkdownNode | undefined): boolean => cell?.children?.some((child) => child.type === 'list') ?? false;\n\n// A lone \"- item.\" is only a list when the same column holds a list in a neighbouring row.\nconst convertRelatedSingleBullets = (table: MarkdownNode): void => {\n const rows = table.children?.filter((row) => row.type === 'tableRow') ?? [];\n rows.forEach((row, rowIndex) => {\n getCells(row).forEach((cell, cellIndex) => {\n const text = getPlainText(cell);\n const list = text === null ? null : getInlineList(text, true);\n if (list?.items.length !== 1) {\n return;\n }\n if (containsList(getCells(rows[rowIndex - 1])[cellIndex]) || containsList(getCells(rows[rowIndex + 1])[cellIndex])) {\n setCellList(cell, list);\n }\n });\n });\n};\n\n// Table cells cannot hold markdown lists, so converters flatten them to \"- a. - b.\" text.\nexport const remarkTableCellLists = (): MarkdownTransformer => {\n const transform = (node: MarkdownNode): void => {\n if (node.type === 'table') {\n node.children?.forEach(transform);\n convertRelatedSingleBullets(node);\n return;\n }\n if (node.type === 'tableCell') {\n const text = getPlainText(node);\n const list = text === null ? null : getInlineList(text);\n if (list) {\n setCellList(node, list);\n }\n }\n node.children?.forEach(transform);\n };\n return transform;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.remarkSafeTables = void 0;
8
+ var _dompurify = _interopRequireDefault(require("dompurify"));
9
+ var _tableHelpers = require("./tableHelpers");
10
+ const ALLOWED_TABLE_TAGS = ['table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', 'caption', 'colgroup', 'col', 'p', 'br', 'strong', 'em', 'b', 'i', 'u', 'del', 's', 'code', 'pre', 'ul', 'ol', 'li', 'a', 'img', 'span', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
11
+ const ALLOWED_TABLE_ATTRIBUTES = ['colspan', 'rowspan', 'href', 'src', 'alt', 'title', 'class'];
12
+ const ALLOWED_CLASS_NAMES = ['layoutTable'];
13
+ const toHastProperties = element => {
14
+ const properties = {};
15
+ Array.from(element.attributes).forEach(({
16
+ name,
17
+ value
18
+ }) => {
19
+ if (name === 'class') {
20
+ const className = value.split(/\s+/).filter(item => ALLOWED_CLASS_NAMES.includes(item));
21
+ if (className.length) {
22
+ properties.className = className;
23
+ }
24
+ } else if (name === 'colspan' || name === 'rowspan') {
25
+ const span = Number(value);
26
+ if (Number.isInteger(span) && span > 0) {
27
+ properties[name === 'colspan' ? 'colSpan' : 'rowSpan'] = span;
28
+ }
29
+ } else {
30
+ properties[name] = value;
31
+ }
32
+ });
33
+ return properties;
34
+ };
35
+ const toHast = node => {
36
+ if (node.nodeType === Node.TEXT_NODE) {
37
+ return {
38
+ type: 'text',
39
+ value: node.textContent ?? ''
40
+ };
41
+ }
42
+ if (node.nodeType !== Node.ELEMENT_NODE) {
43
+ return null;
44
+ }
45
+ const element = node;
46
+ return {
47
+ type: 'element',
48
+ tagName: element.tagName.toLowerCase(),
49
+ properties: toHastProperties(element),
50
+ children: Array.from(element.childNodes).map(toHast).filter(child => child !== null)
51
+ };
52
+ };
53
+ const sanitizeTable = html => {
54
+ const fragment = _dompurify.default.sanitize(html, {
55
+ ALLOWED_TAGS: ALLOWED_TABLE_TAGS,
56
+ ALLOWED_ATTR: ALLOWED_TABLE_ATTRIBUTES,
57
+ RETURN_DOM_FRAGMENT: true
58
+ });
59
+ const meaningfulNodes = Array.from(fragment.childNodes).filter(child => child.nodeType !== Node.TEXT_NODE || (0, _tableHelpers.hasMeaningfulTableText)(child.textContent ?? ''));
60
+ const [onlyNode] = meaningfulNodes;
61
+ return meaningfulNodes.length === 1 && onlyNode instanceof Element && onlyNode.tagName === 'TABLE' ? onlyNode : null;
62
+ };
63
+
64
+ // Converters fall back to raw `<table>` HTML for merged cells, which markdown cannot express.
65
+ // Only a single, sanitised table is rendered; any other raw HTML stays inert text.
66
+ const remarkSafeTables = () => {
67
+ const transform = node => {
68
+ if (node.type === 'html' && /^<table(?:\s|>)/i.test(node.value?.trim() ?? '')) {
69
+ const table = sanitizeTable(node.value ?? '');
70
+ const hast = table ? toHast(table) : null;
71
+ if (hast?.type === 'element') {
72
+ node.type = 'safeDocumentTable';
73
+ node.data = {
74
+ hName: 'table',
75
+ hProperties: hast.properties,
76
+ hChildren: hast.children
77
+ };
78
+ delete node.value;
79
+ }
80
+ }
81
+ node.children?.forEach(transform);
82
+ };
83
+ return transform;
84
+ };
85
+ exports.remarkSafeTables = remarkSafeTables;
86
+ //# sourceMappingURL=remarkSafeTables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remarkSafeTables.js","names":["_dompurify","_interopRequireDefault","require","_tableHelpers","ALLOWED_TABLE_TAGS","ALLOWED_TABLE_ATTRIBUTES","ALLOWED_CLASS_NAMES","toHastProperties","element","properties","Array","from","attributes","forEach","name","value","className","split","filter","item","includes","length","span","Number","isInteger","toHast","node","nodeType","Node","TEXT_NODE","type","textContent","ELEMENT_NODE","tagName","toLowerCase","children","childNodes","map","child","sanitizeTable","html","fragment","DOMPurify","sanitize","ALLOWED_TAGS","ALLOWED_ATTR","RETURN_DOM_FRAGMENT","meaningfulNodes","hasMeaningfulTableText","onlyNode","Element","remarkSafeTables","transform","test","trim","table","hast","data","hName","hProperties","hChildren","exports"],"sources":["../../../../../../../../src/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.ts"],"sourcesContent":["import DOMPurify from 'dompurify';\n\nimport { hasMeaningfulTableText } from './tableHelpers';\nimport { MarkdownNode, MarkdownTransformer } from './markdownNode.interfaces';\n\nconst ALLOWED_TABLE_TAGS = [\n 'table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', 'caption', 'colgroup', 'col',\n 'p', 'br', 'strong', 'em', 'b', 'i', 'u', 'del', 's', 'code', 'pre', 'ul', 'ol', 'li',\n 'a', 'img', 'span', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'\n];\nconst ALLOWED_TABLE_ATTRIBUTES = ['colspan', 'rowspan', 'href', 'src', 'alt', 'title', 'class'];\nconst ALLOWED_CLASS_NAMES = ['layoutTable'];\n\ntype HastNode =\n | { type: 'text'; value: string }\n | { type: 'element'; tagName: string; properties: Record<string, unknown>; children: HastNode[] };\n\nconst toHastProperties = (element: Element): Record<string, unknown> => {\n const properties: Record<string, unknown> = {};\n Array.from(element.attributes).forEach(({ name, value }) => {\n if (name === 'class') {\n const className = value.split(/\\s+/).filter((item) => ALLOWED_CLASS_NAMES.includes(item));\n if (className.length) {\n properties.className = className;\n }\n } else if (name === 'colspan' || name === 'rowspan') {\n const span = Number(value);\n if (Number.isInteger(span) && span > 0) {\n properties[name === 'colspan' ? 'colSpan' : 'rowSpan'] = span;\n }\n } else {\n properties[name] = value;\n }\n });\n return properties;\n};\n\nconst toHast = (node: Node): HastNode | null => {\n if (node.nodeType === Node.TEXT_NODE) {\n return { type: 'text', value: node.textContent ?? '' };\n }\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return null;\n }\n const element = node as Element;\n return {\n type: 'element',\n tagName: element.tagName.toLowerCase(),\n properties: toHastProperties(element),\n children: Array.from(element.childNodes).map(toHast).filter((child): child is HastNode => child !== null)\n };\n};\n\nconst sanitizeTable = (html: string): Element | null => {\n const fragment = DOMPurify.sanitize(html, {\n ALLOWED_TAGS: ALLOWED_TABLE_TAGS,\n ALLOWED_ATTR: ALLOWED_TABLE_ATTRIBUTES,\n RETURN_DOM_FRAGMENT: true\n });\n const meaningfulNodes = Array.from(fragment.childNodes).filter((child) =>\n child.nodeType !== Node.TEXT_NODE || hasMeaningfulTableText(child.textContent ?? '')\n );\n const [onlyNode] = meaningfulNodes;\n return meaningfulNodes.length === 1 && onlyNode instanceof Element && onlyNode.tagName === 'TABLE' ? onlyNode : null;\n};\n\n// Converters fall back to raw `<table>` HTML for merged cells, which markdown cannot express.\n// Only a single, sanitised table is rendered; any other raw HTML stays inert text.\nexport const remarkSafeTables = (): MarkdownTransformer => {\n const transform = (node: MarkdownNode): void => {\n if (node.type === 'html' && /^<table(?:\\s|>)/i.test(node.value?.trim() ?? '')) {\n const table = sanitizeTable(node.value ?? '');\n const hast = table ? toHast(table) : null;\n if (hast?.type === 'element') {\n node.type = 'safeDocumentTable';\n node.data = {\n hName: 'table',\n hProperties: hast.properties as Record<string, unknown> & { className?: string[] },\n hChildren: hast.children\n };\n delete node.value;\n }\n }\n node.children?.forEach(transform);\n };\n return transform;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isLikelyLayoutTable = exports.hasMeaningfulTableText = exports.LAYOUT_TABLE_MARKER = void 0;
7
+ // Converters can emit this marker before a table they know is used for layout rather than data.
8
+ const LAYOUT_TABLE_MARKER = exports.LAYOUT_TABLE_MARKER = '<!-- layoutTable -->';
9
+
10
+ // Zero-width spaces and byte-order marks are common in converted cells and carry no content.
11
+ const INVISIBLE_CHARACTERS = [0x200b, 0xfeff].map(code => String.fromCharCode(code));
12
+ const hasMeaningfulTableText = text => Array.from(text).some(character => !/\s/.test(character) && !INVISIBLE_CHARACTERS.includes(character));
13
+ exports.hasMeaningfulTableText = hasMeaningfulTableText;
14
+ const isProse = text => text.trim().length > 40 && text.trim().split(/\s+/).length >= 8;
15
+ const isLabelAndBodyRow = row => {
16
+ const label = row[0]?.text.trim() ?? '';
17
+ const body = row[1]?.text.trim() ?? '';
18
+ return label.length > 0 && label.length <= 90 && label.split(/\s+/).length <= 12 && !/[.!?]$/.test(label) && isProse(body) && body.length > label.length * 2;
19
+ };
20
+
21
+ // Documents converted from Word often use one- or two-column tables to lay out prose
22
+ // (a short label beside a paragraph). Those read better styled as text than as a data grid.
23
+ const isLikelyLayoutTable = rows => {
24
+ const meaningfulRows = rows.filter(row => row.some(cell => cell.text.trim()));
25
+ if (!meaningfulRows.length || Math.max(...meaningfulRows.map(row => row.length)) > 2) {
26
+ return false;
27
+ }
28
+ if (meaningfulRows[0].every(cell => cell.isHeader && cell.text.trim())) {
29
+ return false;
30
+ }
31
+ const layoutRows = meaningfulRows.filter(row => {
32
+ const populated = row.filter(cell => cell.text.trim());
33
+ return populated.length === 1 ? isProse(populated[0].text) : isLabelAndBodyRow(row);
34
+ });
35
+ return layoutRows.length >= Math.max(1, Math.ceil(meaningfulRows.length * 0.6));
36
+ };
37
+ exports.isLikelyLayoutTable = isLikelyLayoutTable;
38
+ //# sourceMappingURL=tableHelpers.js.map