@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,200 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.MarkdownEditorEngine = exports.DEFAULT_TOOLBAR_ITEMS = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _editor = require("@mdxeditor/editor");
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _AnnotationLayer = require("../../annotations/AnnotationLayer");
12
+ var _sanitizeForMdx = require("./sanitizeForMdx");
13
+ var _sourceAnnotations = require("./sourceAnnotations");
14
+ require("@mdxeditor/editor/style.css");
15
+ require("./markdownEditorEngine.css");
16
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
17
+ const DEFAULT_TOOLBAR_ITEMS = exports.DEFAULT_TOOLBAR_ITEMS = ['undoRedo', 'blockType', 'formatting', 'lists', 'link', 'table', 'thematicBreak'];
18
+ const DEFAULT_LIST_TYPES = ['bullet', 'number'];
19
+ const ALLOWED_HTML = [{
20
+ tag: 'img',
21
+ attrs: ['src', 'alt', 'width', 'height']
22
+ }, {
23
+ tag: 'br'
24
+ }];
25
+ // Consistent serialisation keeps saved documents stable and diffs free of formatting noise.
26
+ const TO_MARKDOWN_OPTIONS = {
27
+ listItemIndent: 'one',
28
+ bullet: '-',
29
+ emphasis: '_',
30
+ strong: '*',
31
+ rule: '-'
32
+ };
33
+
34
+ // Code blocks are edited as plain text, avoiding a syntax-highlighting editor per language.
35
+ const createPlainTextCodeEditor = readOnly => ({
36
+ match: () => true,
37
+ priority: 0,
38
+ Editor: ({
39
+ code
40
+ }) => {
41
+ const codeBlock = (0, _editor.useCodeBlockEditorContext)();
42
+ return (
43
+ /*#__PURE__*/
44
+ // Stops the surrounding rich-text editor handling key presses meant for the code block.
45
+ _react.default.createElement("div", {
46
+ role: "none",
47
+ onKeyDown: event => event.nativeEvent.stopImmediatePropagation()
48
+ }, /*#__PURE__*/_react.default.createElement("textarea", {
49
+ className: "markdownEditorEngine__codeBlock",
50
+ defaultValue: code,
51
+ readOnly: readOnly,
52
+ onChange: event => codeBlock.setCode(event.target.value)
53
+ }))
54
+ );
55
+ }
56
+ });
57
+ const renderToolbarItem = (item, listTypes) => {
58
+ switch (item) {
59
+ case 'undoRedo':
60
+ return /*#__PURE__*/_react.default.createElement(_editor.UndoRedo, null);
61
+ case 'blockType':
62
+ return /*#__PURE__*/_react.default.createElement(_editor.BlockTypeSelect, null);
63
+ case 'formatting':
64
+ return /*#__PURE__*/_react.default.createElement(_editor.BoldItalicUnderlineToggles, null);
65
+ case 'lists':
66
+ return /*#__PURE__*/_react.default.createElement(_editor.ListsToggle, {
67
+ options: listTypes
68
+ });
69
+ case 'link':
70
+ return /*#__PURE__*/_react.default.createElement(_editor.CreateLink, null);
71
+ case 'image':
72
+ return /*#__PURE__*/_react.default.createElement(_editor.InsertImage, null);
73
+ case 'table':
74
+ return /*#__PURE__*/_react.default.createElement(_editor.InsertTable, null);
75
+ case 'thematicBreak':
76
+ return /*#__PURE__*/_react.default.createElement(_editor.InsertThematicBreak, null);
77
+ case 'codeBlock':
78
+ return /*#__PURE__*/_react.default.createElement(_editor.InsertCodeBlock, null);
79
+ default:
80
+ return null;
81
+ }
82
+ };
83
+
84
+ // Comments in the rich-text view are anchored to the editable content, not the toolbar or dialogs.
85
+ const findRichTextRoot = content => content.querySelector('.markdownEditorEngine__content');
86
+
87
+ /*
88
+ Rich-text markdown editing built on MDXEditor. Loaded lazily by the document widgets because
89
+ MDXEditor and its dependencies are large.
90
+ */
91
+ const MarkdownEditorEngine = ({
92
+ markdown,
93
+ onChange,
94
+ readOnly = false,
95
+ viewMode = 'rich-text',
96
+ viewModes = ['rich-text', 'source'],
97
+ diffMarkdown,
98
+ toolbarItems = DEFAULT_TOOLBAR_ITEMS,
99
+ listTypes = DEFAULT_LIST_TYPES,
100
+ imageUploadHandler,
101
+ imagePreviewHandler,
102
+ contentCssClass = '',
103
+ annotations,
104
+ annotationLayerId = 'markdownEditorAnnotations',
105
+ onParseError
106
+ }) => {
107
+ const editorRef = (0, _react.useRef)(null);
108
+ const [sourceSelection, setSourceSelection] = (0, _react.useState)(null);
109
+
110
+ // The handlers read the latest props through a ref so the CodeMirror extension can stay stable.
111
+ const annotationsRef = (0, _react.useRef)(annotations);
112
+ annotationsRef.current = annotations;
113
+ const [sourceAnnotations] = (0, _react.useState)(() => (0, _sourceAnnotations.createSourceAnnotations)({
114
+ onSelectionChange: setSourceSelection,
115
+ onSelectComment: commentId => annotationsRef.current?.onSelectComment?.(commentId)
116
+ }));
117
+ const hasAnnotations = annotations !== undefined;
118
+ const codeMirrorExtensions = (0, _react.useMemo)(() => hasAnnotations ? [sourceAnnotations.extension] : [], [hasAnnotations, sourceAnnotations]);
119
+ (0, _react.useEffect)(() => {
120
+ if (annotations) {
121
+ sourceAnnotations.update({
122
+ comments: annotations.comments,
123
+ selectedCommentId: annotations.selectedCommentId,
124
+ showResolved: annotations.showResolved
125
+ });
126
+ }
127
+ }, [annotations, sourceAnnotations]);
128
+ const safeMarkdown = (0, _react.useMemo)(() => (0, _sanitizeForMdx.sanitizeEditorInput)(markdown, ALLOWED_HTML), [markdown]);
129
+ const safeDiffMarkdown = (0, _react.useMemo)(() => (0, _sanitizeForMdx.sanitizeEditorInput)(diffMarkdown ?? markdown, ALLOWED_HTML), [diffMarkdown, markdown]);
130
+
131
+ // MDXEditor only reads `markdown` on mount. Read-only content (e.g. streamed output) is pushed in
132
+ // imperatively; while editing, external updates are ignored so they never overwrite the user's input.
133
+ (0, _react.useEffect)(() => {
134
+ if (readOnly) {
135
+ editorRef.current?.setMarkdown(safeMarkdown);
136
+ }
137
+ }, [readOnly, safeMarkdown]);
138
+ const plugins = (0, _react.useMemo)(() => {
139
+ const showToolbar = !readOnly && (toolbarItems.length > 0 || viewModes.length > 1);
140
+ const items = toolbarItems.filter(item => item !== 'image' || imageUploadHandler);
141
+ return [(0, _editor.headingsPlugin)(), (0, _editor.listsPlugin)(), (0, _editor.quotePlugin)(), (0, _editor.thematicBreakPlugin)(), (0, _editor.linkPlugin)(), (0, _editor.linkDialogPlugin)(), (0, _editor.tablePlugin)(), (0, _editor.imagePlugin)({
142
+ imageUploadHandler: imageUploadHandler ?? null,
143
+ ...(imagePreviewHandler ? {
144
+ imagePreviewHandler
145
+ } : {})
146
+ }), (0, _editor.codeBlockPlugin)({
147
+ codeBlockEditorDescriptors: [createPlainTextCodeEditor(readOnly)]
148
+ }), (0, _editor.markdownShortcutPlugin)(), (0, _editor.diffSourcePlugin)({
149
+ diffMarkdown: safeDiffMarkdown,
150
+ viewMode,
151
+ readOnlyDiff: true,
152
+ codeMirrorExtensions
153
+ }), ...(showToolbar ? [(0, _editor.toolbarPlugin)({
154
+ toolbarContents: () => /*#__PURE__*/_react.default.createElement(_editor.DiffSourceToggleWrapper, {
155
+ options: viewModes
156
+ }, items.map((item, index) => /*#__PURE__*/_react.default.createElement(_react.Fragment, {
157
+ key: item
158
+ }, index > 0 && /*#__PURE__*/_react.default.createElement(_editor.Separator, null), renderToolbarItem(item, listTypes))))
159
+ })] : [])];
160
+ }, [readOnly, toolbarItems, viewModes, imageUploadHandler, imagePreviewHandler, safeDiffMarkdown, viewMode, listTypes, codeMirrorExtensions]);
161
+ const handleChange = (0, _react.useCallback)((nextMarkdown, initialMarkdownNormalize) => {
162
+ // The first change event is MDXEditor normalising the input, not a user edit.
163
+ if (!readOnly && !initialMarkdownNormalize) {
164
+ onChange?.((0, _sanitizeForMdx.desanitizeEditorOutput)(nextMarkdown));
165
+ }
166
+ }, [readOnly, onChange]);
167
+ const handleError = (0, _react.useCallback)(({
168
+ error
169
+ }) => {
170
+ // Deferred because MDXEditor can report errors while building its initial state, and updating
171
+ // another component's state during render triggers a React warning.
172
+ queueMicrotask(() => onParseError?.(error));
173
+ }, [onParseError]);
174
+ const editor = /*#__PURE__*/_react.default.createElement(_editor.MDXEditor, {
175
+ ref: editorRef
176
+ // Plugins cannot change after mount, so remount when the mode or editability changes.
177
+ ,
178
+ key: `${viewMode}_${readOnly}`,
179
+ className: "markdownEditorEngine",
180
+ contentEditableClassName: `markdownEditorEngine__content ${contentCssClass}`.trim(),
181
+ markdown: safeMarkdown,
182
+ readOnly: readOnly,
183
+ plugins: plugins,
184
+ onChange: handleChange,
185
+ onError: handleError,
186
+ toMarkdownOptions: TO_MARKDOWN_OPTIONS
187
+ });
188
+ if (!annotations) {
189
+ return editor;
190
+ }
191
+ return /*#__PURE__*/_react.default.createElement(_AnnotationLayer.AnnotationLayer, (0, _extends2.default)({}, annotations, {
192
+ id: annotationLayerId,
193
+ getTextRoot: findRichTextRoot,
194
+ externalSelection: sourceSelection,
195
+ onExternalSelectionConsumed: () => setSourceSelection(null)
196
+ }), editor);
197
+ };
198
+ exports.MarkdownEditorEngine = MarkdownEditorEngine;
199
+ var _default = exports.default = MarkdownEditorEngine;
200
+ //# sourceMappingURL=MarkdownEditorEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownEditorEngine.js","names":["_editor","require","_react","_interopRequireWildcard","_AnnotationLayer","_sanitizeForMdx","_sourceAnnotations","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_TOOLBAR_ITEMS","exports","DEFAULT_LIST_TYPES","ALLOWED_HTML","tag","attrs","TO_MARKDOWN_OPTIONS","listItemIndent","bullet","emphasis","strong","rule","createPlainTextCodeEditor","readOnly","match","priority","Editor","code","codeBlock","useCodeBlockEditorContext","createElement","role","onKeyDown","event","nativeEvent","stopImmediatePropagation","className","defaultValue","onChange","setCode","target","value","renderToolbarItem","item","listTypes","UndoRedo","BlockTypeSelect","BoldItalicUnderlineToggles","ListsToggle","options","CreateLink","InsertImage","InsertTable","InsertThematicBreak","InsertCodeBlock","findRichTextRoot","content","querySelector","MarkdownEditorEngine","markdown","viewMode","viewModes","diffMarkdown","toolbarItems","imageUploadHandler","imagePreviewHandler","contentCssClass","annotations","annotationLayerId","onParseError","editorRef","useRef","sourceSelection","setSourceSelection","useState","annotationsRef","current","sourceAnnotations","createSourceAnnotations","onSelectionChange","onSelectComment","commentId","hasAnnotations","undefined","codeMirrorExtensions","useMemo","extension","useEffect","update","comments","selectedCommentId","showResolved","safeMarkdown","sanitizeEditorInput","safeDiffMarkdown","setMarkdown","plugins","showToolbar","length","items","filter","headingsPlugin","listsPlugin","quotePlugin","thematicBreakPlugin","linkPlugin","linkDialogPlugin","tablePlugin","imagePlugin","codeBlockPlugin","codeBlockEditorDescriptors","markdownShortcutPlugin","diffSourcePlugin","readOnlyDiff","toolbarPlugin","toolbarContents","DiffSourceToggleWrapper","map","index","Fragment","key","Separator","handleChange","useCallback","nextMarkdown","initialMarkdownNormalize","desanitizeEditorOutput","handleError","error","queueMicrotask","editor","MDXEditor","ref","contentEditableClassName","trim","onError","toMarkdownOptions","AnnotationLayer","_extends2","id","getTextRoot","externalSelection","onExternalSelectionConsumed","_default"],"sources":["../../../../../../../src/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.tsx"],"sourcesContent":["import {\n BlockTypeSelect,\n BoldItalicUnderlineToggles,\n codeBlockPlugin,\n CodeBlockEditorDescriptor,\n CreateLink,\n diffSourcePlugin,\n DiffSourceToggleWrapper,\n headingsPlugin,\n imagePlugin,\n InsertCodeBlock,\n InsertImage,\n InsertTable,\n InsertThematicBreak,\n linkDialogPlugin,\n linkPlugin,\n listsPlugin,\n ListsToggle,\n markdownShortcutPlugin,\n MDXEditor,\n MDXEditorMethods,\n quotePlugin,\n RealmPlugin,\n Separator,\n tablePlugin,\n thematicBreakPlugin,\n toolbarPlugin,\n UndoRedo,\n useCodeBlockEditorContext\n} from '@mdxeditor/editor';\nimport React, { FC, Fragment, ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { AnnotationLayer } from '../../annotations/AnnotationLayer';\nimport {\n MarkdownEditorEngineProps,\n MarkdownEditorListType,\n MarkdownEditorToolbarItem\n} from './markdownEditorEngine.interfaces';\nimport { AllowedHtmlEntry, desanitizeEditorOutput, sanitizeEditorInput } from './sanitizeForMdx';\nimport { createSourceAnnotations, SourceSelection } from './sourceAnnotations';\n\nimport '@mdxeditor/editor/style.css';\nimport './markdownEditorEngine.scss';\n\nexport const DEFAULT_TOOLBAR_ITEMS: MarkdownEditorToolbarItem[] = [\n 'undoRedo', 'blockType', 'formatting', 'lists', 'link', 'table', 'thematicBreak'\n];\nconst DEFAULT_LIST_TYPES: MarkdownEditorListType[] = ['bullet', 'number'];\nconst ALLOWED_HTML: AllowedHtmlEntry[] = [\n { tag: 'img', attrs: ['src', 'alt', 'width', 'height'] },\n { tag: 'br' }\n];\n// Consistent serialisation keeps saved documents stable and diffs free of formatting noise.\nconst TO_MARKDOWN_OPTIONS = { listItemIndent: 'one', bullet: '-', emphasis: '_', strong: '*', rule: '-' } as const;\n\n// Code blocks are edited as plain text, avoiding a syntax-highlighting editor per language.\nconst createPlainTextCodeEditor = (readOnly: boolean): CodeBlockEditorDescriptor => ({\n match: () => true,\n priority: 0,\n Editor: ({ code }) => {\n const codeBlock = useCodeBlockEditorContext();\n return (\n // Stops the surrounding rich-text editor handling key presses meant for the code block.\n <div role=\"none\" onKeyDown={ (event) => event.nativeEvent.stopImmediatePropagation() }>\n <textarea\n className=\"markdownEditorEngine__codeBlock\"\n defaultValue={ code }\n readOnly={ readOnly }\n onChange={ (event) => codeBlock.setCode(event.target.value) }\n />\n </div>\n );\n }\n});\n\nconst renderToolbarItem = (item: MarkdownEditorToolbarItem, listTypes: MarkdownEditorListType[]): ReactNode => {\n switch (item) {\n case 'undoRedo':\n return <UndoRedo />;\n case 'blockType':\n return <BlockTypeSelect />;\n case 'formatting':\n return <BoldItalicUnderlineToggles />;\n case 'lists':\n return <ListsToggle options={ listTypes } />;\n case 'link':\n return <CreateLink />;\n case 'image':\n return <InsertImage />;\n case 'table':\n return <InsertTable />;\n case 'thematicBreak':\n return <InsertThematicBreak />;\n case 'codeBlock':\n return <InsertCodeBlock />;\n default:\n return null;\n }\n};\n\n// Comments in the rich-text view are anchored to the editable content, not the toolbar or dialogs.\nconst findRichTextRoot = (content: HTMLElement): HTMLElement | null => content.querySelector('.markdownEditorEngine__content');\n\n/*\n Rich-text markdown editing built on MDXEditor. Loaded lazily by the document widgets because\n MDXEditor and its dependencies are large.\n */\nexport const MarkdownEditorEngine: FC<MarkdownEditorEngineProps> = (\n {\n markdown,\n onChange,\n readOnly = false,\n viewMode = 'rich-text',\n viewModes = ['rich-text', 'source'],\n diffMarkdown,\n toolbarItems = DEFAULT_TOOLBAR_ITEMS,\n listTypes = DEFAULT_LIST_TYPES,\n imageUploadHandler,\n imagePreviewHandler,\n contentCssClass = '',\n annotations,\n annotationLayerId = 'markdownEditorAnnotations',\n onParseError\n }\n) => {\n const editorRef = useRef<MDXEditorMethods>(null);\n const [sourceSelection, setSourceSelection] = useState<SourceSelection>(null);\n\n // The handlers read the latest props through a ref so the CodeMirror extension can stay stable.\n const annotationsRef = useRef(annotations);\n annotationsRef.current = annotations;\n const [sourceAnnotations] = useState(() => createSourceAnnotations({\n onSelectionChange: setSourceSelection,\n onSelectComment: (commentId) => annotationsRef.current?.onSelectComment?.(commentId)\n }));\n const hasAnnotations = annotations !== undefined;\n const codeMirrorExtensions = useMemo(() => (hasAnnotations ? [sourceAnnotations.extension] : []), [hasAnnotations, sourceAnnotations]);\n\n useEffect(() => {\n if (annotations) {\n sourceAnnotations.update({\n comments: annotations.comments,\n selectedCommentId: annotations.selectedCommentId,\n showResolved: annotations.showResolved\n });\n }\n }, [annotations, sourceAnnotations]);\n const safeMarkdown = useMemo(() => sanitizeEditorInput(markdown, ALLOWED_HTML), [markdown]);\n const safeDiffMarkdown = useMemo(() => sanitizeEditorInput(diffMarkdown ?? markdown, ALLOWED_HTML), [diffMarkdown, markdown]);\n\n // MDXEditor only reads `markdown` on mount. Read-only content (e.g. streamed output) is pushed in\n // imperatively; while editing, external updates are ignored so they never overwrite the user's input.\n useEffect(() => {\n if (readOnly) {\n editorRef.current?.setMarkdown(safeMarkdown);\n }\n }, [readOnly, safeMarkdown]);\n\n const plugins = useMemo((): RealmPlugin[] => {\n const showToolbar = !readOnly && (toolbarItems.length > 0 || viewModes.length > 1);\n const items = toolbarItems.filter((item) => item !== 'image' || imageUploadHandler);\n return [\n headingsPlugin(),\n listsPlugin(),\n quotePlugin(),\n thematicBreakPlugin(),\n linkPlugin(),\n linkDialogPlugin(),\n tablePlugin(),\n imagePlugin({\n imageUploadHandler: imageUploadHandler ?? null,\n ...(imagePreviewHandler ? { imagePreviewHandler } : {})\n }),\n codeBlockPlugin({ codeBlockEditorDescriptors: [createPlainTextCodeEditor(readOnly)] }),\n markdownShortcutPlugin(),\n diffSourcePlugin({ diffMarkdown: safeDiffMarkdown, viewMode, readOnlyDiff: true, codeMirrorExtensions }),\n ...(showToolbar ? [toolbarPlugin({\n toolbarContents: () => (\n <DiffSourceToggleWrapper options={ viewModes }>\n { items.map((item, index) => (\n <Fragment key={ item }>\n { index > 0 && <Separator /> }\n { renderToolbarItem(item, listTypes) }\n </Fragment>\n )) }\n </DiffSourceToggleWrapper>\n )\n })] : [])\n ];\n }, [readOnly, toolbarItems, viewModes, imageUploadHandler, imagePreviewHandler, safeDiffMarkdown, viewMode, listTypes, codeMirrorExtensions]);\n\n const handleChange = useCallback((nextMarkdown: string, initialMarkdownNormalize: boolean) => {\n // The first change event is MDXEditor normalising the input, not a user edit.\n if (!readOnly && !initialMarkdownNormalize) {\n onChange?.(desanitizeEditorOutput(nextMarkdown));\n }\n }, [readOnly, onChange]);\n\n const handleError = useCallback(({ error }: { error: string }) => {\n // Deferred because MDXEditor can report errors while building its initial state, and updating\n // another component's state during render triggers a React warning.\n queueMicrotask(() => onParseError?.(error));\n }, [onParseError]);\n\n const editor = (\n <MDXEditor\n ref={ editorRef }\n // Plugins cannot change after mount, so remount when the mode or editability changes.\n key={ `${ viewMode }_${ readOnly }` }\n className=\"markdownEditorEngine\"\n contentEditableClassName={ `markdownEditorEngine__content ${ contentCssClass }`.trim() }\n markdown={ safeMarkdown }\n readOnly={ readOnly }\n plugins={ plugins }\n onChange={ handleChange }\n onError={ handleError }\n toMarkdownOptions={ TO_MARKDOWN_OPTIONS }\n />\n );\n\n if (!annotations) {\n return editor;\n }\n\n return (\n <AnnotationLayer\n { ...annotations }\n id={ annotationLayerId }\n getTextRoot={ findRichTextRoot }\n externalSelection={ sourceSelection }\n onExternalSelectionConsumed={ () => setSourceSelection(null) }\n >\n { editor }\n </AnnotationLayer>\n );\n};\n\nexport default MarkdownEditorEngine;\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AA8BA,IAAAC,MAAA,GAAAC,uBAAA,CAAAF,OAAA;AAEA,IAAAG,gBAAA,GAAAH,OAAA;AAMA,IAAAI,eAAA,GAAAJ,OAAA;AACA,IAAAK,kBAAA,GAAAL,OAAA;AAEAA,OAAA;AACAA,OAAA;AAAqC,SAAAE,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAN,uBAAA,YAAAA,CAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAE9B,MAAMkB,qBAAkD,GAAAC,OAAA,CAAAD,qBAAA,GAAG,CAChE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CACjF;AACD,MAAME,kBAA4C,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACzE,MAAMC,YAAgC,GAAG,CACvC;EAAEC,GAAG,EAAE,KAAK;EAAEC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ;AAAE,CAAC,EACxD;EAAED,GAAG,EAAE;AAAK,CAAC,CACd;AACD;AACA,MAAME,mBAAmB,GAAG;EAAEC,cAAc,EAAE,KAAK;EAAEC,MAAM,EAAE,GAAG;EAAEC,QAAQ,EAAE,GAAG;EAAEC,MAAM,EAAE,GAAG;EAAEC,IAAI,EAAE;AAAI,CAAU;;AAElH;AACA,MAAMC,yBAAyB,GAAIC,QAAiB,KAAiC;EACnFC,KAAK,EAAEA,CAAA,KAAM,IAAI;EACjBC,QAAQ,EAAE,CAAC;EACXC,MAAM,EAAEA,CAAC;IAAEC;EAAK,CAAC,KAAK;IACpB,MAAMC,SAAS,GAAG,IAAAC,iCAAyB,EAAC,CAAC;IAC7C;MAAA;MACE;MACA3C,MAAA,CAAAe,OAAA,CAAA6B,aAAA;QAAKC,IAAI,EAAC,MAAM;QAACC,SAAS,EAAIC,KAAK,IAAKA,KAAK,CAACC,WAAW,CAACC,wBAAwB,CAAC;MAAG,gBACpFjD,MAAA,CAAAe,OAAA,CAAA6B,aAAA;QACEM,SAAS,EAAC,iCAAiC;QAC3CC,YAAY,EAAGV,IAAM;QACrBJ,QAAQ,EAAGA,QAAU;QACrBe,QAAQ,EAAIL,KAAK,IAAKL,SAAS,CAACW,OAAO,CAACN,KAAK,CAACO,MAAM,CAACC,KAAK;MAAG,CAC9D,CACE;IAAC;EAEV;AACF,CAAC,CAAC;AAEF,MAAMC,iBAAiB,GAAGA,CAACC,IAA+B,EAAEC,SAAmC,KAAgB;EAC7G,QAAQD,IAAI;IACZ,KAAK,UAAU;MACb,oBAAOzD,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC9C,OAAA,CAAA6D,QAAQ,MAAE,CAAC;IACrB,KAAK,WAAW;MACd,oBAAO3D,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC9C,OAAA,CAAA8D,eAAe,MAAE,CAAC;IAC5B,KAAK,YAAY;MACf,oBAAO5D,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC9C,OAAA,CAAA+D,0BAA0B,MAAE,CAAC;IACvC,KAAK,OAAO;MACV,oBAAO7D,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC9C,OAAA,CAAAgE,WAAW;QAACC,OAAO,EAAGL;MAAW,CAAE,CAAC;IAC9C,KAAK,MAAM;MACT,oBAAO1D,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC9C,OAAA,CAAAkE,UAAU,MAAE,CAAC;IACvB,KAAK,OAAO;MACV,oBAAOhE,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC9C,OAAA,CAAAmE,WAAW,MAAE,CAAC;IACxB,KAAK,OAAO;MACV,oBAAOjE,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC9C,OAAA,CAAAoE,WAAW,MAAE,CAAC;IACxB,KAAK,eAAe;MAClB,oBAAOlE,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC9C,OAAA,CAAAqE,mBAAmB,MAAE,CAAC;IAChC,KAAK,WAAW;MACd,oBAAOnE,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC9C,OAAA,CAAAsE,eAAe,MAAE,CAAC;IAC5B;MACE,OAAO,IAAI;EACb;AACF,CAAC;;AAED;AACA,MAAMC,gBAAgB,GAAIC,OAAoB,IAAyBA,OAAO,CAACC,aAAa,CAAC,gCAAgC,CAAC;;AAE9H;AACA;AACA;AACA;AACO,MAAMC,oBAAmD,GAAGA,CACjE;EACEC,QAAQ;EACRrB,QAAQ;EACRf,QAAQ,GAAG,KAAK;EAChBqC,QAAQ,GAAG,WAAW;EACtBC,SAAS,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;EACnCC,YAAY;EACZC,YAAY,GAAGrD,qBAAqB;EACpCkC,SAAS,GAAGhC,kBAAkB;EAC9BoD,kBAAkB;EAClBC,mBAAmB;EACnBC,eAAe,GAAG,EAAE;EACpBC,WAAW;EACXC,iBAAiB,GAAG,2BAA2B;EAC/CC;AACF,CAAC,KACE;EACH,MAAMC,SAAS,GAAG,IAAAC,aAAM,EAAmB,IAAI,CAAC;EAChD,MAAM,CAACC,eAAe,EAAEC,kBAAkB,CAAC,GAAG,IAAAC,eAAQ,EAAkB,IAAI,CAAC;;EAE7E;EACA,MAAMC,cAAc,GAAG,IAAAJ,aAAM,EAACJ,WAAW,CAAC;EAC1CQ,cAAc,CAACC,OAAO,GAAGT,WAAW;EACpC,MAAM,CAACU,iBAAiB,CAAC,GAAG,IAAAH,eAAQ,EAAC,MAAM,IAAAI,0CAAuB,EAAC;IACjEC,iBAAiB,EAAEN,kBAAkB;IACrCO,eAAe,EAAGC,SAAS,IAAKN,cAAc,CAACC,OAAO,EAAEI,eAAe,GAAGC,SAAS;EACrF,CAAC,CAAC,CAAC;EACH,MAAMC,cAAc,GAAGf,WAAW,KAAKgB,SAAS;EAChD,MAAMC,oBAAoB,GAAG,IAAAC,cAAO,EAAC,MAAOH,cAAc,GAAG,CAACL,iBAAiB,CAACS,SAAS,CAAC,GAAG,EAAG,EAAE,CAACJ,cAAc,EAAEL,iBAAiB,CAAC,CAAC;EAEtI,IAAAU,gBAAS,EAAC,MAAM;IACd,IAAIpB,WAAW,EAAE;MACfU,iBAAiB,CAACW,MAAM,CAAC;QACvBC,QAAQ,EAAEtB,WAAW,CAACsB,QAAQ;QAC9BC,iBAAiB,EAAEvB,WAAW,CAACuB,iBAAiB;QAChDC,YAAY,EAAExB,WAAW,CAACwB;MAC5B,CAAC,CAAC;IACJ;EACF,CAAC,EAAE,CAACxB,WAAW,EAAEU,iBAAiB,CAAC,CAAC;EACpC,MAAMe,YAAY,GAAG,IAAAP,cAAO,EAAC,MAAM,IAAAQ,mCAAmB,EAAClC,QAAQ,EAAE9C,YAAY,CAAC,EAAE,CAAC8C,QAAQ,CAAC,CAAC;EAC3F,MAAMmC,gBAAgB,GAAG,IAAAT,cAAO,EAAC,MAAM,IAAAQ,mCAAmB,EAAC/B,YAAY,IAAIH,QAAQ,EAAE9C,YAAY,CAAC,EAAE,CAACiD,YAAY,EAAEH,QAAQ,CAAC,CAAC;;EAE7H;EACA;EACA,IAAA4B,gBAAS,EAAC,MAAM;IACd,IAAIhE,QAAQ,EAAE;MACZ+C,SAAS,CAACM,OAAO,EAAEmB,WAAW,CAACH,YAAY,CAAC;IAC9C;EACF,CAAC,EAAE,CAACrE,QAAQ,EAAEqE,YAAY,CAAC,CAAC;EAE5B,MAAMI,OAAO,GAAG,IAAAX,cAAO,EAAC,MAAqB;IAC3C,MAAMY,WAAW,GAAG,CAAC1E,QAAQ,KAAKwC,YAAY,CAACmC,MAAM,GAAG,CAAC,IAAIrC,SAAS,CAACqC,MAAM,GAAG,CAAC,CAAC;IAClF,MAAMC,KAAK,GAAGpC,YAAY,CAACqC,MAAM,CAAEzD,IAAI,IAAKA,IAAI,KAAK,OAAO,IAAIqB,kBAAkB,CAAC;IACnF,OAAO,CACL,IAAAqC,sBAAc,EAAC,CAAC,EAChB,IAAAC,mBAAW,EAAC,CAAC,EACb,IAAAC,mBAAW,EAAC,CAAC,EACb,IAAAC,2BAAmB,EAAC,CAAC,EACrB,IAAAC,kBAAU,EAAC,CAAC,EACZ,IAAAC,wBAAgB,EAAC,CAAC,EAClB,IAAAC,mBAAW,EAAC,CAAC,EACb,IAAAC,mBAAW,EAAC;MACV5C,kBAAkB,EAAEA,kBAAkB,IAAI,IAAI;MAC9C,IAAIC,mBAAmB,GAAG;QAAEA;MAAoB,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC,CAAC,EACF,IAAA4C,uBAAe,EAAC;MAAEC,0BAA0B,EAAE,CAACxF,yBAAyB,CAACC,QAAQ,CAAC;IAAE,CAAC,CAAC,EACtF,IAAAwF,8BAAsB,EAAC,CAAC,EACxB,IAAAC,wBAAgB,EAAC;MAAElD,YAAY,EAAEgC,gBAAgB;MAAElC,QAAQ;MAAEqD,YAAY,EAAE,IAAI;MAAE7B;IAAqB,CAAC,CAAC,EACxG,IAAIa,WAAW,GAAG,CAAC,IAAAiB,qBAAa,EAAC;MAC/BC,eAAe,EAAEA,CAAA,kBACfjI,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC9C,OAAA,CAAAoI,uBAAuB;QAACnE,OAAO,EAAGY;MAAW,GAC1CsC,KAAK,CAACkB,GAAG,CAAC,CAAC1E,IAAI,EAAE2E,KAAK,kBACtBpI,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC5C,MAAA,CAAAqI,QAAQ;QAACC,GAAG,EAAG7E;MAAM,GAClB2E,KAAK,GAAG,CAAC,iBAAIpI,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC9C,OAAA,CAAAyI,SAAS,MAAE,CAAC,EAC1B/E,iBAAiB,CAACC,IAAI,EAAEC,SAAS,CAC3B,CACX,CACsB;IAE7B,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CACV;EACH,CAAC,EAAE,CAACrB,QAAQ,EAAEwC,YAAY,EAAEF,SAAS,EAAEG,kBAAkB,EAAEC,mBAAmB,EAAE6B,gBAAgB,EAAElC,QAAQ,EAAEhB,SAAS,EAAEwC,oBAAoB,CAAC,CAAC;EAE7I,MAAMsC,YAAY,GAAG,IAAAC,kBAAW,EAAC,CAACC,YAAoB,EAAEC,wBAAiC,KAAK;IAC5F;IACA,IAAI,CAACtG,QAAQ,IAAI,CAACsG,wBAAwB,EAAE;MAC1CvF,QAAQ,GAAG,IAAAwF,sCAAsB,EAACF,YAAY,CAAC,CAAC;IAClD;EACF,CAAC,EAAE,CAACrG,QAAQ,EAAEe,QAAQ,CAAC,CAAC;EAExB,MAAMyF,WAAW,GAAG,IAAAJ,kBAAW,EAAC,CAAC;IAAEK;EAAyB,CAAC,KAAK;IAChE;IACA;IACAC,cAAc,CAAC,MAAM5D,YAAY,GAAG2D,KAAK,CAAC,CAAC;EAC7C,CAAC,EAAE,CAAC3D,YAAY,CAAC,CAAC;EAElB,MAAM6D,MAAM,gBACVhJ,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC9C,OAAA,CAAAmJ,SAAS;IACRC,GAAG,EAAG9D;IACN;IAAA;IACAkD,GAAG,EAAG,GAAI5D,QAAQ,IAAMrC,QAAQ,EAAK;IACrCa,SAAS,EAAC,sBAAsB;IAChCiG,wBAAwB,EAAG,iCAAkCnE,eAAe,EAAG,CAACoE,IAAI,CAAC,CAAG;IACxF3E,QAAQ,EAAGiC,YAAc;IACzBrE,QAAQ,EAAGA,QAAU;IACrByE,OAAO,EAAGA,OAAS;IACnB1D,QAAQ,EAAGoF,YAAc;IACzBa,OAAO,EAAGR,WAAa;IACvBS,iBAAiB,EAAGxH;EAAqB,CAC1C,CACF;EAED,IAAI,CAACmD,WAAW,EAAE;IAChB,OAAO+D,MAAM;EACf;EAEA,oBACEhJ,MAAA,CAAAe,OAAA,CAAA6B,aAAA,CAAC1C,gBAAA,CAAAqJ,eAAe,MAAAC,SAAA,CAAAzI,OAAA,MACTkE,WAAW;IAChBwE,EAAE,EAAGvE,iBAAmB;IACxBwE,WAAW,EAAGrF,gBAAkB;IAChCsF,iBAAiB,EAAGrE,eAAiB;IACrCsE,2BAA2B,EAAGA,CAAA,KAAMrE,kBAAkB,CAAC,IAAI;EAAG,IAE5DyD,MACa,CAAC;AAEtB,CAAC;AAACvH,OAAA,CAAA+C,oBAAA,GAAAA,oBAAA;AAAA,IAAAqF,QAAA,GAAApI,OAAA,CAAAV,OAAA,GAEayD,oBAAoB","ignoreList":[]}
@@ -0,0 +1,50 @@
1
+ .markdownEditorEngine {
2
+ --basePageBg: var(--markdownEditorEngineBg, var(--documentBg, #fff));
3
+ --baseBg: var(--markdownEditorEngineToolbarBg, var(--documentSubtleBg));
4
+ --baseTextContrast: var(--markdownEditorEngineFgColor, var(--documentFgColor, inherit));
5
+ --accentSolid: var(--markdownEditorEngineAccentColor, var(--primaryButtonBg, currentColor));
6
+ --font-body: var(--markdownEditorEngineFont, var(--documentFont));
7
+ display: flex;
8
+ flex: 1;
9
+ flex-direction: column;
10
+ min-height: 0;
11
+ font-family: var(--markdownEditorEngineFont, var(--documentFont));
12
+ }
13
+ .markdownEditorEngine [role=toolbar] {
14
+ position: sticky;
15
+ top: 0;
16
+ z-index: 1;
17
+ border-radius: 0;
18
+ background: var(--markdownEditorEngineToolbarBg, var(--documentSubtleBg));
19
+ }
20
+
21
+ .markdownEditorEngine__content {
22
+ min-height: var(--markdownEditorEngineContentMinHeight, 450px);
23
+ padding: var(--markdownEditorEngineContentPadding, 20px);
24
+ color: var(--markdownEditorEngineFgColor, var(--documentFgColor, inherit));
25
+ font-size: var(--markdownEditorEngineFontSize, 0.875rem);
26
+ line-height: var(--markdownEditorEngineLineHeight, 1.6);
27
+ overflow-wrap: anywhere;
28
+ }
29
+ .markdownEditorEngine__content table {
30
+ width: 100%;
31
+ border-collapse: collapse;
32
+ }
33
+ .markdownEditorEngine__content th,
34
+ .markdownEditorEngine__content td {
35
+ padding: var(--markdownEditorEngineCellPadding, 10px);
36
+ border: var(--markdownEditorEngineCellBorder, var(--documentBorder));
37
+ vertical-align: top;
38
+ }
39
+
40
+ .markdownEditorEngine__codeBlock {
41
+ width: 100%;
42
+ min-height: 100px;
43
+ padding: 10px;
44
+ border: 0;
45
+ border-radius: var(--documentBorderRadius, 5px);
46
+ background: var(--markdownEditorEngineCodeBlockBg, var(--documentSubtleBg));
47
+ font-family: var(--markdownEditorEngineCodeBlockFont, monospace);
48
+ font-size: 0.875em;
49
+ resize: vertical;
50
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=markdownEditorEngine.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownEditorEngine.interfaces.js","names":[],"sources":["../../../../../../../src/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.ts"],"sourcesContent":["import { DocumentAnnotationsProps } from '../../annotations/annotations.interfaces';\n\nexport type MarkdownEditorViewMode = 'rich-text' | 'source' | 'diff';\n\nexport type MarkdownEditorToolbarItem =\n | 'undoRedo'\n | 'blockType'\n | 'formatting'\n | 'lists'\n | 'link'\n | 'image'\n | 'table'\n | 'thematicBreak'\n | 'codeBlock';\n\nexport type MarkdownEditorListType = 'bullet' | 'number' | 'check';\n\n/* eslint-disable-next-line no-unused-vars */\nexport type MarkdownEditorImageUploadHandler = (image: File) => Promise<string>;\n\n/* eslint-disable-next-line no-unused-vars */\nexport type MarkdownEditorImagePreviewHandler = (source: string) => Promise<string>;\n\nexport type MarkdownEditorEngineProps = {\n markdown: string;\n /* eslint-disable-next-line no-unused-vars */\n onChange?: (markdown: string) => void;\n readOnly?: boolean;\n viewMode?: MarkdownEditorViewMode;\n // Modes offered in the toolbar toggle; omit 'diff' when there is no baseline to compare with.\n viewModes?: MarkdownEditorViewMode[];\n diffMarkdown?: string;\n toolbarItems?: MarkdownEditorToolbarItem[];\n listTypes?: MarkdownEditorListType[];\n imageUploadHandler?: MarkdownEditorImageUploadHandler;\n imagePreviewHandler?: MarkdownEditorImagePreviewHandler;\n contentCssClass?: string;\n // Pinned comments, shown and created in both the rich-text and source views.\n annotations?: DocumentAnnotationsProps;\n // Element id for the annotation layer; required when `annotations` is set.\n annotationLayerId?: string;\n /* eslint-disable-next-line no-unused-vars */\n onParseError?: (error: string) => void;\n};\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.textToSourceRange = exports.sourceToTextOffset = exports.buildMarkdownTextIndex = void 0;
8
+ var _remarkGfm = _interopRequireDefault(require("remark-gfm"));
9
+ var _remarkParse = _interopRequireDefault(require("remark-parse"));
10
+ var _unified = require("unified");
11
+ /*
12
+ The text a reader sees for a markdown document (what rich-text mode renders), with a map back to
13
+ source offsets. Comment quotes are taken from, and resolved against, this text in both views, so
14
+ `Keep **passwords** private.` quotes as `passwords private` whichever view the comment was made in.
15
+
16
+ As in the DOM text index, blocks and line breaks are separated by a newline.
17
+ */
18
+
19
+ const markdownParser = (0, _unified.unified)().use(_remarkParse.default).use(_remarkGfm.default);
20
+ // Nodes rendered inline; every other node with children is a block.
21
+ const INLINE_TYPES = new Set(['emphasis', 'strong', 'delete', 'link', 'linkReference']);
22
+ // Leaves whose value is shown as document text.
23
+ const TEXT_TYPES = new Set(['text', 'inlineCode', 'code']);
24
+ // Code is shown verbatim, so escapes and entities in it are literal text.
25
+ const VERBATIM_TYPES = new Set(['inlineCode', 'code']);
26
+ const HTML_BREAK = /^<br\s*\/?>$/i;
27
+ const FENCE = /^[ \t]*(`{3,}|~{3,})/;
28
+ const ENTITY = /^&(?:#[0-9]{1,7}|#[xX][0-9a-fA-F]{1,6}|[A-Za-z][A-Za-z0-9]{1,31});/;
29
+ const ESCAPABLE = /[!-/:-@[-`{-~]/;
30
+ // Markup between characters (indentation, `>` markers and so on) is skipped, up to this many characters.
31
+ const MAX_ALIGNMENT_GAP = 256;
32
+
33
+ // Entities are decoded by the same parser as the document so both agree on what each one renders.
34
+ const entityCache = new Map();
35
+ const decodeEntity = entity => {
36
+ let decoded = entityCache.get(entity);
37
+ if (decoded === undefined) {
38
+ const paragraph = markdownParser.parse(entity).children?.[0];
39
+ decoded = paragraph?.children?.[0]?.value ?? entity;
40
+ entityCache.set(entity, decoded);
41
+ }
42
+ return decoded;
43
+ };
44
+
45
+ // The part of a code node's source that holds its value, excluding fences and the info string.
46
+ const getCodeContentSpan = (markdown, node, start, end) => {
47
+ const source = markdown.slice(start, end);
48
+ if (node.type === 'inlineCode') {
49
+ const ticks = /^`+/.exec(source)?.[0].length ?? 0;
50
+ return [start + ticks, Math.max(start + ticks, end - ticks)];
51
+ }
52
+ if (FENCE.test(source)) {
53
+ const lineEnd = source.indexOf('\n');
54
+ return [lineEnd === -1 ? end : start + lineEnd + 1, end];
55
+ }
56
+ return [start, end];
57
+ };
58
+ const buildMarkdownTextIndex = markdown => {
59
+ let text = '';
60
+ const starts = [];
61
+ const ends = [];
62
+ const push = (characters, from, to) => {
63
+ text += characters;
64
+ for (let unit = 0; unit < characters.length; unit += 1) {
65
+ starts.push(from);
66
+ ends.push(to);
67
+ }
68
+ };
69
+ const addSeparator = sourceOffset => {
70
+ if (text.length && !text.endsWith('\n')) {
71
+ push('\n', sourceOffset, sourceOffset);
72
+ }
73
+ };
74
+
75
+ // Consumes the source token that renders as the next part of the value: an entity, a backslash
76
+ // escape or the literal character, skipping any markup in between.
77
+ const addValue = (value, from, to, verbatim) => {
78
+ let cursor = from;
79
+ let index = 0;
80
+ while (index < value.length) {
81
+ const limit = Math.min(to, cursor + MAX_ALIGNMENT_GAP);
82
+ let token = null;
83
+ for (let position = cursor; position < limit && !token; position += 1) {
84
+ const source = markdown[position];
85
+ if (!verbatim && source === '&') {
86
+ const entity = ENTITY.exec(markdown.slice(position, Math.min(to, position + 40)))?.[0];
87
+ const decoded = entity ? decodeEntity(entity) : '';
88
+ if (entity && decoded !== entity && value.startsWith(decoded, index)) {
89
+ token = {
90
+ position,
91
+ length: entity.length,
92
+ characters: decoded
93
+ };
94
+ break;
95
+ }
96
+ }
97
+ if (!verbatim && source === '\\' && ESCAPABLE.test(value[index]) && markdown[position + 1] === value[index]) {
98
+ token = {
99
+ position,
100
+ length: 2,
101
+ characters: value[index]
102
+ };
103
+ } else if (source === value[index]) {
104
+ token = {
105
+ position,
106
+ length: 1,
107
+ characters: value[index]
108
+ };
109
+ }
110
+ }
111
+ if (token) {
112
+ push(token.characters, token.position, token.position + token.length);
113
+ cursor = token.position + token.length;
114
+ index += token.characters.length;
115
+ } else {
116
+ // Unmatched text has no source span of its own; it is pinned to the current position.
117
+ push(value[index], cursor, cursor);
118
+ index += 1;
119
+ }
120
+ }
121
+ };
122
+ let previousBlock = null;
123
+ const visit = (node, block) => {
124
+ const start = node.position?.start.offset;
125
+ const end = node.position?.end.offset;
126
+ if (node.type === 'break' || node.type === 'html' && HTML_BREAK.test(node.value?.trim() ?? '')) {
127
+ if (start !== undefined) {
128
+ addSeparator(start);
129
+ }
130
+ return;
131
+ }
132
+ if (TEXT_TYPES.has(node.type) && node.value && start !== undefined && end !== undefined) {
133
+ if (previousBlock && previousBlock !== block) {
134
+ addSeparator(start);
135
+ }
136
+ previousBlock = block;
137
+ const verbatim = VERBATIM_TYPES.has(node.type);
138
+ const [from, to] = verbatim ? getCodeContentSpan(markdown, node, start, end) : [start, end];
139
+ addValue(node.value, from, to, verbatim);
140
+ return;
141
+ }
142
+ const childBlock = INLINE_TYPES.has(node.type) ? block : node;
143
+ node.children?.forEach(child => visit(child, childBlock));
144
+ };
145
+ const tree = markdownParser.parse(markdown);
146
+ visit(tree, tree);
147
+ starts.push(markdown.length);
148
+ ends.push(markdown.length);
149
+ return {
150
+ text,
151
+ starts,
152
+ ends
153
+ };
154
+ };
155
+
156
+ // The index of the first text character starting at or after a source offset.
157
+ exports.buildMarkdownTextIndex = buildMarkdownTextIndex;
158
+ const sourceToTextOffset = (index, sourceOffset) => {
159
+ let low = 0;
160
+ let high = index.text.length;
161
+ while (low < high) {
162
+ const middle = Math.floor((low + high) / 2);
163
+ if (index.starts[middle] < sourceOffset) {
164
+ low = middle + 1;
165
+ } else {
166
+ high = middle;
167
+ }
168
+ }
169
+ return low;
170
+ };
171
+
172
+ // The source range covering text[start, end).
173
+ exports.sourceToTextOffset = sourceToTextOffset;
174
+ const textToSourceRange = (index, start, end) => ({
175
+ from: index.starts[start],
176
+ to: end > start ? index.ends[end - 1] : index.starts[start]
177
+ });
178
+ exports.textToSourceRange = textToSourceRange;
179
+ //# sourceMappingURL=markdownTextIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownTextIndex.js","names":["_remarkGfm","_interopRequireDefault","require","_remarkParse","_unified","markdownParser","unified","use","remarkParse","remarkGfm","INLINE_TYPES","Set","TEXT_TYPES","VERBATIM_TYPES","HTML_BREAK","FENCE","ENTITY","ESCAPABLE","MAX_ALIGNMENT_GAP","entityCache","Map","decodeEntity","entity","decoded","get","undefined","paragraph","parse","children","value","set","getCodeContentSpan","markdown","node","start","end","source","slice","type","ticks","exec","length","Math","max","test","lineEnd","indexOf","buildMarkdownTextIndex","text","starts","ends","push","characters","from","to","unit","addSeparator","sourceOffset","endsWith","addValue","verbatim","cursor","index","limit","min","token","position","startsWith","previousBlock","visit","block","offset","trim","has","childBlock","forEach","child","tree","exports","sourceToTextOffset","low","high","middle","floor","textToSourceRange"],"sources":["../../../../../../../src/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.ts"],"sourcesContent":["import remarkGfm from 'remark-gfm';\nimport remarkParse from 'remark-parse';\nimport { unified } from 'unified';\n\n/*\n The text a reader sees for a markdown document (what rich-text mode renders), with a map back to\n source offsets. Comment quotes are taken from, and resolved against, this text in both views, so\n `Keep **passwords** private.` quotes as `passwords private` whichever view the comment was made in.\n\n As in the DOM text index, blocks and line breaks are separated by a newline.\n */\nexport type MarkdownTextIndex = {\n text: string;\n // text[i] came from source[starts[i], ends[i]); an escape or entity spans several source characters.\n // Each array has an extra final entry of the source length.\n starts: number[];\n ends: number[];\n};\n\nconst markdownParser = unified().use(remarkParse).use(remarkGfm);\n\ntype MarkdownNode = {\n type: string;\n value?: string;\n children?: MarkdownNode[];\n position?: { start: { offset?: number }; end: { offset?: number } };\n};\n\n// Nodes rendered inline; every other node with children is a block.\nconst INLINE_TYPES = new Set(['emphasis', 'strong', 'delete', 'link', 'linkReference']);\n// Leaves whose value is shown as document text.\nconst TEXT_TYPES = new Set(['text', 'inlineCode', 'code']);\n// Code is shown verbatim, so escapes and entities in it are literal text.\nconst VERBATIM_TYPES = new Set(['inlineCode', 'code']);\nconst HTML_BREAK = /^<br\\s*\\/?>$/i;\nconst FENCE = /^[ \\t]*(`{3,}|~{3,})/;\nconst ENTITY = /^&(?:#[0-9]{1,7}|#[xX][0-9a-fA-F]{1,6}|[A-Za-z][A-Za-z0-9]{1,31});/;\nconst ESCAPABLE = /[!-/:-@[-`{-~]/;\n// Markup between characters (indentation, `>` markers and so on) is skipped, up to this many characters.\nconst MAX_ALIGNMENT_GAP = 256;\n\n// Entities are decoded by the same parser as the document so both agree on what each one renders.\nconst entityCache = new Map<string, string>();\nconst decodeEntity = (entity: string): string => {\n let decoded = entityCache.get(entity);\n if (decoded === undefined) {\n const paragraph = (markdownParser.parse(entity) as MarkdownNode).children?.[0];\n decoded = paragraph?.children?.[0]?.value ?? entity;\n entityCache.set(entity, decoded);\n }\n return decoded;\n};\n\n// The part of a code node's source that holds its value, excluding fences and the info string.\nconst getCodeContentSpan = (markdown: string, node: MarkdownNode, start: number, end: number): [number, number] => {\n const source = markdown.slice(start, end);\n if (node.type === 'inlineCode') {\n const ticks = /^`+/.exec(source)?.[0].length ?? 0;\n return [start + ticks, Math.max(start + ticks, end - ticks)];\n }\n if (FENCE.test(source)) {\n const lineEnd = source.indexOf('\\n');\n return [lineEnd === -1 ? end : start + lineEnd + 1, end];\n }\n return [start, end];\n};\n\nexport const buildMarkdownTextIndex = (markdown: string): MarkdownTextIndex => {\n let text = '';\n const starts: number[] = [];\n const ends: number[] = [];\n\n const push = (characters: string, from: number, to: number) => {\n text += characters;\n for (let unit = 0; unit < characters.length; unit += 1) {\n starts.push(from);\n ends.push(to);\n }\n };\n\n const addSeparator = (sourceOffset: number) => {\n if (text.length && !text.endsWith('\\n')) {\n push('\\n', sourceOffset, sourceOffset);\n }\n };\n\n // Consumes the source token that renders as the next part of the value: an entity, a backslash\n // escape or the literal character, skipping any markup in between.\n const addValue = (value: string, from: number, to: number, verbatim: boolean) => {\n let cursor = from;\n let index = 0;\n while (index < value.length) {\n const limit = Math.min(to, cursor + MAX_ALIGNMENT_GAP);\n let token: { position: number; length: number; characters: string } | null = null;\n for (let position = cursor; position < limit && !token; position += 1) {\n const source = markdown[position];\n if (!verbatim && source === '&') {\n const entity = ENTITY.exec(markdown.slice(position, Math.min(to, position + 40)))?.[0];\n const decoded = entity ? decodeEntity(entity) : '';\n if (entity && decoded !== entity && value.startsWith(decoded, index)) {\n token = { position, length: entity.length, characters: decoded };\n break;\n }\n }\n if (!verbatim && source === '\\\\' && ESCAPABLE.test(value[index]) && markdown[position + 1] === value[index]) {\n token = { position, length: 2, characters: value[index] };\n } else if (source === value[index]) {\n token = { position, length: 1, characters: value[index] };\n }\n }\n if (token) {\n push(token.characters, token.position, token.position + token.length);\n cursor = token.position + token.length;\n index += token.characters.length;\n } else {\n // Unmatched text has no source span of its own; it is pinned to the current position.\n push(value[index], cursor, cursor);\n index += 1;\n }\n }\n };\n\n let previousBlock: MarkdownNode | null = null;\n const visit = (node: MarkdownNode, block: MarkdownNode) => {\n const start = node.position?.start.offset;\n const end = node.position?.end.offset;\n if (node.type === 'break' || (node.type === 'html' && HTML_BREAK.test(node.value?.trim() ?? ''))) {\n if (start !== undefined) {\n addSeparator(start);\n }\n return;\n }\n if (TEXT_TYPES.has(node.type) && node.value && start !== undefined && end !== undefined) {\n if (previousBlock && previousBlock !== block) {\n addSeparator(start);\n }\n previousBlock = block;\n const verbatim = VERBATIM_TYPES.has(node.type);\n const [from, to] = verbatim ? getCodeContentSpan(markdown, node, start, end) : [start, end];\n addValue(node.value, from, to, verbatim);\n return;\n }\n const childBlock = INLINE_TYPES.has(node.type) ? block : node;\n node.children?.forEach((child) => visit(child, childBlock));\n };\n\n const tree = markdownParser.parse(markdown) as MarkdownNode;\n visit(tree, tree);\n starts.push(markdown.length);\n ends.push(markdown.length);\n return { text, starts, ends };\n};\n\n// The index of the first text character starting at or after a source offset.\nexport const sourceToTextOffset = (index: MarkdownTextIndex, sourceOffset: number): number => {\n let low = 0;\n let high = index.text.length;\n while (low < high) {\n const middle = Math.floor((low + high) / 2);\n if (index.starts[middle] < sourceOffset) {\n low = middle + 1;\n } else {\n high = middle;\n }\n }\n return low;\n};\n\n// The source range covering text[start, end).\nexport const textToSourceRange = (index: MarkdownTextIndex, start: number, end: number): { from: number; to: number } => ({\n from: index.starts[start],\n to: end > start ? index.ends[end - 1] : index.starts[start]\n});\n"],"mappings":"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","ignoreList":[]}