@x15ventures/x15-ui-library 3.19.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,117 @@
1
+ .documentComparer {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: var(--documentComparerGap, 20px);
5
+ min-width: 0;
6
+ }
7
+ .documentComparer .headerBar {
8
+ margin-bottom: 0;
9
+ }
10
+
11
+ .documentComparer__header {
12
+ display: flex;
13
+ flex-direction: column;
14
+ gap: var(--documentComparerPanelGap, var(--documentGap, 10px));
15
+ }
16
+
17
+ .documentComparer__controls {
18
+ display: flex;
19
+ flex-wrap: wrap;
20
+ gap: var(--documentComparerGap, 20px);
21
+ }
22
+
23
+ .documentComparer__columns {
24
+ display: grid;
25
+ grid-template-columns: repeat(2, minmax(var(--documentComparerColumnMinWidth, 320px), 1fr));
26
+ gap: var(--documentComparerGap, 20px);
27
+ }
28
+ @media (max-width: 900px) {
29
+ .documentComparer__columns {
30
+ grid-template-columns: minmax(0, 1fr);
31
+ }
32
+ }
33
+
34
+ .documentComparer__panel,
35
+ .documentComparer__differences {
36
+ display: flex;
37
+ flex-direction: column;
38
+ gap: var(--documentComparerPanelGap, var(--documentGap, 10px));
39
+ min-width: 0;
40
+ padding: var(--documentComparerPanelPadding, 15px);
41
+ border: var(--documentComparerPanelBorder, var(--documentBorder));
42
+ border-radius: var(--documentComparerPanelBorderRadius, var(--documentBorderRadius, 5px));
43
+ background: var(--documentComparerPanelBg, var(--documentBg, #fff));
44
+ }
45
+
46
+ .documentComparer__panelHeader {
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: 5px;
50
+ }
51
+
52
+ .documentComparer__documentTitle {
53
+ margin: 0;
54
+ font-weight: 600;
55
+ overflow-wrap: anywhere;
56
+ }
57
+
58
+ .documentComparer__metadata {
59
+ display: flex;
60
+ flex-wrap: wrap;
61
+ gap: 5px 20px;
62
+ margin: 0;
63
+ color: var(--documentComparerMetadataColor, var(--documentMutedFgColor));
64
+ font-size: var(--documentComparerMetadataFontSize, 0.8125rem);
65
+ }
66
+ .documentComparer__metadata > div {
67
+ display: flex;
68
+ gap: 5px;
69
+ }
70
+ .documentComparer__metadata dt::after {
71
+ content: ":";
72
+ }
73
+ .documentComparer__metadata dd {
74
+ margin: 0;
75
+ }
76
+
77
+ .documentComparer__panelBody {
78
+ display: flex;
79
+ flex: 1;
80
+ flex-direction: column;
81
+ min-height: var(--documentComparerPanelMinHeight, var(--documentFrameMinHeight, 65vh));
82
+ overflow: auto;
83
+ }
84
+ .documentComparer__panelBody > aside,
85
+ .documentComparer__panelBody > .pageBanner {
86
+ margin: auto;
87
+ }
88
+
89
+ .documentComparer__viewer {
90
+ --documentViewerFrameBorder: 0;
91
+ flex: 1;
92
+ }
93
+
94
+ .documentComparer__pages {
95
+ display: flex;
96
+ flex-direction: column;
97
+ gap: var(--documentComparerPageGap, 15px);
98
+ }
99
+ .documentComparer__pages img {
100
+ display: block;
101
+ width: 100%;
102
+ height: auto;
103
+ box-shadow: var(--documentComparerPageShadow, 0 1px 5px rgba(0, 0, 0, 0.15));
104
+ }
105
+
106
+ .documentComparer__message {
107
+ margin: auto;
108
+ color: var(--documentComparerMetadataColor, var(--documentMutedFgColor));
109
+ }
110
+
111
+ .documentComparer__panelActions,
112
+ .documentComparer__footer {
113
+ display: flex;
114
+ flex-wrap: wrap;
115
+ justify-content: flex-end;
116
+ gap: var(--documentComparerPanelGap, var(--documentGap, 10px));
117
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=documentComparer.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentComparer.interfaces.js","names":[],"sources":["../../../../src/widgets/documentComparer/documentComparer.interfaces.ts"],"sourcesContent":["import { ReactNode } from 'react';\n\nimport { DocumentRenderers } from '../documentViewer/documentViewer.interfaces';\nimport { DocumentAnnotationsProps } from '../shared/documents/annotations/annotations.interfaces';\nimport { DocumentSource, ResolveResourceUrl } from '../shared/documents/documents.interfaces';\nimport { DocumentDiffView } from '../shared/documents/engines/documentDiff/documentDiff.interfaces';\nimport { DocumentEditorProps } from '../documentEditor/documentEditor.interfaces';\n\nexport type DocumentComparerView = 'sideBySide' | 'differences';\n\nexport type ComparisonDocument = DocumentSource & {\n version?: string;\n lastModified?: string;\n // Rendered page images shown instead of the document itself, e.g. pages of a scanned PDF.\n pageImages?: string[];\n};\n\nexport type DocumentComparerSaveUpdate = {\n markdown: string;\n baselineMarkdown: string;\n};\n\nexport type DocumentComparerLabels = {\n originalHeading: string;\n revisedHeading: string;\n viewSelector: string;\n sideBySide: string;\n differences: string;\n diffSelector: string;\n formatted: string;\n source: string;\n edit: string;\n save: string;\n cancel: string;\n version: string;\n lastModified: string;\n notRecorded: string;\n loadingHeading: string;\n loadingMessage: string;\n loadError: string;\n noSourcePreview: string;\n added: string;\n removed: string;\n noChanges: string;\n /* eslint-disable-next-line no-unused-vars */\n diffSummary: (added: number, removed: number) => string;\n /* eslint-disable-next-line no-unused-vars */\n pageImageAlt: (page: number, total: number, title: string) => string;\n};\n\nexport type DocumentComparerCssClasses = {\n wrapper?: string;\n header?: string;\n columns?: string;\n originalPanel?: string;\n revisedPanel?: string;\n differences?: string;\n footer?: string;\n};\n\nexport type DocumentComparerProps = {\n id: string;\n title: string;\n headingLevel?: 1 | 2 | 3 | 4;\n originalDocument: ComparisonDocument;\n // The markdown version under review, supplied as text, a File or a URL.\n revisedDocument: ComparisonDocument;\n // What the differences view compares against; defaults to the revised document as first loaded.\n baselineMarkdown?: string;\n initialView?: DocumentComparerView;\n initialDiffView?: DocumentDiffView;\n // Which column holds the revised document.\n revisedPosition?: 'start' | 'end';\n enableEditing?: boolean;\n /* eslint-disable-next-line no-unused-vars */\n onChange?: (markdown: string) => void;\n // Called with the edited markdown; return a promise to keep the save button disabled until it settles.\n /* eslint-disable-next-line no-unused-vars */\n onSave?: (update: DocumentComparerSaveUpdate) => void | Promise<void>;\n // Options passed through to the editor used while editing the revised document.\n editorProps?: Pick<DocumentEditorProps, 'toolbarItems' | 'listTypes' | 'imageUploadHandler' | 'viewModes'>;\n // Override renderers for supported original-document kinds; unsupported files stay blocked.\n originalRenderers?: DocumentRenderers;\n resolveResourceUrl?: ResolveResourceUrl;\n // Passed to the original document's viewer; see DocumentViewer's trustedPdfOrigins.\n trustedPdfOrigins?: string[];\n // Defaults to the library's dateToShortReadableDate; return null to show the value as given.\n /* eslint-disable-next-line no-unused-vars */\n formatDate?: (value: string) => string | null;\n // Slots for application workflow, e.g. lifecycle status, review and approval actions.\n headerActions?: ReactNode;\n originalPanelActions?: ReactNode;\n revisedPanelActions?: ReactNode;\n footerActions?: ReactNode;\n // Pinned comments on the revised document, both when reading and while editing it.\n annotations?: DocumentAnnotationsProps;\n labels?: Partial<DocumentComparerLabels>;\n customCssClasses?: DocumentComparerCssClasses;\n};\n\nexport type { DocumentDiffView };\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export { DocumentComparer, defaultDocumentComparerLabels } from './DocumentComparer';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["DocumentComparer","defaultDocumentComparerLabels"],"sources":["../../../../src/widgets/documentComparer/index.ts"],"sourcesContent":["export { DocumentComparer, defaultDocumentComparerLabels } from './DocumentComparer';\n\nexport type {\n ComparisonDocument,\n DocumentComparerCssClasses,\n DocumentComparerLabels,\n DocumentComparerProps,\n DocumentComparerSaveUpdate,\n DocumentComparerView,\n DocumentDiffView\n} from './documentComparer.interfaces';\n"],"mappings":"AAAA,SAASA,gBAAgB,EAAEC,6BAA6B,QAAQ,oBAAoB","ignoreList":[]}
@@ -0,0 +1,135 @@
1
+ 'use client';
2
+
3
+ import React, { Suspense, useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
+ import { HeaderBar, PageBanner, SimpleButton } from '../../components';
5
+ import { LoadingMessage } from '../../components/design/loadingMessage/LoadingMessage';
6
+ import { LazyMarkdownEditorEngine } from '../shared/documents/engines/lazyEngines';
7
+ import './documentEditor.css';
8
+ export const defaultDocumentEditorLabels = {
9
+ loadingHeading: 'Loading',
10
+ loadingMessage: 'Loading editor',
11
+ parseErrorNotice: 'This document contains markdown the visual editor cannot represent, so it has opened in source mode.',
12
+ retryRichText: 'Try the visual editor again'
13
+ };
14
+ const DEFAULT_VIEW_MODES = ['rich-text', 'source'];
15
+
16
+ /*
17
+ DocumentEditor edits a markdown document in rich-text, source or diff mode. The editor engine
18
+ (MDXEditor) is only downloaded when an editor is first rendered.
19
+ If the visual editor cannot parse the document it falls back to source mode rather than
20
+ rendering an empty, silently lossy editor.
21
+ */
22
+ export const DocumentEditor = ({
23
+ id,
24
+ label,
25
+ hideLabel = false,
26
+ headingLevel = 3,
27
+ markdown,
28
+ onChange,
29
+ readOnly = false,
30
+ baselineMarkdown,
31
+ viewModes,
32
+ initialViewMode = 'rich-text',
33
+ toolbarItems,
34
+ listTypes,
35
+ imageUploadHandler,
36
+ resolveResourceUrl,
37
+ headerActions,
38
+ annotations,
39
+ labels: customLabels,
40
+ customCssClasses = {},
41
+ onParseError
42
+ }) => {
43
+ const labels = useMemo(() => ({
44
+ ...defaultDocumentEditorLabels,
45
+ ...customLabels
46
+ }), [customLabels]);
47
+ const [parseError, setParseError] = useState(null);
48
+ const [editorRevision, setEditorRevision] = useState(0);
49
+ // The latest text, so remounting the editor (e.g. to retry the visual editor) keeps edits even
50
+ // when the host does not feed onChange back into `markdown`.
51
+ const [currentMarkdown, setCurrentMarkdown] = useState(markdown);
52
+ const currentMarkdownRef = useRef(markdown);
53
+ useEffect(() => {
54
+ if (markdown !== currentMarkdownRef.current) {
55
+ currentMarkdownRef.current = markdown;
56
+ setCurrentMarkdown(markdown);
57
+ // A replacement document is parsed afresh, so the previous document's parse error no longer applies.
58
+ setParseError(null);
59
+ setEditorRevision(revision => revision + 1);
60
+ }
61
+ }, [markdown]);
62
+ const handleChange = useCallback(nextMarkdown => {
63
+ currentMarkdownRef.current = nextMarkdown;
64
+ setCurrentMarkdown(nextMarkdown);
65
+ onChange?.(nextMarkdown);
66
+ }, [onChange]);
67
+ const availableViewModes = useMemo(() => {
68
+ const requested = viewModes ?? (baselineMarkdown === undefined ? DEFAULT_VIEW_MODES : [...DEFAULT_VIEW_MODES, 'diff']);
69
+ const supported = requested.filter(mode => mode !== 'diff' || baselineMarkdown !== undefined);
70
+ return parseError ? ['source', ...supported.filter(mode => mode !== 'rich-text' && mode !== 'source')] : supported;
71
+ }, [viewModes, baselineMarkdown, parseError]);
72
+ const viewMode = parseError ? 'source' : availableViewModes.includes(initialViewMode) ? initialViewMode : availableViewModes[0] ?? 'source';
73
+ const handleParseError = useCallback(error => {
74
+ setParseError(current => current ?? error);
75
+ onParseError?.(error);
76
+ }, [onParseError]);
77
+ const imagePreviewHandler = useMemo(
78
+ // A resolver returning nothing has rejected the source, so the preview is left empty rather than
79
+ // falling back to the unvetted original.
80
+ () => resolveResourceUrl ? async source => resolveResourceUrl(source) ?? '' : undefined, [resolveResourceUrl]);
81
+ return /*#__PURE__*/React.createElement("section", {
82
+ id: id,
83
+ className: `documentEditor ${readOnly ? 'documentEditor--readOnly' : ''} ${customCssClasses.wrapper || ''}`.trim(),
84
+ "aria-label": label
85
+ }, !hideLabel && /*#__PURE__*/React.createElement("div", {
86
+ className: `documentEditor__header ${customCssClasses.header || ''}`.trim()
87
+ }, /*#__PURE__*/React.createElement(HeaderBar, {
88
+ text: label,
89
+ headingLevel: headingLevel
90
+ }, headerActions)), hideLabel && headerActions && /*#__PURE__*/React.createElement("div", {
91
+ className: `documentEditor__actions ${customCssClasses.actions || ''}`.trim()
92
+ }, headerActions), parseError && /*#__PURE__*/React.createElement(PageBanner, {
93
+ id: `${id}_parseError`,
94
+ type: "warn",
95
+ icon: "warning",
96
+ displayMode: "inline",
97
+ animation: "none",
98
+ disableClose: true
99
+ }, /*#__PURE__*/React.createElement("span", {
100
+ role: "status"
101
+ }, labels.parseErrorNotice), /*#__PURE__*/React.createElement(SimpleButton, {
102
+ id: `${id}_retryRichText`,
103
+ label: labels.retryRichText,
104
+ cssClass: "button secondary outline compact documentEditor__retry",
105
+ onClickHandler: () => setParseError(null)
106
+ })), /*#__PURE__*/React.createElement("div", {
107
+ className: `documentEditor__editor ${customCssClasses.editor || ''}`.trim()
108
+ }, /*#__PURE__*/React.createElement(Suspense, {
109
+ fallback: /*#__PURE__*/React.createElement(LoadingMessage, {
110
+ heading: labels.loadingHeading,
111
+ loadingMessage: labels.loadingMessage,
112
+ isInline: true
113
+ })
114
+ }, /*#__PURE__*/React.createElement(LazyMarkdownEditorEngine
115
+ // Remount in source mode once a parse error forces the fallback.
116
+ , {
117
+ key: `${parseError ? 'source-fallback' : 'default'}_${editorRevision}`,
118
+ markdown: currentMarkdown,
119
+ onChange: handleChange,
120
+ readOnly: readOnly,
121
+ viewMode: viewMode,
122
+ viewModes: availableViewModes,
123
+ diffMarkdown: baselineMarkdown,
124
+ toolbarItems: toolbarItems,
125
+ listTypes: listTypes,
126
+ imageUploadHandler: imageUploadHandler,
127
+ imagePreviewHandler: imagePreviewHandler,
128
+ contentCssClass: customCssClasses.content,
129
+ annotations: annotations,
130
+ annotationLayerId: `${id}_annotations`,
131
+ onParseError: handleParseError
132
+ }))));
133
+ };
134
+ export default DocumentEditor;
135
+ //# sourceMappingURL=DocumentEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentEditor.js","names":["React","Suspense","useCallback","useEffect","useMemo","useRef","useState","HeaderBar","PageBanner","SimpleButton","LoadingMessage","LazyMarkdownEditorEngine","defaultDocumentEditorLabels","loadingHeading","loadingMessage","parseErrorNotice","retryRichText","DEFAULT_VIEW_MODES","DocumentEditor","id","label","hideLabel","headingLevel","markdown","onChange","readOnly","baselineMarkdown","viewModes","initialViewMode","toolbarItems","listTypes","imageUploadHandler","resolveResourceUrl","headerActions","annotations","labels","customLabels","customCssClasses","onParseError","parseError","setParseError","editorRevision","setEditorRevision","currentMarkdown","setCurrentMarkdown","currentMarkdownRef","current","revision","handleChange","nextMarkdown","availableViewModes","requested","undefined","supported","filter","mode","viewMode","includes","handleParseError","error","imagePreviewHandler","source","createElement","className","wrapper","trim","header","text","actions","type","icon","displayMode","animation","disableClose","role","cssClass","onClickHandler","editor","fallback","heading","isInline","key","diffMarkdown","contentCssClass","content","annotationLayerId"],"sources":["../../../../src/widgets/documentEditor/DocumentEditor.tsx"],"sourcesContent":["'use client';\n\nimport React, { FC, Suspense, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { HeaderBar, PageBanner, SimpleButton } from '../../components';\nimport { LoadingMessage } from '../../components/design/loadingMessage/LoadingMessage';\nimport { LazyMarkdownEditorEngine } from '../shared/documents/engines/lazyEngines';\nimport { DocumentEditorLabels, DocumentEditorProps, MarkdownEditorViewMode } from './documentEditor.interfaces';\n\nimport './documentEditor.scss';\n\nexport const defaultDocumentEditorLabels: DocumentEditorLabels = {\n loadingHeading: 'Loading',\n loadingMessage: 'Loading editor',\n parseErrorNotice: 'This document contains markdown the visual editor cannot represent, so it has opened in source mode.',\n retryRichText: 'Try the visual editor again'\n};\n\nconst DEFAULT_VIEW_MODES: MarkdownEditorViewMode[] = ['rich-text', 'source'];\n\n/*\n DocumentEditor edits a markdown document in rich-text, source or diff mode. The editor engine\n (MDXEditor) is only downloaded when an editor is first rendered.\n If the visual editor cannot parse the document it falls back to source mode rather than\n rendering an empty, silently lossy editor.\n */\nexport const DocumentEditor: FC<DocumentEditorProps> = (\n {\n id,\n label,\n hideLabel = false,\n headingLevel = 3,\n markdown,\n onChange,\n readOnly = false,\n baselineMarkdown,\n viewModes,\n initialViewMode = 'rich-text',\n toolbarItems,\n listTypes,\n imageUploadHandler,\n resolveResourceUrl,\n headerActions,\n annotations,\n labels: customLabels,\n customCssClasses = {},\n onParseError\n }\n) => {\n const labels = useMemo(() => ({ ...defaultDocumentEditorLabels, ...customLabels }), [customLabels]);\n const [parseError, setParseError] = useState<string | null>(null);\n const [editorRevision, setEditorRevision] = useState(0);\n // The latest text, so remounting the editor (e.g. to retry the visual editor) keeps edits even\n // when the host does not feed onChange back into `markdown`.\n const [currentMarkdown, setCurrentMarkdown] = useState(markdown);\n const currentMarkdownRef = useRef(markdown);\n\n useEffect(() => {\n if (markdown !== currentMarkdownRef.current) {\n currentMarkdownRef.current = markdown;\n setCurrentMarkdown(markdown);\n // A replacement document is parsed afresh, so the previous document's parse error no longer applies.\n setParseError(null);\n setEditorRevision((revision) => revision + 1);\n }\n }, [markdown]);\n\n const handleChange = useCallback((nextMarkdown: string) => {\n currentMarkdownRef.current = nextMarkdown;\n setCurrentMarkdown(nextMarkdown);\n onChange?.(nextMarkdown);\n }, [onChange]);\n\n const availableViewModes = useMemo<MarkdownEditorViewMode[]>(() => {\n const requested = viewModes ?? (baselineMarkdown === undefined ? DEFAULT_VIEW_MODES : [...DEFAULT_VIEW_MODES, 'diff']);\n const supported = requested.filter((mode) => mode !== 'diff' || baselineMarkdown !== undefined);\n return parseError ? ['source', ...supported.filter((mode) => mode !== 'rich-text' && mode !== 'source')] : supported;\n }, [viewModes, baselineMarkdown, parseError]);\n\n const viewMode: MarkdownEditorViewMode = parseError ? 'source' : availableViewModes.includes(initialViewMode)\n ? initialViewMode\n : availableViewModes[0] ?? 'source';\n\n const handleParseError = useCallback((error: string) => {\n setParseError((current) => current ?? error);\n onParseError?.(error);\n }, [onParseError]);\n\n const imagePreviewHandler = useMemo(\n // A resolver returning nothing has rejected the source, so the preview is left empty rather than\n // falling back to the unvetted original.\n () => (resolveResourceUrl ? async (source: string) => resolveResourceUrl(source) ?? '' : undefined),\n [resolveResourceUrl]\n );\n\n return (\n <section\n id={ id }\n className={ `documentEditor ${ readOnly ? 'documentEditor--readOnly' : '' } ${ customCssClasses.wrapper || '' }`.trim() }\n aria-label={ label }\n >\n { !hideLabel && (\n <div className={ `documentEditor__header ${ customCssClasses.header || '' }`.trim() }>\n <HeaderBar text={ label } headingLevel={ headingLevel }>\n { headerActions }\n </HeaderBar>\n </div>\n ) }\n\n { hideLabel && headerActions && (\n <div className={ `documentEditor__actions ${ customCssClasses.actions || '' }`.trim() }>{ headerActions }</div>\n ) }\n\n { parseError && (\n <PageBanner id={ `${ id }_parseError` } type=\"warn\" icon=\"warning\" displayMode=\"inline\" animation=\"none\" disableClose>\n <span role=\"status\">{ labels.parseErrorNotice }</span>\n { /* Retried on request rather than after each edit, which would remount the editor on every keystroke. */ }\n <SimpleButton\n id={ `${ id }_retryRichText` }\n label={ labels.retryRichText }\n cssClass=\"button secondary outline compact documentEditor__retry\"\n onClickHandler={ () => setParseError(null) }\n />\n </PageBanner>\n ) }\n\n <div className={ `documentEditor__editor ${ customCssClasses.editor || '' }`.trim() }>\n <Suspense fallback={ <LoadingMessage heading={ labels.loadingHeading } loadingMessage={ labels.loadingMessage } isInline /> }>\n <LazyMarkdownEditorEngine\n // Remount in source mode once a parse error forces the fallback.\n key={ `${ parseError ? 'source-fallback' : 'default' }_${ editorRevision }` }\n markdown={ currentMarkdown }\n onChange={ handleChange }\n readOnly={ readOnly }\n viewMode={ viewMode }\n viewModes={ availableViewModes }\n diffMarkdown={ baselineMarkdown }\n toolbarItems={ toolbarItems }\n listTypes={ listTypes }\n imageUploadHandler={ imageUploadHandler }\n imagePreviewHandler={ imagePreviewHandler }\n contentCssClass={ customCssClasses.content }\n annotations={ annotations }\n annotationLayerId={ `${ id }_annotations` }\n onParseError={ handleParseError }\n />\n </Suspense>\n </div>\n </section>\n );\n};\n\nexport default DocumentEditor;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ .documentEditor {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: var(--documentEditorGap, var(--documentGap, 10px));
5
+ min-width: 0;
6
+ }
7
+ .documentEditor .headerBar {
8
+ margin-bottom: 0;
9
+ }
10
+
11
+ .documentEditor__actions {
12
+ display: flex;
13
+ justify-content: flex-end;
14
+ gap: var(--documentEditorGap, var(--documentGap, 10px));
15
+ }
16
+
17
+ .documentEditor__editor {
18
+ display: flex;
19
+ flex: 1;
20
+ flex-direction: column;
21
+ min-height: var(--documentEditorMinHeight, var(--documentFrameMinHeight, 65vh));
22
+ border: var(--documentEditorBorder, var(--documentBorder));
23
+ border-radius: var(--documentEditorBorderRadius, var(--documentBorderRadius, 5px));
24
+ background: var(--documentEditorBg, var(--documentBg, #fff));
25
+ overflow: auto;
26
+ }
27
+ .documentEditor__editor > aside {
28
+ margin: auto;
29
+ }
30
+
31
+ .documentEditor--readOnly .documentEditor__editor {
32
+ --markdownEditorEngineBg: var(--documentEditorReadOnlyBg, var(--documentSubtleBg));
33
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=documentEditor.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentEditor.interfaces.js","names":[],"sources":["../../../../src/widgets/documentEditor/documentEditor.interfaces.ts"],"sourcesContent":["import { ReactNode } from 'react';\n\nimport { DocumentAnnotationsProps } from '../shared/documents/annotations/annotations.interfaces';\nimport { ResolveResourceUrl } from '../shared/documents/documents.interfaces';\nimport {\n MarkdownEditorImageUploadHandler,\n MarkdownEditorListType,\n MarkdownEditorToolbarItem,\n MarkdownEditorViewMode\n} from '../shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces';\n\nexport type DocumentEditorLabels = {\n loadingHeading: string;\n loadingMessage: string;\n parseErrorNotice: string;\n retryRichText: string;\n};\n\nexport type DocumentEditorCssClasses = {\n wrapper?: string;\n header?: string;\n editor?: string;\n content?: string;\n actions?: string;\n};\n\nexport type DocumentEditorProps = {\n id: string;\n label: string;\n // Visually hide the label while keeping it as the editor's accessible name.\n hideLabel?: boolean;\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n markdown: string;\n /* eslint-disable-next-line no-unused-vars */\n onChange?: (markdown: string) => void;\n readOnly?: boolean;\n // Supplying a baseline adds a diff mode that compares the edited document against it.\n baselineMarkdown?: string;\n viewModes?: MarkdownEditorViewMode[];\n initialViewMode?: MarkdownEditorViewMode;\n toolbarItems?: MarkdownEditorToolbarItem[];\n listTypes?: MarkdownEditorListType[];\n // Enables image insertion; resolves to the URL the uploaded image should be referenced by.\n imageUploadHandler?: MarkdownEditorImageUploadHandler;\n // Resolves image sources for preview, e.g. paths relative to the document.\n resolveResourceUrl?: ResolveResourceUrl;\n // Rendered beside the label, e.g. save or cancel buttons.\n headerActions?: ReactNode;\n // Pinned comments, shown and created in both the rich-text and source views.\n annotations?: DocumentAnnotationsProps;\n labels?: Partial<DocumentEditorLabels>;\n customCssClasses?: DocumentEditorCssClasses;\n /* eslint-disable-next-line no-unused-vars */\n onParseError?: (error: string) => void;\n};\n\nexport type {\n MarkdownEditorImageUploadHandler,\n MarkdownEditorListType,\n MarkdownEditorToolbarItem,\n MarkdownEditorViewMode\n};\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export { DocumentEditor, defaultDocumentEditorLabels } from './DocumentEditor';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["DocumentEditor","defaultDocumentEditorLabels"],"sources":["../../../../src/widgets/documentEditor/index.ts"],"sourcesContent":["export { DocumentEditor, defaultDocumentEditorLabels } from './DocumentEditor';\n\nexport type {\n DocumentEditorCssClasses,\n DocumentEditorLabels,\n DocumentEditorProps,\n MarkdownEditorImageUploadHandler,\n MarkdownEditorListType,\n MarkdownEditorToolbarItem,\n MarkdownEditorViewMode\n} from './documentEditor.interfaces';\n"],"mappings":"AAAA,SAASA,cAAc,EAAEC,2BAA2B,QAAQ,kBAAkB","ignoreList":[]}
@@ -0,0 +1,198 @@
1
+ 'use client';
2
+
3
+ import _extends from "@babel/runtime/helpers/extends";
4
+ import React, { Suspense, useCallback, useEffect, useMemo, useState } from 'react';
5
+ import { HeaderBar, PageBanner } from '../../components';
6
+ import { LoadingMessage } from '../../components/design/loadingMessage/LoadingMessage';
7
+ import { renderIcon } from '../../helpers/iconHelpers';
8
+ import { formatFileSize } from '../../helpers/formatters';
9
+ import { getDocumentFileName, getDocumentKind as getDefaultDocumentKind, resolveDocumentResourceWithFallback } from '../shared/documents/documentHelpers';
10
+ import { AnnotationLayer } from '../shared/documents/annotations/AnnotationLayer';
11
+ import { LazyMarkdownRenderer, LazyWordRenderer } from '../shared/documents/engines/lazyEngines';
12
+ import { useDocumentContent } from '../shared/documents/useDocumentContent';
13
+ import './documentViewer.css';
14
+ export const defaultDocumentViewerLabels = {
15
+ loadingHeading: 'Loading',
16
+ loadingMessage: 'Loading document',
17
+ loadError: 'The document could not be loaded.',
18
+ unsupported: 'A preview is not available for this file type. Download the original file to open it.',
19
+ wordNotice: 'This is a browser representation of the Word document. Styling and pagination may differ from the original.',
20
+ imageError: 'The image could not be loaded.'
21
+ };
22
+ const getErrorDetail = error => error instanceof Error ? error.message : '';
23
+
24
+ // Kinds rendered into the page's own DOM, which comments can be pinned to.
25
+ const ANNOTATABLE_KINDS = ['markdown', 'text'];
26
+
27
+ /*
28
+ DocumentViewer displays a document supplied as inline text, a File or a URL. PDFs and images
29
+ use the browser's native rendering; markdown and Word documents are rendered by engines that
30
+ are only downloaded when a document of that kind is first shown.
31
+ */
32
+ export const DocumentViewer = ({
33
+ id,
34
+ document,
35
+ showHeader = true,
36
+ showMetadata = true,
37
+ headingLevel = 3,
38
+ headerActions,
39
+ metadataIcon = 'file-text',
40
+ contentHeadingOffset = 0,
41
+ showWordNotice = true,
42
+ renderers = {},
43
+ getDocumentKind = getDefaultDocumentKind,
44
+ resolveResourceUrl,
45
+ trustedPdfOrigins,
46
+ annotations,
47
+ labels: customLabels,
48
+ customCssClasses = {},
49
+ onStatusChange
50
+ }) => {
51
+ const labels = useMemo(() => ({
52
+ ...defaultDocumentViewerLabels,
53
+ ...customLabels
54
+ }), [customLabels]);
55
+ const kind = useMemo(() => {
56
+ const detectedKind = getDefaultDocumentKind(document);
57
+ return detectedKind === 'unsupported' || getDocumentKind === getDefaultDocumentKind ? detectedKind : getDocumentKind(document);
58
+ }, [document, getDocumentKind]);
59
+ const content = useDocumentContent(document, kind, {
60
+ trustedPdfOrigins
61
+ });
62
+ const [renderFailure, setRenderFailure] = useState(null);
63
+
64
+ // A renderer failure belongs to the content it happened on and clears once different content loads.
65
+ const renderError = renderFailure && renderFailure.loaded === content.loaded ? renderFailure.error : undefined;
66
+ const handleRenderError = useCallback(error => {
67
+ if (content.loaded) {
68
+ setRenderFailure({
69
+ loaded: content.loaded,
70
+ error
71
+ });
72
+ }
73
+ }, [content.loaded]);
74
+ const isUnsupported = content.status === 'ready' && kind === 'unsupported';
75
+ const status = renderError !== undefined || isUnsupported ? 'error' : content.status;
76
+ const error = renderError ?? content.error;
77
+ useEffect(() => {
78
+ onStatusChange?.(status, error);
79
+ }, [status, error, onStatusChange]);
80
+ const resolveResource = useCallback(resource => resolveDocumentResourceWithFallback(resource, document.url, resolveResourceUrl), [resolveResourceUrl, document.url]);
81
+ const loadingIndicator = /*#__PURE__*/React.createElement(LoadingMessage, {
82
+ heading: labels.loadingHeading,
83
+ loadingMessage: labels.loadingMessage,
84
+ isInline: true
85
+ });
86
+ const builtInRenderers = {
87
+ pdf: ({
88
+ loaded
89
+ }) => /*#__PURE__*/React.createElement("iframe", {
90
+ title: document.title,
91
+ src: loaded.url,
92
+ className: "documentViewer__pdf",
93
+ referrerPolicy: "no-referrer"
94
+ }),
95
+ image: ({
96
+ loaded,
97
+ onError
98
+ }) => /*#__PURE__*/React.createElement("img", {
99
+ className: "documentViewer__image",
100
+ src: loaded.url,
101
+ alt: document.title,
102
+ onError: () => onError(new Error(labels.imageError))
103
+ }),
104
+ text: ({
105
+ loaded
106
+ }) => /*#__PURE__*/React.createElement("pre", {
107
+ className: "documentViewer__text"
108
+ }, /*#__PURE__*/React.createElement("code", null, loaded.content)),
109
+ markdown: ({
110
+ loaded,
111
+ headingOffset,
112
+ resolveResourceUrl: resolve
113
+ }) => /*#__PURE__*/React.createElement(Suspense, {
114
+ fallback: loadingIndicator
115
+ }, /*#__PURE__*/React.createElement(LazyMarkdownRenderer, {
116
+ markdown: loaded.content ?? '',
117
+ headingOffset: headingOffset,
118
+ resolveResourceUrl: resolve
119
+ })),
120
+ word: ({
121
+ loaded,
122
+ onError
123
+ }) => /*#__PURE__*/React.createElement(Suspense, {
124
+ fallback: loadingIndicator
125
+ }, /*#__PURE__*/React.createElement(LazyWordRenderer, {
126
+ arrayBuffer: loaded.arrayBuffer,
127
+ title: document.title,
128
+ cssClass: "documentViewer__word",
129
+ loadingIndicator: loadingIndicator,
130
+ onError: onError
131
+ }))
132
+ };
133
+ const renderContent = () => {
134
+ if (status === 'idle' || status === 'loading') {
135
+ return loadingIndicator;
136
+ }
137
+ if (status === 'error' || !content.loaded || kind === 'unsupported') {
138
+ const message = isUnsupported ? labels.unsupported : labels.loadError;
139
+ const detail = isUnsupported ? '' : getErrorDetail(error);
140
+ return /*#__PURE__*/React.createElement(PageBanner, {
141
+ id: `${id}_error`,
142
+ type: "error",
143
+ icon: "warning",
144
+ displayMode: "inline",
145
+ animation: "none",
146
+ disableClose: true
147
+ }, /*#__PURE__*/React.createElement("span", {
148
+ role: "alert"
149
+ }, message, detail && /*#__PURE__*/React.createElement("span", {
150
+ className: "documentViewer__errorDetail"
151
+ }, detail)));
152
+ }
153
+ const renderer = renderers[kind] ?? builtInRenderers[kind];
154
+ const rendered = renderer?.({
155
+ document,
156
+ loaded: content.loaded,
157
+ resolveResourceUrl: resolveResource,
158
+ headingOffset: contentHeadingOffset,
159
+ onError: handleRenderError
160
+ }) ?? null;
161
+ if (!annotations || !ANNOTATABLE_KINDS.includes(kind)) {
162
+ return rendered;
163
+ }
164
+ return /*#__PURE__*/React.createElement(AnnotationLayer, _extends({}, annotations, {
165
+ id: `${id}_annotations`
166
+ }), rendered);
167
+ };
168
+ const bytes = document.fileSize ?? document.file?.size;
169
+ const fileSize = bytes !== undefined && Number.isFinite(bytes) && bytes >= 0 ? formatFileSize(bytes) : '';
170
+ return /*#__PURE__*/React.createElement("section", {
171
+ id: id,
172
+ className: `documentViewer documentViewer--${kind} ${customCssClasses.wrapper || ''}`.trim(),
173
+ "aria-busy": status === 'loading'
174
+ }, showHeader && /*#__PURE__*/React.createElement(HeaderBar, {
175
+ text: document.title,
176
+ headingLevel: headingLevel
177
+ }, headerActions), showMetadata && /*#__PURE__*/React.createElement("div", {
178
+ className: `documentViewer__metadata ${customCssClasses.metadata || ''}`.trim()
179
+ }, renderIcon(metadataIcon, {
180
+ customCssClass: 'documentViewer__metadataIcon'
181
+ }), /*#__PURE__*/React.createElement("span", {
182
+ className: "documentViewer__fileName"
183
+ }, getDocumentFileName(document)), fileSize && /*#__PURE__*/React.createElement("small", {
184
+ className: "documentViewer__fileSize"
185
+ }, fileSize)), showWordNotice && kind === 'word' && status === 'ready' && /*#__PURE__*/React.createElement(PageBanner, {
186
+ id: `${id}_wordNotice`,
187
+ type: "info",
188
+ displayMode: "inline",
189
+ animation: "none",
190
+ disableClose: true
191
+ }, labels.wordNotice), /*#__PURE__*/React.createElement("div", {
192
+ className: `documentViewer__frame ${customCssClasses.frame || ''}`.trim()
193
+ }, /*#__PURE__*/React.createElement("div", {
194
+ className: `documentViewer__content ${customCssClasses.content || ''}`.trim()
195
+ }, renderContent())));
196
+ };
197
+ export default DocumentViewer;
198
+ //# sourceMappingURL=DocumentViewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentViewer.js","names":["_extends","React","Suspense","useCallback","useEffect","useMemo","useState","HeaderBar","PageBanner","LoadingMessage","renderIcon","formatFileSize","getDocumentFileName","getDocumentKind","getDefaultDocumentKind","resolveDocumentResourceWithFallback","AnnotationLayer","LazyMarkdownRenderer","LazyWordRenderer","useDocumentContent","defaultDocumentViewerLabels","loadingHeading","loadingMessage","loadError","unsupported","wordNotice","imageError","getErrorDetail","error","Error","message","ANNOTATABLE_KINDS","DocumentViewer","id","document","showHeader","showMetadata","headingLevel","headerActions","metadataIcon","contentHeadingOffset","showWordNotice","renderers","resolveResourceUrl","trustedPdfOrigins","annotations","labels","customLabels","customCssClasses","onStatusChange","kind","detectedKind","content","renderFailure","setRenderFailure","renderError","loaded","undefined","handleRenderError","isUnsupported","status","resolveResource","resource","url","loadingIndicator","createElement","heading","isInline","builtInRenderers","pdf","title","src","className","referrerPolicy","image","onError","alt","text","markdown","headingOffset","resolve","fallback","word","arrayBuffer","cssClass","renderContent","detail","type","icon","displayMode","animation","disableClose","role","renderer","rendered","includes","bytes","fileSize","file","size","Number","isFinite","wrapper","trim","metadata","customCssClass","frame"],"sources":["../../../../src/widgets/documentViewer/DocumentViewer.tsx"],"sourcesContent":["'use client';\n\nimport React, { FC, ReactNode, Suspense, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { HeaderBar, PageBanner } from '../../components';\nimport { LoadingMessage } from '../../components/design/loadingMessage/LoadingMessage';\nimport { renderIcon } from '../../helpers/iconHelpers';\nimport { formatFileSize } from '../../helpers/formatters';\nimport {\n getDocumentFileName,\n getDocumentKind as getDefaultDocumentKind,\n resolveDocumentResourceWithFallback\n} from '../shared/documents/documentHelpers';\nimport { AnnotationLayer } from '../shared/documents/annotations/AnnotationLayer';\nimport { DocumentKind, DocumentLoadStatus, LoadedDocument } from '../shared/documents/documents.interfaces';\nimport { LazyMarkdownRenderer, LazyWordRenderer } from '../shared/documents/engines/lazyEngines';\nimport { useDocumentContent } from '../shared/documents/useDocumentContent';\nimport {\n DocumentRenderers,\n DocumentViewerLabels,\n DocumentViewerProps\n} from './documentViewer.interfaces';\n\nimport './documentViewer.scss';\n\nexport const defaultDocumentViewerLabels: DocumentViewerLabels = {\n loadingHeading: 'Loading',\n loadingMessage: 'Loading document',\n loadError: 'The document could not be loaded.',\n unsupported: 'A preview is not available for this file type. Download the original file to open it.',\n wordNotice: 'This is a browser representation of the Word document. Styling and pagination may differ from the original.',\n imageError: 'The image could not be loaded.'\n};\n\nconst getErrorDetail = (error: unknown): string => (error instanceof Error ? error.message : '');\n\n// Kinds rendered into the page's own DOM, which comments can be pinned to.\nconst ANNOTATABLE_KINDS: DocumentKind[] = ['markdown', 'text'];\n\n/*\n DocumentViewer displays a document supplied as inline text, a File or a URL. PDFs and images\n use the browser's native rendering; markdown and Word documents are rendered by engines that\n are only downloaded when a document of that kind is first shown.\n */\nexport const DocumentViewer: FC<DocumentViewerProps> = (\n {\n id,\n document,\n showHeader = true,\n showMetadata = true,\n headingLevel = 3,\n headerActions,\n metadataIcon = 'file-text',\n contentHeadingOffset = 0,\n showWordNotice = true,\n renderers = {},\n getDocumentKind = getDefaultDocumentKind,\n resolveResourceUrl,\n trustedPdfOrigins,\n annotations,\n labels: customLabels,\n customCssClasses = {},\n onStatusChange\n }\n) => {\n const labels = useMemo(() => ({ ...defaultDocumentViewerLabels, ...customLabels }), [customLabels]);\n const kind = useMemo(() => {\n const detectedKind = getDefaultDocumentKind(document);\n return detectedKind === 'unsupported' || getDocumentKind === getDefaultDocumentKind\n ? detectedKind\n : getDocumentKind(document);\n }, [document, getDocumentKind]);\n const content = useDocumentContent(document, kind, { trustedPdfOrigins });\n const [renderFailure, setRenderFailure] = useState<{ loaded: LoadedDocument; error: unknown } | null>(null);\n\n // A renderer failure belongs to the content it happened on and clears once different content loads.\n const renderError = renderFailure && renderFailure.loaded === content.loaded ? renderFailure.error : undefined;\n const handleRenderError = useCallback((error: unknown) => {\n if (content.loaded) {\n setRenderFailure({ loaded: content.loaded, error });\n }\n }, [content.loaded]);\n\n const isUnsupported = content.status === 'ready' && kind === 'unsupported';\n const status: DocumentLoadStatus = renderError !== undefined || isUnsupported ? 'error' : content.status;\n const error = renderError ?? content.error;\n\n useEffect(() => {\n onStatusChange?.(status, error);\n }, [status, error, onStatusChange]);\n\n const resolveResource = useCallback(\n (resource: string) => resolveDocumentResourceWithFallback(resource, document.url, resolveResourceUrl),\n [resolveResourceUrl, document.url]\n );\n\n const loadingIndicator = (\n <LoadingMessage heading={ labels.loadingHeading } loadingMessage={ labels.loadingMessage } isInline />\n );\n\n const builtInRenderers: DocumentRenderers = {\n pdf: ({ loaded }) => (\n <iframe title={ document.title } src={ loaded.url } className=\"documentViewer__pdf\" referrerPolicy=\"no-referrer\" />\n ),\n image: ({ loaded, onError }) => (\n <img\n className=\"documentViewer__image\"\n src={ loaded.url }\n alt={ document.title }\n onError={ () => onError(new Error(labels.imageError)) }\n />\n ),\n text: ({ loaded }) => (\n <pre className=\"documentViewer__text\">\n <code>{ loaded.content }</code>\n </pre>\n ),\n markdown: ({ loaded, headingOffset, resolveResourceUrl: resolve }) => (\n <Suspense fallback={ loadingIndicator }>\n <LazyMarkdownRenderer markdown={ loaded.content ?? '' } headingOffset={ headingOffset } resolveResourceUrl={ resolve } />\n </Suspense>\n ),\n word: ({ loaded, onError }) => (\n <Suspense fallback={ loadingIndicator }>\n <LazyWordRenderer\n arrayBuffer={ loaded.arrayBuffer as ArrayBuffer }\n title={ document.title }\n cssClass=\"documentViewer__word\"\n loadingIndicator={ loadingIndicator }\n onError={ onError }\n />\n </Suspense>\n )\n };\n\n const renderContent = (): ReactNode => {\n if (status === 'idle' || status === 'loading') {\n return loadingIndicator;\n }\n if (status === 'error' || !content.loaded || kind === 'unsupported') {\n const message = isUnsupported ? labels.unsupported : labels.loadError;\n const detail = isUnsupported ? '' : getErrorDetail(error);\n return (\n <PageBanner id={ `${ id }_error` } type=\"error\" icon=\"warning\" displayMode=\"inline\" animation=\"none\" disableClose>\n <span role=\"alert\">\n { message }\n { detail && <span className=\"documentViewer__errorDetail\">{ detail }</span> }\n </span>\n </PageBanner>\n );\n }\n const renderer = renderers[kind] ?? builtInRenderers[kind];\n const rendered = renderer?.({\n document,\n loaded: content.loaded,\n resolveResourceUrl: resolveResource,\n headingOffset: contentHeadingOffset,\n onError: handleRenderError\n }) ?? null;\n if (!annotations || !ANNOTATABLE_KINDS.includes(kind)) {\n return rendered;\n }\n return <AnnotationLayer { ...annotations } id={ `${ id }_annotations` }>{ rendered }</AnnotationLayer>;\n };\n\n const bytes = document.fileSize ?? document.file?.size;\n const fileSize = bytes !== undefined && Number.isFinite(bytes) && bytes >= 0 ? formatFileSize(bytes) : '';\n\n return (\n <section\n id={ id }\n className={ `documentViewer documentViewer--${ kind } ${ customCssClasses.wrapper || '' }`.trim() }\n aria-busy={ status === 'loading' }\n >\n { showHeader && (\n <HeaderBar text={ document.title } headingLevel={ headingLevel }>\n { headerActions }\n </HeaderBar>\n ) }\n\n { showMetadata && (\n <div className={ `documentViewer__metadata ${ customCssClasses.metadata || '' }`.trim() }>\n { renderIcon(metadataIcon, { customCssClass: 'documentViewer__metadataIcon' }) }\n <span className=\"documentViewer__fileName\">{ getDocumentFileName(document) }</span>\n { fileSize && <small className=\"documentViewer__fileSize\">{ fileSize }</small> }\n </div>\n ) }\n\n { showWordNotice && kind === 'word' && status === 'ready' && (\n <PageBanner id={ `${ id }_wordNotice` } type=\"info\" displayMode=\"inline\" animation=\"none\" disableClose>\n { labels.wordNotice }\n </PageBanner>\n ) }\n\n <div className={ `documentViewer__frame ${ customCssClasses.frame || '' }`.trim() }>\n <div className={ `documentViewer__content ${ customCssClasses.content || '' }`.trim() }>\n { renderContent() }\n </div>\n </div>\n </section>\n );\n};\n\nexport default DocumentViewer;\n"],"mappings":"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","ignoreList":[]}