@x15ventures/x15-ui-library 3.18.0 → 3.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. package/THIRD_PARTY_LICENSES.md +11182 -0
  2. package/dist/cjs/autoGenerated/libraryThemes.js +12 -12
  3. package/dist/cjs/autoGenerated/libraryThemes.js.map +1 -1
  4. package/dist/cjs/autoGenerated/libraryThemes.json +12 -12
  5. package/dist/cjs/components/design/banners/pageBanner/PageBanner.js +27 -12
  6. package/dist/cjs/components/design/banners/pageBanner/PageBanner.js.map +1 -1
  7. package/dist/cjs/components/design/card/cardHeader/CardHeaderItem.js +22 -15
  8. package/dist/cjs/components/design/card/cardHeader/CardHeaderItem.js.map +1 -1
  9. package/dist/cjs/components/design/dialog/dialog.css +4 -0
  10. package/dist/cjs/components/design/logos/LogoLink.js +2 -1
  11. package/dist/cjs/components/design/logos/LogoLink.js.map +1 -1
  12. package/dist/cjs/components/design/logos/VentureLogo.js +2 -1
  13. package/dist/cjs/components/design/logos/VentureLogo.js.map +1 -1
  14. package/dist/cjs/components/design/revealMore/RevealMoreBelow.js +2 -2
  15. package/dist/cjs/components/design/revealMore/RevealMoreBelow.js.map +1 -1
  16. package/dist/cjs/components/design/skeleton/Skeleton.js +15 -5
  17. package/dist/cjs/components/design/skeleton/Skeleton.js.map +1 -1
  18. package/dist/cjs/components/design/themeLoader/ThemeLoader.js +1 -1
  19. package/dist/cjs/components/design/themeLoader/ThemeLoader.js.map +1 -1
  20. package/dist/cjs/components/form/buttons/SimpleButton.js +3 -1
  21. package/dist/cjs/components/form/buttons/SimpleButton.js.map +1 -1
  22. package/dist/cjs/components/form/buttons/button.interface.js.map +1 -1
  23. package/dist/cjs/components/form/buttons/userPicButton/UserPicButton.js +5 -3
  24. package/dist/cjs/components/form/buttons/userPicButton/UserPicButton.js.map +1 -1
  25. package/dist/cjs/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.js +64 -19
  26. package/dist/cjs/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.js.map +1 -1
  27. package/dist/cjs/components/navigation/link/Link.js +2 -1
  28. package/dist/cjs/components/navigation/link/Link.js.map +1 -1
  29. package/dist/cjs/components/testing/devToolbar/DevToolbar.js +5 -3
  30. package/dist/cjs/components/testing/devToolbar/DevToolbar.js.map +1 -1
  31. package/dist/cjs/constants/fileUploadTypes.js +9 -4
  32. package/dist/cjs/constants/fileUploadTypes.js.map +1 -1
  33. package/dist/cjs/helpers/dateHelpers.js +34 -23
  34. package/dist/cjs/helpers/dateHelpers.js.map +1 -1
  35. package/dist/cjs/helpers/fileHelpers.js +58 -0
  36. package/dist/cjs/helpers/fileHelpers.js.map +1 -0
  37. package/dist/cjs/helpers/index.js +44 -0
  38. package/dist/cjs/helpers/index.js.map +1 -1
  39. package/dist/cjs/helpers/interactionsHelper.js +8 -1
  40. package/dist/cjs/helpers/interactionsHelper.js.map +1 -1
  41. package/dist/cjs/helpers/objectHelpers.js +23 -9
  42. package/dist/cjs/helpers/objectHelpers.js.map +1 -1
  43. package/dist/cjs/helpers/stringHelpers.js +61 -5
  44. package/dist/cjs/helpers/stringHelpers.js.map +1 -1
  45. package/dist/cjs/helpers/urlHelpers.js +48 -0
  46. package/dist/cjs/helpers/urlHelpers.js.map +1 -0
  47. package/dist/cjs/index.js +191 -0
  48. package/dist/cjs/index.js.map +1 -1
  49. package/dist/cjs/package.json +3 -305
  50. package/dist/cjs/styles/index.css +18 -0
  51. package/dist/cjs/styles/variables/cssVars/_designVariables.css +18 -0
  52. package/dist/cjs/widgets/documentComments/DocumentComments.js +305 -0
  53. package/dist/cjs/widgets/documentComments/DocumentComments.js.map +1 -0
  54. package/dist/cjs/widgets/documentComments/_documentCommentsVariables.css +0 -0
  55. package/dist/cjs/widgets/documentComments/documentComments.css +107 -0
  56. package/dist/cjs/widgets/documentComments/documentComments.interfaces.js +6 -0
  57. package/dist/cjs/widgets/documentComments/documentComments.interfaces.js.map +1 -0
  58. package/dist/cjs/widgets/documentComments/index.js +19 -0
  59. package/dist/cjs/widgets/documentComments/index.js.map +1 -0
  60. package/dist/cjs/widgets/documentComparer/DocumentComparer.js +309 -0
  61. package/dist/cjs/widgets/documentComparer/DocumentComparer.js.map +1 -0
  62. package/dist/cjs/widgets/documentComparer/_documentComparerVariables.css +0 -0
  63. package/dist/cjs/widgets/documentComparer/documentComparer.css +117 -0
  64. package/dist/cjs/widgets/documentComparer/documentComparer.interfaces.js +6 -0
  65. package/dist/cjs/widgets/documentComparer/documentComparer.interfaces.js.map +1 -0
  66. package/dist/cjs/widgets/documentComparer/index.js +19 -0
  67. package/dist/cjs/widgets/documentComparer/index.js.map +1 -0
  68. package/dist/cjs/widgets/documentEditor/DocumentEditor.js +142 -0
  69. package/dist/cjs/widgets/documentEditor/DocumentEditor.js.map +1 -0
  70. package/dist/cjs/widgets/documentEditor/_documentEditorVariables.css +0 -0
  71. package/dist/cjs/widgets/documentEditor/documentEditor.css +33 -0
  72. package/dist/cjs/widgets/documentEditor/documentEditor.interfaces.js +6 -0
  73. package/dist/cjs/widgets/documentEditor/documentEditor.interfaces.js.map +1 -0
  74. package/dist/cjs/widgets/documentEditor/index.js +19 -0
  75. package/dist/cjs/widgets/documentEditor/index.js.map +1 -0
  76. package/dist/cjs/widgets/documentViewer/DocumentViewer.js +206 -0
  77. package/dist/cjs/widgets/documentViewer/DocumentViewer.js.map +1 -0
  78. package/dist/cjs/widgets/documentViewer/_documentViewerVariables.css +0 -0
  79. package/dist/cjs/widgets/documentViewer/documentViewer.css +82 -0
  80. package/dist/cjs/widgets/documentViewer/documentViewer.interfaces.js +6 -0
  81. package/dist/cjs/widgets/documentViewer/documentViewer.interfaces.js.map +1 -0
  82. package/dist/cjs/widgets/documentViewer/index.js +19 -0
  83. package/dist/cjs/widgets/documentViewer/index.js.map +1 -0
  84. package/dist/cjs/widgets/index.js +126 -0
  85. package/dist/cjs/widgets/index.js.map +1 -1
  86. package/dist/cjs/widgets/shared/documents/ToggleGroup.js +32 -0
  87. package/dist/cjs/widgets/shared/documents/ToggleGroup.js.map +1 -0
  88. package/dist/cjs/widgets/shared/documents/_documentVariables.css +0 -0
  89. package/dist/cjs/widgets/shared/documents/annotations/AnnotationLayer.js +279 -0
  90. package/dist/cjs/widgets/shared/documents/annotations/AnnotationLayer.js.map +1 -0
  91. package/dist/cjs/widgets/shared/documents/annotations/_annotationLayerVariables.css +0 -0
  92. package/dist/cjs/widgets/shared/documents/annotations/annotationLayer.css +65 -0
  93. package/dist/cjs/widgets/shared/documents/annotations/annotations.interfaces.js +21 -0
  94. package/dist/cjs/widgets/shared/documents/annotations/annotations.interfaces.js.map +1 -0
  95. package/dist/cjs/widgets/shared/documents/annotations/highlightRegistry.js +67 -0
  96. package/dist/cjs/widgets/shared/documents/annotations/highlightRegistry.js.map +1 -0
  97. package/dist/cjs/widgets/shared/documents/annotations/index.js +39 -0
  98. package/dist/cjs/widgets/shared/documents/annotations/index.js.map +1 -0
  99. package/dist/cjs/widgets/shared/documents/annotations/textIndex.js +112 -0
  100. package/dist/cjs/widgets/shared/documents/annotations/textIndex.js.map +1 -0
  101. package/dist/cjs/widgets/shared/documents/annotations/textQuoteAnchor.js +160 -0
  102. package/dist/cjs/widgets/shared/documents/annotations/textQuoteAnchor.js.map +1 -0
  103. package/dist/cjs/widgets/shared/documents/documentHelpers.js +186 -0
  104. package/dist/cjs/widgets/shared/documents/documentHelpers.js.map +1 -0
  105. package/dist/cjs/widgets/shared/documents/documents.interfaces.js +6 -0
  106. package/dist/cjs/widgets/shared/documents/documents.interfaces.js.map +1 -0
  107. package/dist/cjs/widgets/shared/documents/engines/documentDiff/DocumentDiff.js +73 -0
  108. package/dist/cjs/widgets/shared/documents/engines/documentDiff/DocumentDiff.js.map +1 -0
  109. package/dist/cjs/widgets/shared/documents/engines/documentDiff/_documentDiffVariables.css +0 -0
  110. package/dist/cjs/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.js +114 -0
  111. package/dist/cjs/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.js.map +1 -0
  112. package/dist/cjs/widgets/shared/documents/engines/documentDiff/documentDiff.css +69 -0
  113. package/dist/cjs/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.js +6 -0
  114. package/dist/cjs/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.js.map +1 -0
  115. package/dist/cjs/widgets/shared/documents/engines/lazyEngines.js +19 -0
  116. package/dist/cjs/widgets/shared/documents/engines/lazyEngines.js.map +1 -0
  117. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.js +200 -0
  118. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.js.map +1 -0
  119. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/_markdownEditorEngineVariables.css +0 -0
  120. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.css +50 -0
  121. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.js +6 -0
  122. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.js.map +1 -0
  123. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.js +179 -0
  124. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.js.map +1 -0
  125. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.js +278 -0
  126. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.js.map +1 -0
  127. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.js +208 -0
  128. package/dist/cjs/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.js.map +1 -0
  129. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.js +85 -0
  130. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.js.map +1 -0
  131. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/_markdownRendererVariables.css +0 -0
  132. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/markdownRenderer.css +78 -0
  133. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/index.js +64 -0
  134. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/index.js.map +1 -0
  135. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.js +6 -0
  136. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.js.map +1 -0
  137. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js +71 -0
  138. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js.map +1 -0
  139. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.js +192 -0
  140. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.js.map +1 -0
  141. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js +86 -0
  142. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js.map +1 -0
  143. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.js +38 -0
  144. package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.js.map +1 -0
  145. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/WordRenderer.js +49 -0
  146. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/WordRenderer.js.map +1 -0
  147. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/renderWordDocument.js +214 -0
  148. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/renderWordDocument.js.map +1 -0
  149. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.js +112 -0
  150. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.js.map +1 -0
  151. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/wordXml.js +68 -0
  152. package/dist/cjs/widgets/shared/documents/engines/wordRenderer/wordXml.js.map +1 -0
  153. package/dist/cjs/widgets/shared/documents/index.js +50 -0
  154. package/dist/cjs/widgets/shared/documents/index.js.map +1 -0
  155. package/dist/cjs/widgets/shared/documents/toggleGroup.css +8 -0
  156. package/dist/cjs/widgets/shared/documents/useDocumentContent.js +222 -0
  157. package/dist/cjs/widgets/shared/documents/useDocumentContent.js.map +1 -0
  158. package/dist/components/design/banners/pageBanner/PageBanner.d.ts.map +1 -1
  159. package/dist/components/design/card/cardHeader/CardHeaderItem.d.ts.map +1 -1
  160. package/dist/components/design/logos/LogoLink.d.ts.map +1 -1
  161. package/dist/components/design/logos/VentureLogo.d.ts.map +1 -1
  162. package/dist/components/design/skeleton/Skeleton.d.ts +1 -1
  163. package/dist/components/design/skeleton/Skeleton.d.ts.map +1 -1
  164. package/dist/components/design/themeLoader/ThemeLoader.d.ts.map +1 -1
  165. package/dist/components/form/buttons/SimpleButton.d.ts.map +1 -1
  166. package/dist/components/form/buttons/button.interface.d.ts +1 -0
  167. package/dist/components/form/buttons/button.interface.d.ts.map +1 -1
  168. package/dist/components/form/buttons/userPicButton/UserPicButton.d.ts.map +1 -1
  169. package/dist/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.d.ts.map +1 -1
  170. package/dist/components/navigation/link/Link.d.ts.map +1 -1
  171. package/dist/components/testing/devToolbar/DevToolbar.d.ts.map +1 -1
  172. package/dist/constants/fileUploadTypes.d.ts.map +1 -1
  173. package/dist/esm/autoGenerated/libraryThemes.js +12 -12
  174. package/dist/esm/autoGenerated/libraryThemes.js.map +1 -1
  175. package/dist/esm/autoGenerated/libraryThemes.json +12 -12
  176. package/dist/esm/components/design/banners/pageBanner/PageBanner.js +27 -12
  177. package/dist/esm/components/design/banners/pageBanner/PageBanner.js.map +1 -1
  178. package/dist/esm/components/design/card/cardHeader/CardHeaderItem.js +22 -15
  179. package/dist/esm/components/design/card/cardHeader/CardHeaderItem.js.map +1 -1
  180. package/dist/esm/components/design/dialog/dialog.css +4 -0
  181. package/dist/esm/components/design/logos/LogoLink.js +2 -1
  182. package/dist/esm/components/design/logos/LogoLink.js.map +1 -1
  183. package/dist/esm/components/design/logos/VentureLogo.js +2 -1
  184. package/dist/esm/components/design/logos/VentureLogo.js.map +1 -1
  185. package/dist/esm/components/design/revealMore/RevealMoreBelow.js +1 -1
  186. package/dist/esm/components/design/revealMore/RevealMoreBelow.js.map +1 -1
  187. package/dist/esm/components/design/skeleton/Skeleton.js +15 -5
  188. package/dist/esm/components/design/skeleton/Skeleton.js.map +1 -1
  189. package/dist/esm/components/design/themeLoader/ThemeLoader.js +1 -1
  190. package/dist/esm/components/design/themeLoader/ThemeLoader.js.map +1 -1
  191. package/dist/esm/components/form/buttons/SimpleButton.js +3 -1
  192. package/dist/esm/components/form/buttons/SimpleButton.js.map +1 -1
  193. package/dist/esm/components/form/buttons/button.interface.js.map +1 -1
  194. package/dist/esm/components/form/buttons/userPicButton/UserPicButton.js +5 -3
  195. package/dist/esm/components/form/buttons/userPicButton/UserPicButton.js.map +1 -1
  196. package/dist/esm/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.js +65 -19
  197. package/dist/esm/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.js.map +1 -1
  198. package/dist/esm/components/navigation/link/Link.js +2 -1
  199. package/dist/esm/components/navigation/link/Link.js.map +1 -1
  200. package/dist/esm/components/testing/devToolbar/DevToolbar.js +5 -3
  201. package/dist/esm/components/testing/devToolbar/DevToolbar.js.map +1 -1
  202. package/dist/esm/constants/fileUploadTypes.js +9 -4
  203. package/dist/esm/constants/fileUploadTypes.js.map +1 -1
  204. package/dist/esm/helpers/dateHelpers.js +34 -23
  205. package/dist/esm/helpers/dateHelpers.js.map +1 -1
  206. package/dist/esm/helpers/fileHelpers.js +48 -0
  207. package/dist/esm/helpers/fileHelpers.js.map +1 -0
  208. package/dist/esm/helpers/index.js +2 -0
  209. package/dist/esm/helpers/index.js.map +1 -1
  210. package/dist/esm/helpers/interactionsHelper.js +5 -0
  211. package/dist/esm/helpers/interactionsHelper.js.map +1 -1
  212. package/dist/esm/helpers/objectHelpers.js +23 -9
  213. package/dist/esm/helpers/objectHelpers.js.map +1 -1
  214. package/dist/esm/helpers/stringHelpers.js +61 -5
  215. package/dist/esm/helpers/stringHelpers.js.map +1 -1
  216. package/dist/esm/helpers/urlHelpers.js +40 -0
  217. package/dist/esm/helpers/urlHelpers.js.map +1 -0
  218. package/dist/esm/index.js +3 -1
  219. package/dist/esm/index.js.map +1 -1
  220. package/dist/esm/package.json +2 -304
  221. package/dist/esm/styles/index.css +18 -0
  222. package/dist/esm/styles/variables/cssVars/_designVariables.css +18 -0
  223. package/dist/esm/widgets/documentComments/DocumentComments.js +298 -0
  224. package/dist/esm/widgets/documentComments/DocumentComments.js.map +1 -0
  225. package/dist/esm/widgets/documentComments/_documentCommentsVariables.css +0 -0
  226. package/dist/esm/widgets/documentComments/documentComments.css +107 -0
  227. package/dist/esm/widgets/documentComments/documentComments.interfaces.js +2 -0
  228. package/dist/esm/widgets/documentComments/documentComments.interfaces.js.map +1 -0
  229. package/dist/esm/widgets/documentComments/index.js +2 -0
  230. package/dist/esm/widgets/documentComments/index.js.map +1 -0
  231. package/dist/esm/widgets/documentComparer/DocumentComparer.js +301 -0
  232. package/dist/esm/widgets/documentComparer/DocumentComparer.js.map +1 -0
  233. package/dist/esm/widgets/documentComparer/_documentComparerVariables.css +0 -0
  234. package/dist/esm/widgets/documentComparer/documentComparer.css +117 -0
  235. package/dist/esm/widgets/documentComparer/documentComparer.interfaces.js +2 -0
  236. package/dist/esm/widgets/documentComparer/documentComparer.interfaces.js.map +1 -0
  237. package/dist/esm/widgets/documentComparer/index.js +2 -0
  238. package/dist/esm/widgets/documentComparer/index.js.map +1 -0
  239. package/dist/esm/widgets/documentEditor/DocumentEditor.js +135 -0
  240. package/dist/esm/widgets/documentEditor/DocumentEditor.js.map +1 -0
  241. package/dist/esm/widgets/documentEditor/_documentEditorVariables.css +0 -0
  242. package/dist/esm/widgets/documentEditor/documentEditor.css +33 -0
  243. package/dist/esm/widgets/documentEditor/documentEditor.interfaces.js +2 -0
  244. package/dist/esm/widgets/documentEditor/documentEditor.interfaces.js.map +1 -0
  245. package/dist/esm/widgets/documentEditor/index.js +2 -0
  246. package/dist/esm/widgets/documentEditor/index.js.map +1 -0
  247. package/dist/esm/widgets/documentViewer/DocumentViewer.js +198 -0
  248. package/dist/esm/widgets/documentViewer/DocumentViewer.js.map +1 -0
  249. package/dist/esm/widgets/documentViewer/_documentViewerVariables.css +0 -0
  250. package/dist/esm/widgets/documentViewer/documentViewer.css +82 -0
  251. package/dist/esm/widgets/documentViewer/documentViewer.interfaces.js +2 -0
  252. package/dist/esm/widgets/documentViewer/documentViewer.interfaces.js.map +1 -0
  253. package/dist/esm/widgets/documentViewer/index.js +2 -0
  254. package/dist/esm/widgets/documentViewer/index.js.map +1 -0
  255. package/dist/esm/widgets/index.js +6 -0
  256. package/dist/esm/widgets/index.js.map +1 -1
  257. package/dist/esm/widgets/shared/documents/ToggleGroup.js +24 -0
  258. package/dist/esm/widgets/shared/documents/ToggleGroup.js.map +1 -0
  259. package/dist/esm/widgets/shared/documents/_documentVariables.css +0 -0
  260. package/dist/esm/widgets/shared/documents/annotations/AnnotationLayer.js +273 -0
  261. package/dist/esm/widgets/shared/documents/annotations/AnnotationLayer.js.map +1 -0
  262. package/dist/esm/widgets/shared/documents/annotations/_annotationLayerVariables.css +0 -0
  263. package/dist/esm/widgets/shared/documents/annotations/annotationLayer.css +65 -0
  264. package/dist/esm/widgets/shared/documents/annotations/annotations.interfaces.js +14 -0
  265. package/dist/esm/widgets/shared/documents/annotations/annotations.interfaces.js.map +1 -0
  266. package/dist/esm/widgets/shared/documents/annotations/highlightRegistry.js +58 -0
  267. package/dist/esm/widgets/shared/documents/annotations/highlightRegistry.js.map +1 -0
  268. package/dist/esm/widgets/shared/documents/annotations/index.js +4 -0
  269. package/dist/esm/widgets/shared/documents/annotations/index.js.map +1 -0
  270. package/dist/esm/widgets/shared/documents/annotations/textIndex.js +103 -0
  271. package/dist/esm/widgets/shared/documents/annotations/textIndex.js.map +1 -0
  272. package/dist/esm/widgets/shared/documents/annotations/textQuoteAnchor.js +150 -0
  273. package/dist/esm/widgets/shared/documents/annotations/textQuoteAnchor.js.map +1 -0
  274. package/dist/esm/widgets/shared/documents/documentHelpers.js +168 -0
  275. package/dist/esm/widgets/shared/documents/documentHelpers.js.map +1 -0
  276. package/dist/esm/widgets/shared/documents/documents.interfaces.js +2 -0
  277. package/dist/esm/widgets/shared/documents/documents.interfaces.js.map +1 -0
  278. package/dist/esm/widgets/shared/documents/engines/documentDiff/DocumentDiff.js +65 -0
  279. package/dist/esm/widgets/shared/documents/engines/documentDiff/DocumentDiff.js.map +1 -0
  280. package/dist/esm/widgets/shared/documents/engines/documentDiff/_documentDiffVariables.css +0 -0
  281. package/dist/esm/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.js +102 -0
  282. package/dist/esm/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.js.map +1 -0
  283. package/dist/esm/widgets/shared/documents/engines/documentDiff/documentDiff.css +69 -0
  284. package/dist/esm/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.js +2 -0
  285. package/dist/esm/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.js.map +1 -0
  286. package/dist/esm/widgets/shared/documents/engines/lazyEngines.js +13 -0
  287. package/dist/esm/widgets/shared/documents/engines/lazyEngines.js.map +1 -0
  288. package/dist/esm/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.js +191 -0
  289. package/dist/esm/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.js.map +1 -0
  290. package/dist/esm/widgets/shared/documents/engines/markdownEditor/_markdownEditorEngineVariables.css +0 -0
  291. package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.css +50 -0
  292. package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.js +2 -0
  293. package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.js.map +1 -0
  294. package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.js +170 -0
  295. package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.js.map +1 -0
  296. package/dist/esm/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.js +270 -0
  297. package/dist/esm/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.js.map +1 -0
  298. package/dist/esm/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.js +198 -0
  299. package/dist/esm/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.js.map +1 -0
  300. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.js +76 -0
  301. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.js.map +1 -0
  302. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/_markdownRendererVariables.css +0 -0
  303. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/markdownRenderer.css +78 -0
  304. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/index.js +5 -0
  305. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/index.js.map +1 -0
  306. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.js +2 -0
  307. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.js.map +1 -0
  308. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js +64 -0
  309. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js.map +1 -0
  310. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.js +182 -0
  311. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.js.map +1 -0
  312. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js +78 -0
  313. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js.map +1 -0
  314. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.js +30 -0
  315. package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.js.map +1 -0
  316. package/dist/esm/widgets/shared/documents/engines/wordRenderer/WordRenderer.js +41 -0
  317. package/dist/esm/widgets/shared/documents/engines/wordRenderer/WordRenderer.js.map +1 -0
  318. package/dist/esm/widgets/shared/documents/engines/wordRenderer/renderWordDocument.js +207 -0
  319. package/dist/esm/widgets/shared/documents/engines/wordRenderer/renderWordDocument.js.map +1 -0
  320. package/dist/esm/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.js +105 -0
  321. package/dist/esm/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.js.map +1 -0
  322. package/dist/esm/widgets/shared/documents/engines/wordRenderer/wordXml.js +57 -0
  323. package/dist/esm/widgets/shared/documents/engines/wordRenderer/wordXml.js.map +1 -0
  324. package/dist/esm/widgets/shared/documents/index.js +3 -0
  325. package/dist/esm/widgets/shared/documents/index.js.map +1 -0
  326. package/dist/esm/widgets/shared/documents/toggleGroup.css +8 -0
  327. package/dist/esm/widgets/shared/documents/useDocumentContent.js +215 -0
  328. package/dist/esm/widgets/shared/documents/useDocumentContent.js.map +1 -0
  329. package/dist/helpers/dateHelpers.d.ts.map +1 -1
  330. package/dist/helpers/fileHelpers.d.ts +5 -0
  331. package/dist/helpers/fileHelpers.d.ts.map +1 -0
  332. package/dist/helpers/index.d.ts +3 -0
  333. package/dist/helpers/index.d.ts.map +1 -1
  334. package/dist/helpers/interactionsHelper.d.ts +2 -0
  335. package/dist/helpers/interactionsHelper.d.ts.map +1 -1
  336. package/dist/helpers/objectHelpers.d.ts.map +1 -1
  337. package/dist/helpers/stringHelpers.d.ts.map +1 -1
  338. package/dist/helpers/urlHelpers.d.ts +3 -0
  339. package/dist/helpers/urlHelpers.d.ts.map +1 -0
  340. package/dist/index.d.ts +5 -2
  341. package/dist/index.d.ts.map +1 -1
  342. package/dist/package.json +42 -28
  343. package/dist/widgets/documentComments/DocumentComments.d.ts +7 -0
  344. package/dist/widgets/documentComments/DocumentComments.d.ts.map +1 -0
  345. package/dist/widgets/documentComments/documentComments.interfaces.d.ts +57 -0
  346. package/dist/widgets/documentComments/documentComments.interfaces.d.ts.map +1 -0
  347. package/dist/widgets/documentComments/index.d.ts +3 -0
  348. package/dist/widgets/documentComments/index.d.ts.map +1 -0
  349. package/dist/widgets/documentComparer/DocumentComparer.d.ts +7 -0
  350. package/dist/widgets/documentComparer/DocumentComparer.d.ts.map +1 -0
  351. package/dist/widgets/documentComparer/documentComparer.interfaces.d.ts +78 -0
  352. package/dist/widgets/documentComparer/documentComparer.interfaces.d.ts.map +1 -0
  353. package/dist/widgets/documentComparer/index.d.ts +3 -0
  354. package/dist/widgets/documentComparer/index.d.ts.map +1 -0
  355. package/dist/widgets/documentEditor/DocumentEditor.d.ts +7 -0
  356. package/dist/widgets/documentEditor/DocumentEditor.d.ts.map +1 -0
  357. package/dist/widgets/documentEditor/documentEditor.interfaces.d.ts +40 -0
  358. package/dist/widgets/documentEditor/documentEditor.interfaces.d.ts.map +1 -0
  359. package/dist/widgets/documentEditor/index.d.ts +3 -0
  360. package/dist/widgets/documentEditor/index.d.ts.map +1 -0
  361. package/dist/widgets/documentViewer/DocumentViewer.d.ts +7 -0
  362. package/dist/widgets/documentViewer/DocumentViewer.d.ts.map +1 -0
  363. package/dist/widgets/documentViewer/documentViewer.interfaces.d.ts +47 -0
  364. package/dist/widgets/documentViewer/documentViewer.interfaces.d.ts.map +1 -0
  365. package/dist/widgets/documentViewer/index.d.ts +3 -0
  366. package/dist/widgets/documentViewer/index.d.ts.map +1 -0
  367. package/dist/widgets/index.d.ts +12 -0
  368. package/dist/widgets/index.d.ts.map +1 -1
  369. package/dist/widgets/shared/documents/ToggleGroup.d.ts +15 -0
  370. package/dist/widgets/shared/documents/ToggleGroup.d.ts.map +1 -0
  371. package/dist/widgets/shared/documents/annotations/AnnotationLayer.d.ts +27 -0
  372. package/dist/widgets/shared/documents/annotations/AnnotationLayer.d.ts.map +1 -0
  373. package/dist/widgets/shared/documents/annotations/annotations.interfaces.d.ts +43 -0
  374. package/dist/widgets/shared/documents/annotations/annotations.interfaces.d.ts.map +1 -0
  375. package/dist/widgets/shared/documents/annotations/highlightRegistry.d.ts +12 -0
  376. package/dist/widgets/shared/documents/annotations/highlightRegistry.d.ts.map +1 -0
  377. package/dist/widgets/shared/documents/annotations/index.d.ts +6 -0
  378. package/dist/widgets/shared/documents/annotations/index.d.ts.map +1 -0
  379. package/dist/widgets/shared/documents/annotations/textIndex.d.ts +16 -0
  380. package/dist/widgets/shared/documents/annotations/textIndex.d.ts.map +1 -0
  381. package/dist/widgets/shared/documents/annotations/textQuoteAnchor.d.ts +15 -0
  382. package/dist/widgets/shared/documents/annotations/textQuoteAnchor.d.ts.map +1 -0
  383. package/dist/widgets/shared/documents/documentHelpers.d.ts +14 -0
  384. package/dist/widgets/shared/documents/documentHelpers.d.ts.map +1 -0
  385. package/dist/widgets/shared/documents/documents.interfaces.d.ts +20 -0
  386. package/dist/widgets/shared/documents/documents.interfaces.d.ts.map +1 -0
  387. package/dist/widgets/shared/documents/engines/documentDiff/DocumentDiff.d.ts +6 -0
  388. package/dist/widgets/shared/documents/engines/documentDiff/DocumentDiff.d.ts.map +1 -0
  389. package/dist/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.d.ts +25 -0
  390. package/dist/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.d.ts.map +1 -0
  391. package/dist/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.d.ts +17 -0
  392. package/dist/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.d.ts.map +1 -0
  393. package/dist/widgets/shared/documents/engines/lazyEngines.d.ts +5 -0
  394. package/dist/widgets/shared/documents/engines/lazyEngines.d.ts.map +1 -0
  395. package/dist/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.d.ts +8 -0
  396. package/dist/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.d.ts.map +1 -0
  397. package/dist/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.d.ts +23 -0
  398. package/dist/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.d.ts.map +1 -0
  399. package/dist/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.d.ts +12 -0
  400. package/dist/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.d.ts.map +1 -0
  401. package/dist/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.d.ts +8 -0
  402. package/dist/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.d.ts.map +1 -0
  403. package/dist/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.d.ts +32 -0
  404. package/dist/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.d.ts.map +1 -0
  405. package/dist/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.d.ts +12 -0
  406. package/dist/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.d.ts.map +1 -0
  407. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/index.d.ts +7 -0
  408. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/index.d.ts.map +1 -0
  409. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.d.ts +16 -0
  410. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.d.ts.map +1 -0
  411. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.d.ts +3 -0
  412. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.d.ts.map +1 -0
  413. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.d.ts +6 -0
  414. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.d.ts.map +1 -0
  415. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.d.ts +3 -0
  416. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.d.ts.map +1 -0
  417. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.d.ts +8 -0
  418. package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.d.ts.map +1 -0
  419. package/dist/widgets/shared/documents/engines/wordRenderer/WordRenderer.d.ts +11 -0
  420. package/dist/widgets/shared/documents/engines/wordRenderer/WordRenderer.d.ts.map +1 -0
  421. package/dist/widgets/shared/documents/engines/wordRenderer/renderWordDocument.d.ts +7 -0
  422. package/dist/widgets/shared/documents/engines/wordRenderer/renderWordDocument.d.ts.map +1 -0
  423. package/dist/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.d.ts +3 -0
  424. package/dist/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.d.ts.map +1 -0
  425. package/dist/widgets/shared/documents/engines/wordRenderer/wordXml.d.ts +21 -0
  426. package/dist/widgets/shared/documents/engines/wordRenderer/wordXml.d.ts.map +1 -0
  427. package/dist/widgets/shared/documents/index.d.ts +5 -0
  428. package/dist/widgets/shared/documents/index.d.ts.map +1 -0
  429. package/dist/widgets/shared/documents/useDocumentContent.d.ts +11 -0
  430. package/dist/widgets/shared/documents/useDocumentContent.d.ts.map +1 -0
  431. package/package.json +42 -28
  432. package/readme.md +49 -2
  433. package/dist/components/design/dialog/Dialog.test.d.ts +0 -5
  434. package/dist/components/design/dialog/Dialog.test.d.ts.map +0 -1
  435. package/dist/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.test.d.ts +0 -5
  436. package/dist/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.test.d.ts.map +0 -1
  437. package/dist/components/design/tooltip/Tooltip.test.d.ts +0 -2
  438. package/dist/components/design/tooltip/Tooltip.test.d.ts.map +0 -1
  439. package/dist/components/form/buttons/SimpleButton.test.d.ts +0 -5
  440. package/dist/components/form/buttons/SimpleButton.test.d.ts.map +0 -1
  441. package/dist/components/form/formFields/formFieldWrapper/FormField.test.d.ts +0 -5
  442. package/dist/components/form/formFields/formFieldWrapper/FormField.test.d.ts.map +0 -1
  443. package/dist/components/form/formFields/subComponents/inputs/checkbox/InputCheckbox.test.d.ts +0 -5
  444. package/dist/components/form/formFields/subComponents/inputs/checkbox/InputCheckbox.test.d.ts.map +0 -1
  445. package/dist/components/form/formFields/subComponents/inputs/checkbox/checkboxSwitch/CheckboxSwitch.test.d.ts +0 -5
  446. package/dist/components/form/formFields/subComponents/inputs/checkbox/checkboxSwitch/CheckboxSwitch.test.d.ts.map +0 -1
  447. package/dist/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.test.d.ts +0 -5
  448. package/dist/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.test.d.ts.map +0 -1
  449. package/dist/components/form/formFields/subComponents/inputs/file/fileAttachmentList/FileAttachmentsList.test.d.ts +0 -5
  450. package/dist/components/form/formFields/subComponents/inputs/file/fileAttachmentList/FileAttachmentsList.test.d.ts.map +0 -1
  451. package/dist/components/form/formFields/subComponents/inputs/text/InputText.test.d.ts +0 -5
  452. package/dist/components/form/formFields/subComponents/inputs/text/InputText.test.d.ts.map +0 -1
  453. package/dist/components/form/formFields/subComponents/nestedFormContext.test.d.ts +0 -5
  454. package/dist/components/form/formFields/subComponents/nestedFormContext.test.d.ts.map +0 -1
  455. package/dist/components/form/formFields/subComponents/select/Select.test.d.ts +0 -5
  456. package/dist/components/form/formFields/subComponents/select/Select.test.d.ts.map +0 -1
  457. package/dist/components/form/formFields/subComponents/textarea/Textarea.test.d.ts +0 -5
  458. package/dist/components/form/formFields/subComponents/textarea/Textarea.test.d.ts.map +0 -1
  459. package/dist/components/form/hookFormWrapper/HookFormWrapper.test.d.ts +0 -5
  460. package/dist/components/form/hookFormWrapper/HookFormWrapper.test.d.ts.map +0 -1
  461. package/dist/components/form/validation/ValidationMessages.test.d.ts +0 -5
  462. package/dist/components/form/validation/ValidationMessages.test.d.ts.map +0 -1
  463. package/dist/components/navigation/bubbleNavigator/bubbleNavigatorUtilities.test.d.ts +0 -2
  464. package/dist/components/navigation/bubbleNavigator/bubbleNavigatorUtilities.test.d.ts.map +0 -1
  465. package/dist/components/navigation/menu/menuItemContent/MenuItemIcon.test.d.ts +0 -5
  466. package/dist/components/navigation/menu/menuItemContent/MenuItemIcon.test.d.ts.map +0 -1
  467. package/dist/helpers/ageHelpers.test.d.ts +0 -2
  468. package/dist/helpers/ageHelpers.test.d.ts.map +0 -1
  469. package/dist/helpers/dateHelpers.test.d.ts +0 -2
  470. package/dist/helpers/dateHelpers.test.d.ts.map +0 -1
  471. package/dist/helpers/formatters.test.d.ts +0 -5
  472. package/dist/helpers/formatters.test.d.ts.map +0 -1
  473. package/dist/helpers/iconHelpers.test.d.ts +0 -5
  474. package/dist/helpers/iconHelpers.test.d.ts.map +0 -1
  475. package/dist/helpers/numberHelpers.test.d.ts +0 -5
  476. package/dist/helpers/numberHelpers.test.d.ts.map +0 -1
  477. package/dist/helpers/objectHelpers.test.d.ts +0 -2
  478. package/dist/helpers/objectHelpers.test.d.ts.map +0 -1
  479. package/dist/helpers/stringHelpers.test.d.ts +0 -2
  480. package/dist/helpers/stringHelpers.test.d.ts.map +0 -1
  481. package/dist/hooks/InteractiveHostFocus.test.d.ts +0 -5
  482. package/dist/hooks/InteractiveHostFocus.test.d.ts.map +0 -1
  483. package/dist/widgets/processLauncher/ProcessLauncher.test.d.ts +0 -5
  484. package/dist/widgets/processLauncher/ProcessLauncher.test.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderWordDocument.js","names":["renderAsync","DOMPurify","JSZip","prepareWordPreviewNumbering","createWordNumberingResolver","getWordStyles","wordAttribute","wordChild","wordNamespace","wordValue","PAGE_GUTTER","CONTENT_SECURITY_POLICY","WORD_DOCUMENT_LIMITS","maxFileBytes","maxUncompressedBytes","maxEntries","TOO_LARGE","readZipEntry","file","budget","Promise","resolve","reject","chunks","length","stream","internalStream","on","chunk","remaining","pause","Error","push","content","Uint8Array","offset","forEach","set","resume","loadBoundedZip","arrayBuffer","byteLength","zip","loadAsync","entries","Object","values","files","filter","dir","bounded","name","parseWordPart","undefined","xml","DOMParser","parseFromString","async","querySelector","hasLatinFont","fonts","Boolean","inheritLatinFonts","styleDefinitions","styles","defaultFonts","getElementsByTagNameNS","resolveLatinFont","styleId","visited","Set","has","add","style","byId","get","id","inheritedFonts","font","setAttributeNS","ensureChild","source","parent","prepend","child","createElementNS","append","isPageBreak","element","localName","convertLeadingPageBreaks","paragraph","runContent","Array","from","flatMap","run","children","properties","remove","applyResolvedNumbering","resolveNumbering","level","numbering","wrapPreviewDocument","html","renderWordDocument","XMLSerializer","serializeToString","numberingDefinitions","numberingCss","container","document","createElement","generateAsync","type","useBase64URL","ignoreLastRenderedPageBreak","renderAltChunks","numberingStyle","textContent","querySelectorAll","page","width","setProperty","sanitize","innerHTML","ADD_TAGS","FORCE_BODY"],"sources":["../../../../../../../src/widgets/shared/documents/engines/wordRenderer/renderWordDocument.ts"],"sourcesContent":["import { renderAsync } from 'docx-preview';\nimport DOMPurify from 'dompurify';\nimport JSZip from 'jszip';\n\nimport { prepareWordPreviewNumbering } from './wordPreviewNumbering';\nimport {\n createWordNumberingResolver,\n getWordStyles,\n wordAttribute,\n wordChild,\n wordNamespace,\n WordStyles,\n wordValue\n} from './wordXml';\n\n// The preview runs in a sandboxed iframe that cannot read the host page's CSS variables.\nconst PAGE_GUTTER = '15px';\nconst CONTENT_SECURITY_POLICY = 'default-src \\'none\\'; img-src data:; font-src data:; style-src \\'unsafe-inline\\';';\n\n/*\n Limits against \"zip bombs\": a small .docx can declare, or simply contain, gigabytes of compressed\n content. The sizes a zip declares cannot be trusted, so every entry is decompressed through a\n stream that stops once the running total passes the limit, into a new zip that docx-preview reads.\n Its own decompression then only ever sees content whose size has been measured.\n */\nexport const WORD_DOCUMENT_LIMITS = {\n maxFileBytes: 50 * 1024 * 1024,\n maxUncompressedBytes: 200 * 1024 * 1024,\n maxEntries: 5000\n};\n\n// Documented by JSZip but missing from its typings.\ntype StreamableZipObject = JSZip.JSZipObject & {\n /* eslint-disable-next-line no-unused-vars */\n internalStream: (type: 'uint8array') => JSZip.JSZipStreamHelper<Uint8Array>;\n};\n\nconst TOO_LARGE = 'This Word document is too large to preview.';\n\nconst readZipEntry = (file: JSZip.JSZipObject, budget: { remaining: number }): Promise<Uint8Array> =>\n new Promise((resolve, reject) => {\n const chunks: Uint8Array[] = [];\n let length = 0;\n const stream = (file as StreamableZipObject).internalStream('uint8array');\n stream\n .on('data', (chunk) => {\n budget.remaining -= chunk.length;\n if (budget.remaining < 0) {\n stream.pause();\n reject(new Error(TOO_LARGE));\n return;\n }\n chunks.push(chunk);\n length += chunk.length;\n })\n .on('error', reject)\n .on('end', () => {\n const content = new Uint8Array(length);\n let offset = 0;\n chunks.forEach((chunk) => {\n content.set(chunk, offset);\n offset += chunk.length;\n });\n resolve(content);\n })\n .resume();\n });\n\nconst loadBoundedZip = async (arrayBuffer: ArrayBuffer): Promise<JSZip> => {\n if (arrayBuffer.byteLength > WORD_DOCUMENT_LIMITS.maxFileBytes) {\n throw new Error(TOO_LARGE);\n }\n const zip = await JSZip.loadAsync(arrayBuffer);\n const entries = Object.values(zip.files).filter((file) => !file.dir);\n if (entries.length > WORD_DOCUMENT_LIMITS.maxEntries) {\n throw new Error(TOO_LARGE);\n }\n const bounded = new JSZip();\n const budget = { remaining: WORD_DOCUMENT_LIMITS.maxUncompressedBytes };\n // Sequential, so the budget is spent in order and the first entry over it stops the rest.\n for (const file of entries) {\n bounded.file(file.name, await readZipEntry(file, budget));\n }\n return bounded;\n};\n\nconst parseWordPart = async (zip: JSZip, name: string): Promise<Document | undefined> => {\n const file = zip.file(`word/${ name }.xml`);\n if (!file) {\n return undefined;\n }\n const xml = new DOMParser().parseFromString(await file.async('string'), 'application/xml');\n if (xml.querySelector('parsererror')) {\n throw new Error(`Invalid Word XML: ${ name }`);\n }\n return xml;\n};\n\nconst hasLatinFont = (fonts: Element | undefined): boolean => Boolean(wordAttribute(fonts, 'ascii') || wordAttribute(fonts, 'asciiTheme'));\n\n// docx-preview replaces the whole CSS font-family when a style only names an East Asian font,\n// so copy the Latin font each style would otherwise inherit.\nconst inheritLatinFonts = (styleDefinitions: Document | undefined, styles: WordStyles): void => {\n const defaultFonts = styleDefinitions\n ?.getElementsByTagNameNS(wordNamespace, 'rPrDefault')[0]\n ?.getElementsByTagNameNS(wordNamespace, 'rFonts')[0];\n\n const resolveLatinFont = (styleId: string | undefined, visited = new Set<string>()): Element | undefined => {\n if (!styleId) {\n return defaultFonts;\n }\n if (visited.has(styleId)) {\n throw new Error(`Circular Word style inheritance: ${ styleId }`);\n }\n visited.add(styleId);\n const style = styles.byId.get(styleId);\n const fonts = wordChild(wordChild(style, 'rPr'), 'rFonts');\n return hasLatinFont(fonts) ? fonts : resolveLatinFont(wordValue(style, 'basedOn'), visited);\n };\n\n styles.byId.forEach((style, id) => {\n const fonts = wordChild(wordChild(style, 'rPr'), 'rFonts');\n if (!fonts || hasLatinFont(fonts)) {\n return;\n }\n const inheritedFonts = resolveLatinFont(id);\n ['ascii', 'asciiTheme'].forEach((name) => {\n const font = wordAttribute(inheritedFonts, name);\n if (font) {\n fonts.setAttributeNS(wordNamespace, `w:${ name }`, font);\n }\n });\n });\n};\n\nconst ensureChild = (source: Document, parent: Element, name: string, prepend = false): Element => {\n let child = wordChild(parent, name);\n if (!child) {\n child = source.createElementNS(wordNamespace, `w:${ name }`);\n if (prepend) {\n parent.prepend(child);\n } else {\n parent.append(child);\n }\n }\n return child;\n};\n\nconst isPageBreak = (element: Element): boolean =>\n element.localName === 'lastRenderedPageBreak' || (element.localName === 'br' && wordAttribute(element, 'type') === 'page');\n\n// A leading inline page break otherwise produces an empty numbered fragment before the paragraph.\nconst convertLeadingPageBreaks = (source: Document, paragraph: Element): void => {\n const runContent = Array.from(paragraph.getElementsByTagNameNS(wordNamespace, 'r'))\n .flatMap((run) => Array.from(run.children).filter((child) => child.localName !== 'rPr'));\n for (const child of runContent) {\n if (!isPageBreak(child)) {\n break;\n }\n const properties = ensureChild(source, paragraph, 'pPr', true);\n ensureChild(source, properties, 'pageBreakBefore').setAttributeNS(wordNamespace, 'w:val', '1');\n child.remove();\n }\n};\n\nconst applyResolvedNumbering = (\n source: Document,\n paragraph: Element,\n resolveNumbering: ReturnType<typeof createWordNumberingResolver>\n): void => {\n const { id, level } = resolveNumbering(wordChild(paragraph, 'pPr'));\n if (!id || id === '0') {\n return;\n }\n const numbering = ensureChild(source, ensureChild(source, paragraph, 'pPr', true), 'numPr');\n ensureChild(source, numbering, 'numId').setAttributeNS(wordNamespace, 'w:val', id);\n ensureChild(source, numbering, 'ilvl').setAttributeNS(wordNamespace, 'w:val', level);\n};\n\nconst wrapPreviewDocument = (html: string): string => `<!doctype html><html><head><meta charset=\"utf-8\">\n<meta http-equiv=\"Content-Security-Policy\" content=\"${ CONTENT_SECURITY_POLICY }\">\n</head><body>${ html }\n<style>body { margin: 0; } .docx-wrapper { padding: ${ PAGE_GUTTER }; align-items: flex-start; }\n.docx-wrapper > section.docx { flex-shrink: 0; margin: 0 auto ${ PAGE_GUTTER }; }\n.docx-wrapper p { text-indent: 0 !important; margin-inline-start: 0 !important; }</style>\n</body></html>`;\n\n/*\n Renders a .docx file to a self-contained, sanitised HTML document for a sandboxed iframe.\n The Word XML is patched first to fix fonts, page breaks and list numbering that docx-preview\n would otherwise render incorrectly.\n */\nexport const renderWordDocument = async (arrayBuffer: ArrayBuffer): Promise<string> => {\n const zip = await loadBoundedZip(arrayBuffer);\n const source = await parseWordPart(zip, 'document');\n if (!source) {\n throw new Error('DOCX is missing word/document.xml.');\n }\n\n const styleDefinitions = await parseWordPart(zip, 'styles');\n const styles = getWordStyles(styleDefinitions);\n inheritLatinFonts(styleDefinitions, styles);\n if (styleDefinitions) {\n zip.file('word/styles.xml', new XMLSerializer().serializeToString(styleDefinitions));\n }\n\n const numberingDefinitions = await parseWordPart(zip, 'numbering');\n const resolveNumbering = createWordNumberingResolver(numberingDefinitions, styles);\n Array.from(source.getElementsByTagNameNS(wordNamespace, 'p')).forEach((paragraph) => {\n convertLeadingPageBreaks(source, paragraph);\n applyResolvedNumbering(source, paragraph, resolveNumbering);\n });\n const numberingCss = prepareWordPreviewNumbering(numberingDefinitions, styles);\n if (numberingDefinitions) {\n zip.file('word/numbering.xml', new XMLSerializer().serializeToString(numberingDefinitions));\n }\n zip.file('word/document.xml', new XMLSerializer().serializeToString(source));\n\n const container = document.createElement('div');\n await renderAsync(await zip.generateAsync({ type: 'arraybuffer' }), container, undefined, {\n useBase64URL: true,\n ignoreLastRenderedPageBreak: false,\n renderAltChunks: false\n });\n const numberingStyle = document.createElement('style');\n numberingStyle.textContent = numberingCss;\n container.append(numberingStyle);\n container.querySelectorAll<HTMLElement>('section.docx').forEach((page) => {\n if (page.style.width) {\n // Scale fixed-width pages down to fit narrow viewers instead of scrolling sideways.\n page.style.setProperty('zoom', `min(1, calc((100vw - 2 * ${ PAGE_GUTTER }) / ${ page.style.width }))`);\n }\n });\n\n return wrapPreviewDocument(DOMPurify.sanitize(container.innerHTML, { ADD_TAGS: ['style'], FORCE_BODY: true }));\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,105 @@
1
+ import { wordAttribute, wordChild, wordNamespace, wordValue } from './wordXml';
2
+ const MAX_WORD_LIST_LEVEL = 8;
3
+ const childElements = (element, localName) => Array.from(element.children).filter(child => child.localName === localName);
4
+ const setStartOverride = (numbering, level, startOverride) => {
5
+ let start = wordChild(level, 'start');
6
+ if (!start) {
7
+ start = numbering.createElementNS(wordNamespace, 'w:start');
8
+ level.prepend(start);
9
+ }
10
+ start.setAttributeNS(wordNamespace, 'w:val', startOverride);
11
+ };
12
+
13
+ /*
14
+ Normalises numbering definitions the preview library does not resolve (style links, level
15
+ overrides, restarts), then returns CSS counter rules that replace its immediate-parent-only resets.
16
+ Missing or cyclic definitions throw so a mis-numbered preview is never shown silently.
17
+ */
18
+ export const prepareWordPreviewNumbering = (numbering, styles) => {
19
+ if (!numbering) {
20
+ return '';
21
+ }
22
+ const nums = new Map(Array.from(numbering.getElementsByTagNameNS(wordNamespace, 'num')).map(element => [wordAttribute(element, 'numId'), element]));
23
+ const abstracts = new Map(Array.from(numbering.getElementsByTagNameNS(wordNamespace, 'abstractNum')).map(element => [wordAttribute(element, 'abstractNumId'), element]));
24
+ const resolveLevels = (id, visited = new Set()) => {
25
+ if (visited.has(id)) {
26
+ throw new Error(`Circular Word numbering style link: ${id}`);
27
+ }
28
+ visited.add(id);
29
+ const num = nums.get(id);
30
+ const abstract = abstracts.get(wordValue(num, 'abstractNumId'));
31
+ if (!num || !abstract) {
32
+ throw new Error(`Missing Word numbering definition: ${id}`);
33
+ }
34
+ const linkedId = styles.properties(wordValue(abstract, 'numStyleLink')).numId;
35
+ const levels = linkedId ? resolveLevels(linkedId, visited) : new Map();
36
+ childElements(abstract, 'lvl').forEach(level => {
37
+ levels.set(Number(wordAttribute(level, 'ilvl')), level.cloneNode(true));
38
+ });
39
+ childElements(num, 'lvlOverride').forEach(override => {
40
+ const index = Number(wordAttribute(override, 'ilvl'));
41
+ const definition = wordChild(override, 'lvl') ?? levels.get(index);
42
+ if (!definition) {
43
+ throw new Error(`Missing Word numbering definition for numId ${id}, level ${index}.`);
44
+ }
45
+ const level = definition.cloneNode(true);
46
+ const startOverride = wordValue(override, 'startOverride');
47
+ if (startOverride !== undefined) {
48
+ setStartOverride(numbering, level, startOverride);
49
+ }
50
+ levels.set(index, level);
51
+ });
52
+ return levels;
53
+ };
54
+ const resolved = Array.from(nums.keys()).map(id => {
55
+ if (!id || !/^\d+$/.test(id)) {
56
+ throw new Error(`Invalid Word numbering ID: ${id}`);
57
+ }
58
+ return {
59
+ id,
60
+ levels: resolveLevels(id)
61
+ };
62
+ });
63
+ const initialCounters = [];
64
+ const rules = [];
65
+ let nextAbstractId = Math.max(-1, ...Array.from(abstracts.keys()).map(id => Number(id))) + 1;
66
+ resolved.forEach(({
67
+ id,
68
+ levels
69
+ }) => {
70
+ const abstract = numbering.createElementNS(wordNamespace, 'w:abstractNum');
71
+ const abstractId = String(nextAbstractId);
72
+ nextAbstractId += 1;
73
+ abstract.setAttributeNS(wordNamespace, 'w:abstractNumId', abstractId);
74
+ const definitions = Array.from(levels).sort(([first], [second]) => first - second).map(([index, level]) => {
75
+ const start = Number(wordValue(level, 'start') ?? 1);
76
+ const restart = Number(wordValue(level, 'lvlRestart') ?? index);
77
+ const isValidLevel = Number.isInteger(index) && index >= 0 && index <= MAX_WORD_LIST_LEVEL;
78
+ if (!isValidLevel || !Number.isSafeInteger(start) || !Number.isInteger(restart) || restart < 0 || restart > index) {
79
+ throw new Error(`Invalid Word numbering properties for numId ${id}, level ${index}.`);
80
+ }
81
+ level.setAttributeNS(wordNamespace, 'w:ilvl', String(index));
82
+ abstract.append(level);
83
+ const counter = `docx-num-${id}-${index} ${start - 1}`;
84
+ initialCounters.push(counter);
85
+ return {
86
+ index,
87
+ restart,
88
+ counter
89
+ };
90
+ });
91
+ numbering.documentElement.append(abstract);
92
+ wordChild(nums.get(id), 'abstractNumId')?.setAttributeNS(wordNamespace, 'w:val', abstractId);
93
+ definitions.forEach(({
94
+ index
95
+ }) => {
96
+ const resets = definitions.filter(deeper => deeper.index > index && deeper.restart > index).map(deeper => deeper.counter);
97
+ rules.push(`p.docx-num-${id}-${index} { counter-set: ${resets.join(' ') || 'none'}; }`);
98
+ });
99
+ });
100
+ if (initialCounters.length) {
101
+ rules.unshift(`.docx-wrapper { counter-reset: ${initialCounters.join(' ')}; }`);
102
+ }
103
+ return rules.join('\n');
104
+ };
105
+ //# sourceMappingURL=wordPreviewNumbering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wordPreviewNumbering.js","names":["wordAttribute","wordChild","wordNamespace","wordValue","MAX_WORD_LIST_LEVEL","childElements","element","localName","Array","from","children","filter","child","setStartOverride","numbering","level","startOverride","start","createElementNS","prepend","setAttributeNS","prepareWordPreviewNumbering","styles","nums","Map","getElementsByTagNameNS","map","abstracts","resolveLevels","id","visited","Set","has","Error","add","num","get","abstract","linkedId","properties","numId","levels","forEach","set","Number","cloneNode","override","index","definition","undefined","resolved","keys","test","initialCounters","rules","nextAbstractId","Math","max","abstractId","String","definitions","sort","first","second","restart","isValidLevel","isInteger","isSafeInteger","append","counter","push","documentElement","resets","deeper","join","length","unshift"],"sources":["../../../../../../../src/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.ts"],"sourcesContent":["import { wordAttribute, wordChild, wordNamespace, WordStyles, wordValue } from './wordXml';\n\nconst MAX_WORD_LIST_LEVEL = 8;\n\nconst childElements = (element: Element, localName: string): Element[] =>\n Array.from(element.children).filter((child) => child.localName === localName);\n\nconst setStartOverride = (numbering: Document, level: Element, startOverride: string): void => {\n let start = wordChild(level, 'start');\n if (!start) {\n start = numbering.createElementNS(wordNamespace, 'w:start');\n level.prepend(start);\n }\n start.setAttributeNS(wordNamespace, 'w:val', startOverride);\n};\n\n/*\n Normalises numbering definitions the preview library does not resolve (style links, level\n overrides, restarts), then returns CSS counter rules that replace its immediate-parent-only resets.\n Missing or cyclic definitions throw so a mis-numbered preview is never shown silently.\n */\nexport const prepareWordPreviewNumbering = (numbering: Document | undefined, styles: WordStyles): string => {\n if (!numbering) {\n return '';\n }\n const nums = new Map(Array.from(numbering.getElementsByTagNameNS(wordNamespace, 'num'))\n .map((element) => [wordAttribute(element, 'numId'), element]));\n const abstracts = new Map(Array.from(numbering.getElementsByTagNameNS(wordNamespace, 'abstractNum'))\n .map((element) => [wordAttribute(element, 'abstractNumId'), element]));\n\n const resolveLevels = (id: string, visited = new Set<string>()): Map<number, Element> => {\n if (visited.has(id)) {\n throw new Error(`Circular Word numbering style link: ${ id }`);\n }\n visited.add(id);\n const num = nums.get(id);\n const abstract = abstracts.get(wordValue(num, 'abstractNumId'));\n if (!num || !abstract) {\n throw new Error(`Missing Word numbering definition: ${ id }`);\n }\n const linkedId = styles.properties(wordValue(abstract, 'numStyleLink')).numId;\n const levels = linkedId ? resolveLevels(linkedId, visited) : new Map<number, Element>();\n childElements(abstract, 'lvl').forEach((level) => {\n levels.set(Number(wordAttribute(level, 'ilvl')), level.cloneNode(true) as Element);\n });\n childElements(num, 'lvlOverride').forEach((override) => {\n const index = Number(wordAttribute(override, 'ilvl'));\n const definition = wordChild(override, 'lvl') ?? levels.get(index);\n if (!definition) {\n throw new Error(`Missing Word numbering definition for numId ${ id }, level ${ index }.`);\n }\n const level = definition.cloneNode(true) as Element;\n const startOverride = wordValue(override, 'startOverride');\n if (startOverride !== undefined) {\n setStartOverride(numbering, level, startOverride);\n }\n levels.set(index, level);\n });\n return levels;\n };\n\n const resolved = Array.from(nums.keys()).map((id) => {\n if (!id || !/^\\d+$/.test(id)) {\n throw new Error(`Invalid Word numbering ID: ${ id }`);\n }\n return { id, levels: resolveLevels(id) };\n });\n\n const initialCounters: string[] = [];\n const rules: string[] = [];\n let nextAbstractId = Math.max(-1, ...Array.from(abstracts.keys()).map((id) => Number(id))) + 1;\n\n resolved.forEach(({ id, levels }) => {\n const abstract = numbering.createElementNS(wordNamespace, 'w:abstractNum');\n const abstractId = String(nextAbstractId);\n nextAbstractId += 1;\n abstract.setAttributeNS(wordNamespace, 'w:abstractNumId', abstractId);\n\n const definitions = Array.from(levels)\n .sort(([first], [second]) => first - second)\n .map(([index, level]) => {\n const start = Number(wordValue(level, 'start') ?? 1);\n const restart = Number(wordValue(level, 'lvlRestart') ?? index);\n const isValidLevel = Number.isInteger(index) && index >= 0 && index <= MAX_WORD_LIST_LEVEL;\n if (!isValidLevel || !Number.isSafeInteger(start) || !Number.isInteger(restart) || restart < 0 || restart > index) {\n throw new Error(`Invalid Word numbering properties for numId ${ id }, level ${ index }.`);\n }\n level.setAttributeNS(wordNamespace, 'w:ilvl', String(index));\n abstract.append(level);\n const counter = `docx-num-${ id }-${ index } ${ start - 1 }`;\n initialCounters.push(counter);\n return { index, restart, counter };\n });\n\n numbering.documentElement.append(abstract);\n wordChild(nums.get(id), 'abstractNumId')?.setAttributeNS(wordNamespace, 'w:val', abstractId);\n definitions.forEach(({ index }) => {\n const resets = definitions\n .filter((deeper) => deeper.index > index && deeper.restart > index)\n .map((deeper) => deeper.counter);\n rules.push(`p.docx-num-${ id }-${ index } { counter-set: ${ resets.join(' ') || 'none' }; }`);\n });\n });\n\n if (initialCounters.length) {\n rules.unshift(`.docx-wrapper { counter-reset: ${ initialCounters.join(' ') }; }`);\n }\n return rules.join('\\n');\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,57 @@
1
+ export const wordNamespace = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';
2
+ export const wordChild = (element, name) => Array.from(element?.children ?? []).find(item => item.namespaceURI === wordNamespace && item.localName === name);
3
+ export const wordAttribute = (element, name = 'val') => element?.getAttributeNS(wordNamespace, name) ?? undefined;
4
+ export const wordValue = (element, name) => wordAttribute(wordChild(element, name));
5
+ const isWordFalse = value => ['0', 'false', 'off'].includes(value ?? '');
6
+ export const getWordStyles = styles => {
7
+ const styleElements = Array.from(styles?.getElementsByTagNameNS(wordNamespace, 'style') ?? []);
8
+ const byId = new Map(styleElements.map(style => [wordAttribute(style, 'styleId'), style]));
9
+ const properties = (id, visited = new Set()) => {
10
+ if (!id) {
11
+ return {};
12
+ }
13
+ if (visited.has(id)) {
14
+ throw new Error(`Circular Word style inheritance: ${id}`);
15
+ }
16
+ visited.add(id);
17
+ const style = byId.get(id);
18
+ const inherited = properties(wordValue(style, 'basedOn'), visited);
19
+ const paragraph = wordChild(style, 'pPr');
20
+ const numbering = wordChild(paragraph, 'numPr');
21
+ const bold = wordChild(wordChild(style, 'rPr'), 'b');
22
+ return {
23
+ numId: wordValue(numbering, 'numId') ?? inherited.numId,
24
+ level: wordValue(numbering, 'ilvl') ?? inherited.level,
25
+ outline: wordValue(paragraph, 'outlineLvl') ?? inherited.outline,
26
+ // Word toggles bold relative to the inherited style rather than setting it absolutely.
27
+ bold: bold && !isWordFalse(wordAttribute(bold)) ? !inherited.bold : inherited.bold
28
+ };
29
+ };
30
+ return {
31
+ byId,
32
+ properties
33
+ };
34
+ };
35
+ export const createWordNumberingResolver = (numbering, styles) => {
36
+ const numElements = Array.from(numbering?.getElementsByTagNameNS(wordNamespace, 'num') ?? []);
37
+ const nums = new Map(numElements.map(num => [wordAttribute(num, 'numId'), num]));
38
+ const activeInstances = new Map();
39
+ return paragraphProperties => {
40
+ const inherited = styles.properties(wordValue(paragraphProperties, 'pStyle'));
41
+ const numberingProperties = wordChild(paragraphProperties, 'numPr');
42
+ const explicitId = wordValue(numberingProperties, 'numId');
43
+ const inheritedAbstract = wordValue(nums.get(inherited.numId), 'abstractNumId');
44
+ const restartsInheritedList = explicitId && explicitId !== '0' && inherited.numId && inheritedAbstract && wordValue(nums.get(explicitId), 'abstractNumId') === inheritedAbstract;
45
+ if (restartsInheritedList && inherited.numId) {
46
+ // A restarted instance also governs following items that inherit the base list style.
47
+ activeInstances.set(inherited.numId, explicitId);
48
+ }
49
+ const inheritedId = inherited.numId ? activeInstances.get(inherited.numId) ?? inherited.numId : undefined;
50
+ return {
51
+ id: explicitId ?? inheritedId,
52
+ level: wordValue(numberingProperties, 'ilvl') ?? inherited.level ?? '0',
53
+ inherited
54
+ };
55
+ };
56
+ };
57
+ //# sourceMappingURL=wordXml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wordXml.js","names":["wordNamespace","wordChild","element","name","Array","from","children","find","item","namespaceURI","localName","wordAttribute","getAttributeNS","undefined","wordValue","isWordFalse","value","includes","getWordStyles","styles","styleElements","getElementsByTagNameNS","byId","Map","map","style","properties","id","visited","Set","has","Error","add","get","inherited","paragraph","numbering","bold","numId","level","outline","createWordNumberingResolver","numElements","nums","num","activeInstances","paragraphProperties","numberingProperties","explicitId","inheritedAbstract","restartsInheritedList","set","inheritedId"],"sources":["../../../../../../../src/widgets/shared/documents/engines/wordRenderer/wordXml.ts"],"sourcesContent":["export const wordNamespace = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';\n\nexport const wordChild = (element: Element | undefined, name: string): Element | undefined =>\n Array.from(element?.children ?? []).find((item) => item.namespaceURI === wordNamespace && item.localName === name);\n\nexport const wordAttribute = (element: Element | undefined, name = 'val'): string | undefined =>\n element?.getAttributeNS(wordNamespace, name) ?? undefined;\n\nexport const wordValue = (element: Element | undefined, name: string): string | undefined => wordAttribute(wordChild(element, name));\n\nexport type WordStyleProperties = {\n numId?: string;\n level?: string;\n outline?: string;\n bold?: boolean;\n};\n\nexport type WordStyles = {\n byId: Map<string | undefined, Element>;\n /* eslint-disable-next-line no-unused-vars */\n properties: (id: string | undefined, visited?: Set<string>) => WordStyleProperties;\n};\n\nconst isWordFalse = (value: string | undefined): boolean => ['0', 'false', 'off'].includes(value ?? '');\n\nexport const getWordStyles = (styles: Document | undefined): WordStyles => {\n const styleElements = Array.from(styles?.getElementsByTagNameNS(wordNamespace, 'style') ?? []);\n const byId = new Map(styleElements.map((style) => [wordAttribute(style, 'styleId'), style]));\n\n const properties = (id: string | undefined, visited = new Set<string>()): WordStyleProperties => {\n if (!id) {\n return {};\n }\n if (visited.has(id)) {\n throw new Error(`Circular Word style inheritance: ${ id }`);\n }\n visited.add(id);\n const style = byId.get(id);\n const inherited = properties(wordValue(style, 'basedOn'), visited);\n const paragraph = wordChild(style, 'pPr');\n const numbering = wordChild(paragraph, 'numPr');\n const bold = wordChild(wordChild(style, 'rPr'), 'b');\n return {\n numId: wordValue(numbering, 'numId') ?? inherited.numId,\n level: wordValue(numbering, 'ilvl') ?? inherited.level,\n outline: wordValue(paragraph, 'outlineLvl') ?? inherited.outline,\n // Word toggles bold relative to the inherited style rather than setting it absolutely.\n bold: bold && !isWordFalse(wordAttribute(bold)) ? !inherited.bold : inherited.bold\n };\n };\n\n return { byId, properties };\n};\n\nexport const createWordNumberingResolver = (numbering: Document | undefined, styles: WordStyles) => {\n const numElements = Array.from(numbering?.getElementsByTagNameNS(wordNamespace, 'num') ?? []);\n const nums = new Map(numElements.map((num) => [wordAttribute(num, 'numId'), num]));\n const activeInstances = new Map<string, string>();\n\n return (paragraphProperties: Element | undefined) => {\n const inherited = styles.properties(wordValue(paragraphProperties, 'pStyle'));\n const numberingProperties = wordChild(paragraphProperties, 'numPr');\n const explicitId = wordValue(numberingProperties, 'numId');\n const inheritedAbstract = wordValue(nums.get(inherited.numId), 'abstractNumId');\n const restartsInheritedList = explicitId\n && explicitId !== '0'\n && inherited.numId\n && inheritedAbstract\n && wordValue(nums.get(explicitId), 'abstractNumId') === inheritedAbstract;\n if (restartsInheritedList && inherited.numId) {\n // A restarted instance also governs following items that inherit the base list style.\n activeInstances.set(inherited.numId, explicitId);\n }\n const inheritedId = inherited.numId ? activeInstances.get(inherited.numId) ?? inherited.numId : undefined;\n return {\n id: explicitId ?? inheritedId,\n level: wordValue(numberingProperties, 'ilvl') ?? inherited.level ?? '0',\n inherited\n };\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ export { fetchDocumentAsArrayBuffer, fetchDocumentAsText, getDocumentExtension, getDocumentFileName, getDocumentKind, resolveDocumentResource } from './documentHelpers';
2
+ export { useDocumentContent } from './useDocumentContent';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["fetchDocumentAsArrayBuffer","fetchDocumentAsText","getDocumentExtension","getDocumentFileName","getDocumentKind","resolveDocumentResource","useDocumentContent"],"sources":["../../../../../src/widgets/shared/documents/index.ts"],"sourcesContent":["export {\n fetchDocumentAsArrayBuffer,\n fetchDocumentAsText,\n getDocumentExtension,\n getDocumentFileName,\n getDocumentKind,\n resolveDocumentResource\n} from './documentHelpers';\nexport { useDocumentContent } from './useDocumentContent';\n\nexport type { DocumentContentState } from './useDocumentContent';\nexport type {\n DocumentKind,\n DocumentLoadStatus,\n DocumentSource,\n LoadedDocument,\n ResolveResourceUrl\n} from './documents.interfaces';\n"],"mappings":"AAAA,SACEA,0BAA0B,EAC1BC,mBAAmB,EACnBC,oBAAoB,EACpBC,mBAAmB,EACnBC,eAAe,EACfC,uBAAuB,QAClB,mBAAmB;AAC1B,SAASC,kBAAkB,QAAQ,sBAAsB","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ .documentToggleGroup {
2
+ display: inline-flex;
3
+ flex-wrap: wrap;
4
+ gap: 5px;
5
+ margin: 0;
6
+ padding: 0;
7
+ border: 0;
8
+ }
@@ -0,0 +1,215 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { getFileExtension, readFileAsArrayBuffer, readFileAsText } from '../../../helpers/fileHelpers';
3
+ import { fetchDocumentAsArrayBuffer, fetchDocumentAsText, hasPdfSignature, isJsonDocument, isSafeNativeDocumentUrl, isTrustedPdfOrigin } from './documentHelpers';
4
+ const formatText = (document, text) => isJsonDocument(document) ? JSON.stringify(JSON.parse(text), null, 2) : text;
5
+
6
+ // Re-wraps the bytes as a PDF, so the browser can only hand them to its PDF viewer: an HTML page
7
+ // disguised as a PDF would otherwise render, and run script, in the host's origin.
8
+ const createPdfObjectUrl = bytes => {
9
+ if (!hasPdfSignature(bytes)) {
10
+ throw new Error('This file is not a valid PDF.');
11
+ }
12
+ return URL.createObjectURL(new Blob([bytes], {
13
+ type: 'application/pdf'
14
+ }));
15
+ };
16
+ /*
17
+ Every PDF is fetched, checked and re-wrapped before display, including cross-origin ones: the
18
+ fetch follows redirects, so a ".pdf" URL that redirects to an HTML page on the host's origin is
19
+ caught by the signature check instead of running unsandboxed in the frame. Only an origin the
20
+ host explicitly trusts may be framed directly when its server refuses the cross-origin fetch.
21
+ */
22
+ const loadPdf = async (document, signal, options) => {
23
+ if (document.file) {
24
+ return {
25
+ kind: 'pdf',
26
+ url: createPdfObjectUrl(await readFileAsArrayBuffer(document.file)),
27
+ ownsUrl: true
28
+ };
29
+ }
30
+ if (!document.url) {
31
+ throw new Error('No document file or URL was supplied.');
32
+ }
33
+ if (!isSafeNativeDocumentUrl(document.url, 'pdf')) {
34
+ throw new Error('This document URL cannot be displayed.');
35
+ }
36
+ let bytes;
37
+ try {
38
+ bytes = await fetchDocumentAsArrayBuffer(document.url, signal);
39
+ } catch (error) {
40
+ if (!signal.aborted && isTrustedPdfOrigin(document.url, options.trustedPdfOrigins)) {
41
+ return {
42
+ kind: 'pdf',
43
+ url: document.url
44
+ };
45
+ }
46
+ throw error;
47
+ }
48
+ return {
49
+ kind: 'pdf',
50
+ url: createPdfObjectUrl(bytes),
51
+ ownsUrl: true
52
+ };
53
+ };
54
+ const RASTER_IMAGE_TYPES = {
55
+ png: 'image/png',
56
+ jpg: 'image/jpeg',
57
+ jpeg: 'image/jpeg',
58
+ gif: 'image/gif',
59
+ webp: 'image/webp',
60
+ avif: 'image/avif',
61
+ bmp: 'image/bmp'
62
+ };
63
+ const SVG_TYPE = 'image/svg+xml';
64
+
65
+ /*
66
+ <img> never runs script, but a blob URL keeps the host's origin wherever it is opened, so a local
67
+ SVG or HTML file opened from it in a new tab would run script as the host. Raster images are
68
+ re-wrapped with a raster type, and SVGs become data URLs, which open in an opaque origin.
69
+ */
70
+ const loadImageFile = async file => {
71
+ const extension = getFileExtension(file.name);
72
+ if (file.type === SVG_TYPE || extension === 'svg') {
73
+ return {
74
+ kind: 'image',
75
+ url: `data:${SVG_TYPE};charset=utf-8,${encodeURIComponent(await readFileAsText(file))}`
76
+ };
77
+ }
78
+ const rasterType = Object.values(RASTER_IMAGE_TYPES).includes(file.type) ? file.type : RASTER_IMAGE_TYPES[extension];
79
+ if (!rasterType) {
80
+ throw new Error('This image type cannot be displayed.');
81
+ }
82
+ return {
83
+ kind: 'image',
84
+ url: URL.createObjectURL(new Blob([file], {
85
+ type: rasterType
86
+ })),
87
+ ownsUrl: true
88
+ };
89
+ };
90
+ const loadDocument = async (document, kind, signal, options) => {
91
+ if (kind === 'pdf') {
92
+ return loadPdf(document, signal, options);
93
+ }
94
+ if (kind === 'image') {
95
+ if (document.file) {
96
+ return loadImageFile(document.file);
97
+ }
98
+ if (!document.url) {
99
+ throw new Error('No document file or URL was supplied.');
100
+ }
101
+ if (!isSafeNativeDocumentUrl(document.url, kind)) {
102
+ throw new Error('This document URL cannot be displayed.');
103
+ }
104
+ return {
105
+ kind,
106
+ url: document.url
107
+ };
108
+ }
109
+ if (kind === 'markdown' || kind === 'text') {
110
+ if (document.text !== undefined) {
111
+ return {
112
+ kind,
113
+ content: formatText(document, document.text)
114
+ };
115
+ }
116
+ if (document.file) {
117
+ return {
118
+ kind,
119
+ content: formatText(document, await readFileAsText(document.file))
120
+ };
121
+ }
122
+ if (document.url) {
123
+ return {
124
+ kind,
125
+ content: formatText(document, await fetchDocumentAsText(document.url, signal))
126
+ };
127
+ }
128
+ throw new Error('No document text, file or URL was supplied.');
129
+ }
130
+ if (kind === 'word') {
131
+ if (document.file) {
132
+ return {
133
+ kind,
134
+ arrayBuffer: await readFileAsArrayBuffer(document.file)
135
+ };
136
+ }
137
+ if (document.url) {
138
+ return {
139
+ kind,
140
+ arrayBuffer: await fetchDocumentAsArrayBuffer(document.url, signal)
141
+ };
142
+ }
143
+ throw new Error('No document file or URL was supplied.');
144
+ }
145
+ return {
146
+ kind
147
+ };
148
+ };
149
+
150
+ // Loads a document for rendering, ignoring stale responses when the source changes and
151
+ // revoking any object URL it created once the document is no longer shown.
152
+ export const useDocumentContent = (document, kind, options = {}) => {
153
+ const [state, setState] = useState({
154
+ status: 'idle'
155
+ });
156
+ const {
157
+ file,
158
+ url,
159
+ text,
160
+ fileName,
161
+ fileType
162
+ } = document;
163
+ // Joined so an inline array literal does not trigger a reload on every render.
164
+ const trustedPdfOrigins = options.trustedPdfOrigins?.join(' ') ?? '';
165
+
166
+ // Keyed on the source fields rather than the object, so callers passing an inline object
167
+ // literal do not trigger a reload on every render.
168
+ useEffect(() => {
169
+ const controller = new AbortController();
170
+ let objectUrl;
171
+ setState({
172
+ status: 'loading'
173
+ });
174
+ const loadOptions = {
175
+ trustedPdfOrigins: trustedPdfOrigins ? trustedPdfOrigins.split(' ') : []
176
+ };
177
+ loadDocument({
178
+ title: '',
179
+ file,
180
+ url,
181
+ text,
182
+ fileName,
183
+ fileType
184
+ }, kind, controller.signal, loadOptions).then(loaded => {
185
+ const createdUrl = loaded.ownsUrl ? loaded.url : undefined;
186
+ if (controller.signal.aborted) {
187
+ // Cleanup has already run for this source, so release the URL here instead.
188
+ if (createdUrl) {
189
+ URL.revokeObjectURL(createdUrl);
190
+ }
191
+ return;
192
+ }
193
+ objectUrl = createdUrl;
194
+ setState({
195
+ status: 'ready',
196
+ loaded
197
+ });
198
+ }).catch(error => {
199
+ if (!controller.signal.aborted) {
200
+ setState({
201
+ status: 'error',
202
+ error
203
+ });
204
+ }
205
+ });
206
+ return () => {
207
+ controller.abort();
208
+ if (objectUrl) {
209
+ URL.revokeObjectURL(objectUrl);
210
+ }
211
+ };
212
+ }, [file, url, text, fileName, fileType, kind, trustedPdfOrigins]);
213
+ return state;
214
+ };
215
+ //# sourceMappingURL=useDocumentContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDocumentContent.js","names":["useEffect","useState","getFileExtension","readFileAsArrayBuffer","readFileAsText","fetchDocumentAsArrayBuffer","fetchDocumentAsText","hasPdfSignature","isJsonDocument","isSafeNativeDocumentUrl","isTrustedPdfOrigin","formatText","document","text","JSON","stringify","parse","createPdfObjectUrl","bytes","Error","URL","createObjectURL","Blob","type","loadPdf","signal","options","file","kind","url","ownsUrl","error","aborted","trustedPdfOrigins","RASTER_IMAGE_TYPES","png","jpg","jpeg","gif","webp","avif","bmp","SVG_TYPE","loadImageFile","extension","name","encodeURIComponent","rasterType","Object","values","includes","loadDocument","undefined","content","arrayBuffer","useDocumentContent","state","setState","status","fileName","fileType","join","controller","AbortController","objectUrl","loadOptions","split","title","then","loaded","createdUrl","revokeObjectURL","catch","abort"],"sources":["../../../../../src/widgets/shared/documents/useDocumentContent.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { getFileExtension, readFileAsArrayBuffer, readFileAsText } from '../../../helpers/fileHelpers';\nimport {\n fetchDocumentAsArrayBuffer,\n fetchDocumentAsText,\n hasPdfSignature,\n isJsonDocument,\n isSafeNativeDocumentUrl,\n isTrustedPdfOrigin\n} from './documentHelpers';\nimport { DocumentKind, DocumentLoadStatus, DocumentSource, LoadedDocument } from './documents.interfaces';\n\nexport type DocumentContentState = {\n status: DocumentLoadStatus;\n loaded?: LoadedDocument;\n error?: unknown;\n};\n\nconst formatText = (document: DocumentSource, text: string): string =>\n isJsonDocument(document) ? JSON.stringify(JSON.parse(text), null, 2) : text;\n\n// Re-wraps the bytes as a PDF, so the browser can only hand them to its PDF viewer: an HTML page\n// disguised as a PDF would otherwise render, and run script, in the host's origin.\nconst createPdfObjectUrl = (bytes: ArrayBuffer): string => {\n if (!hasPdfSignature(bytes)) {\n throw new Error('This file is not a valid PDF.');\n }\n return URL.createObjectURL(new Blob([bytes], { type: 'application/pdf' }));\n};\n\nexport type DocumentContentOptions = {\n // Origins whose PDFs may be framed directly when their server does not allow cross-origin fetches.\n trustedPdfOrigins?: string[];\n};\n\n/*\n Every PDF is fetched, checked and re-wrapped before display, including cross-origin ones: the\n fetch follows redirects, so a \".pdf\" URL that redirects to an HTML page on the host's origin is\n caught by the signature check instead of running unsandboxed in the frame. Only an origin the\n host explicitly trusts may be framed directly when its server refuses the cross-origin fetch.\n */\nconst loadPdf = async (document: DocumentSource, signal: AbortSignal, options: DocumentContentOptions): Promise<LoadedDocument> => {\n if (document.file) {\n return { kind: 'pdf', url: createPdfObjectUrl(await readFileAsArrayBuffer(document.file)), ownsUrl: true };\n }\n if (!document.url) {\n throw new Error('No document file or URL was supplied.');\n }\n if (!isSafeNativeDocumentUrl(document.url, 'pdf')) {\n throw new Error('This document URL cannot be displayed.');\n }\n let bytes: ArrayBuffer;\n try {\n bytes = await fetchDocumentAsArrayBuffer(document.url, signal);\n } catch (error) {\n if (!signal.aborted && isTrustedPdfOrigin(document.url, options.trustedPdfOrigins)) {\n return { kind: 'pdf', url: document.url };\n }\n throw error;\n }\n return { kind: 'pdf', url: createPdfObjectUrl(bytes), ownsUrl: true };\n};\n\nconst RASTER_IMAGE_TYPES: Record<string, string> = {\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n webp: 'image/webp',\n avif: 'image/avif',\n bmp: 'image/bmp'\n};\nconst SVG_TYPE = 'image/svg+xml';\n\n/*\n <img> never runs script, but a blob URL keeps the host's origin wherever it is opened, so a local\n SVG or HTML file opened from it in a new tab would run script as the host. Raster images are\n re-wrapped with a raster type, and SVGs become data URLs, which open in an opaque origin.\n */\nconst loadImageFile = async (file: File): Promise<LoadedDocument> => {\n const extension = getFileExtension(file.name);\n if (file.type === SVG_TYPE || extension === 'svg') {\n return { kind: 'image', url: `data:${ SVG_TYPE };charset=utf-8,${ encodeURIComponent(await readFileAsText(file)) }` };\n }\n const rasterType = Object.values(RASTER_IMAGE_TYPES).includes(file.type) ? file.type : RASTER_IMAGE_TYPES[extension];\n if (!rasterType) {\n throw new Error('This image type cannot be displayed.');\n }\n return { kind: 'image', url: URL.createObjectURL(new Blob([file], { type: rasterType })), ownsUrl: true };\n};\n\nconst loadDocument = async (\n document: DocumentSource,\n kind: DocumentKind,\n signal: AbortSignal,\n options: DocumentContentOptions\n): Promise<LoadedDocument> => {\n if (kind === 'pdf') {\n return loadPdf(document, signal, options);\n }\n\n if (kind === 'image') {\n if (document.file) {\n return loadImageFile(document.file);\n }\n if (!document.url) {\n throw new Error('No document file or URL was supplied.');\n }\n if (!isSafeNativeDocumentUrl(document.url, kind)) {\n throw new Error('This document URL cannot be displayed.');\n }\n return { kind, url: document.url };\n }\n\n if (kind === 'markdown' || kind === 'text') {\n if (document.text !== undefined) {\n return { kind, content: formatText(document, document.text) };\n }\n if (document.file) {\n return { kind, content: formatText(document, await readFileAsText(document.file)) };\n }\n if (document.url) {\n return { kind, content: formatText(document, await fetchDocumentAsText(document.url, signal)) };\n }\n throw new Error('No document text, file or URL was supplied.');\n }\n\n if (kind === 'word') {\n if (document.file) {\n return { kind, arrayBuffer: await readFileAsArrayBuffer(document.file) };\n }\n if (document.url) {\n return { kind, arrayBuffer: await fetchDocumentAsArrayBuffer(document.url, signal) };\n }\n throw new Error('No document file or URL was supplied.');\n }\n\n return { kind };\n};\n\n// Loads a document for rendering, ignoring stale responses when the source changes and\n// revoking any object URL it created once the document is no longer shown.\nexport const useDocumentContent = (\n document: DocumentSource,\n kind: DocumentKind,\n options: DocumentContentOptions = {}\n): DocumentContentState => {\n const [state, setState] = useState<DocumentContentState>({ status: 'idle' });\n const { file, url, text, fileName, fileType } = document;\n // Joined so an inline array literal does not trigger a reload on every render.\n const trustedPdfOrigins = options.trustedPdfOrigins?.join(' ') ?? '';\n\n // Keyed on the source fields rather than the object, so callers passing an inline object\n // literal do not trigger a reload on every render.\n useEffect(() => {\n const controller = new AbortController();\n let objectUrl: string | undefined;\n\n setState({ status: 'loading' });\n const loadOptions = { trustedPdfOrigins: trustedPdfOrigins ? trustedPdfOrigins.split(' ') : [] };\n loadDocument({ title: '', file, url, text, fileName, fileType }, kind, controller.signal, loadOptions)\n .then((loaded) => {\n const createdUrl = loaded.ownsUrl ? loaded.url : undefined;\n if (controller.signal.aborted) {\n // Cleanup has already run for this source, so release the URL here instead.\n if (createdUrl) {\n URL.revokeObjectURL(createdUrl);\n }\n return;\n }\n objectUrl = createdUrl;\n setState({ status: 'ready', loaded });\n })\n .catch((error: unknown) => {\n if (!controller.signal.aborted) {\n setState({ status: 'error', error });\n }\n });\n\n return () => {\n controller.abort();\n if (objectUrl) {\n URL.revokeObjectURL(objectUrl);\n }\n };\n }, [file, url, text, fileName, fileType, kind, trustedPdfOrigins]);\n\n return state;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"dateHelpers.d.ts","sourceRoot":"","sources":["../../src/helpers/dateHelpers.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,SAAU,IAAI,GAAG,MAAM,KAAG,MAAM,GAAG,IASnE,CAAC;AAGF,eAAO,MAAM,WAAW,eAAgB,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,YAAY,MAAM,KAAG,OAa9F,CAAC;AAGF,eAAO,MAAM,uBAAuB,SAAU,IAAI,GAAG,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,IAYzG,CAAC;AAGF,eAAO,MAAM,wBAAwB,SAAU,IAAI,GAAG,MAAM,GAAG,MAAM,KAAG,MAAM,GAAG,IAShF,CAAC;AAEF,eAAO,MAAM,4BAA4B,cAAe,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAM5H,CAAC;AAEF,eAAO,MAAM,kBAAkB,SAAU,IAAI,GAAG,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,IAcpG,CAAC;AAEF,eAAO,MAAM,2BAA2B,SAAU,IAAI,GAAG,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,IAI7G,CAAC;AAEF,eAAO,MAAM,kBAAkB,SAAU,IAAI,SAAyD,CAAC;AAEvG,eAAO,MAAM,SAAS,SAAU,IAAI,WAOnC,CAAC;;iCA7FyC,IAAI,GAAG,MAAM,KAAG,MAAM,GAAG,IAAI;8BAYhC,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,YAAY,MAAM,KAAG,OAAO;oCAgBxD,IAAI,GAAG,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,IAAI;qCAe/D,IAAI,GAAG,MAAM,GAAG,MAAM,KAAG,MAAM,GAAG,IAAI;8CAW7B,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;+BAQ7F,IAAI,GAAG,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,IAAI;wCAgBvD,IAAI,GAAG,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,IAAI;+BAMzE,IAAI;sBAEb,IAAI;;AASpC,wBAUE"}
1
+ {"version":3,"file":"dateHelpers.d.ts","sourceRoot":"","sources":["../../src/helpers/dateHelpers.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,oBAAoB,SAAU,IAAI,GAAG,MAAM,KAAG,MAAM,GAAG,IAQnE,CAAC;AAGF,eAAO,MAAM,WAAW,eAAgB,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,YAAY,MAAM,KAAG,OAe9F,CAAC;AAGF,eAAO,MAAM,uBAAuB,SAAU,IAAI,GAAG,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,IAWzG,CAAC;AAGF,eAAO,MAAM,wBAAwB,SAAU,IAAI,GAAG,MAAM,GAAG,MAAM,KAAG,MAAM,GAAG,IAQhF,CAAC;AAEF,eAAO,MAAM,4BAA4B,cAAe,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAM5H,CAAC;AAEF,eAAO,MAAM,kBAAkB,SAAU,IAAI,GAAG,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,IAapG,CAAC;AAEF,eAAO,MAAM,2BAA2B,SAAU,IAAI,GAAG,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,IAI7G,CAAC;AAEF,eAAO,MAAM,kBAAkB,SAAU,IAAI,SAAyD,CAAC;AAEvG,eAAO,MAAM,SAAS,SAAU,IAAI,WAOnC,CAAC;;iCA3FyC,IAAI,GAAG,MAAM,KAAG,MAAM,GAAG,IAAI;8BAWhC,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,YAAY,MAAM,KAAG,OAAO;oCAkBxD,IAAI,GAAG,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,IAAI;qCAc/D,IAAI,GAAG,MAAM,GAAG,MAAM,KAAG,MAAM,GAAG,IAAI;8CAU7B,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;+BAQ7F,IAAI,GAAG,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,IAAI;wCAevD,IAAI,GAAG,MAAM,GAAG,MAAM,WAAU,MAAM,KAAa,MAAM,GAAG,IAAI;+BAMzE,IAAI;sBAEb,IAAI;;AASpC,wBAUE"}
@@ -0,0 +1,5 @@
1
+ export declare const getFileExtension: (fileName: string) => string;
2
+ export declare const getUrlExtension: (url: string) => string;
3
+ export declare const readFileAsText: (file: Blob) => Promise<string>;
4
+ export declare const readFileAsArrayBuffer: (file: Blob) => Promise<ArrayBuffer>;
5
+ //# sourceMappingURL=fileHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileHelpers.d.ts","sourceRoot":"","sources":["../../src/helpers/fileHelpers.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB,aAAc,MAAM,KAAG,MAInD,CAAC;AASF,eAAO,MAAM,eAAe,QAAS,MAAM,KAAG,MAa7C,CAAC;AAcF,eAAO,MAAM,cAAc,SAAU,IAAI,KAAG,OAAO,CAAC,MAAM,CAAiC,CAAC;AAE5F,eAAO,MAAM,qBAAqB,SAAU,IAAI,KAAG,OAAO,CAAC,WAAW,CAAuC,CAAC"}
@@ -4,6 +4,9 @@ export { transformPlacesData, extractNamePieces } from './dataHelpers';
4
4
  export type { NamePieces } from './dataHelpers';
5
5
  export { dateToShortIsoString, isValidDate, dateToShortReadableDate, dateToShortReadableMonth, timeStampToShortReadableDate, dateToReadableTime, dateToShortReadableDateTime, getLastDateOfMonth, daysSince } from './dateHelpers';
6
6
  export { USER_CURRENCY, intlCurrencyFormatter, intlNumberFormatter, formatNumberForLocale, formatAsCurrencyForLocale, getNumberAbbreviation, formatRoundedNumberWithAbbreviation, formatNumberWithAbbreviation, formatNumberForChartAxis, formatAsSimpleCurrencyForChartAxis, formatAsInternationalCurrencyForChartAxis, formatAsCurrencyWithAbbreviation, formatFileSize } from './formatters';
7
+ export { getFileExtension, getUrlExtension, readFileAsText, readFileAsArrayBuffer } from './fileHelpers';
8
+ export { prefersReducedMotion, getPreferredScrollBehavior, getScrollSettings } from './interactionsHelper';
9
+ export type { ScrollSettings } from './interactionsHelper';
7
10
  export { getRandomNumberBelow, getRandomBetweenInclusive, getRandomBetweenExclusive, hashCode, roundToDecimal, formatNumberToMinDigits, formatDigitalTime } from './numberHelpers';
8
11
  export { richTextParser, capitalize, capitalizeFirstLetter, lowerCaseFirstLetter, getCharacterCount, clampToGraphemeMax, useAnInsteadOfA, splitCamelCase, pluralize, pluralizeIfNeeded, getInitialsOrAcronym } from './stringHelpers';
9
12
  export { objectsAreTheSame, isAnObject, createCompareValueOverride, isReactElement, isNonElementObject, isPlainObject, deepMergeObjects, overrideMergeObjects, makeInheritanceObject, updateNestedProperty, filterObject, getArrayOfObjectKeys, getArrayOfReadableObjectKeys, getBranchFromPath, deepRemoveProps } from './objectHelpers';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,2BAA2B,EAC3B,kBAAkB,EAClB,SAAS,EACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,mCAAmC,EACnC,4BAA4B,EAC5B,wBAAwB,EACxB,kCAAkC,EAClC,yCAAyC,EACzC,gCAAgC,EAChC,cAAc,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,EACzB,QAAQ,EACR,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,cAAc,EACd,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,0BAA0B,EAC1B,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,4BAA4B,EAC5B,iBAAiB,EACjB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACZ,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,2BAA2B,EAC3B,kBAAkB,EAClB,SAAS,EACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,mCAAmC,EACnC,4BAA4B,EAC5B,wBAAwB,EACxB,kCAAkC,EAClC,yCAAyC,EACzC,gCAAgC,EAChC,cAAc,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,qBAAqB,EACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,EACzB,QAAQ,EACR,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,cAAc,EACd,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,0BAA0B,EAC1B,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,4BAA4B,EAC5B,iBAAiB,EACjB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACZ,MAAM,eAAe,CAAC"}
@@ -1,3 +1,5 @@
1
+ export declare const prefersReducedMotion: () => boolean;
2
+ export declare const getPreferredScrollBehavior: () => ScrollBehavior;
1
3
  export interface ScrollSettings {
2
4
  scrollHeight: number;
3
5
  clientHeight: number;
@@ -1 +1 @@
1
- {"version":3,"file":"interactionsHelper.d.ts","sourceRoot":"","sources":["../../src/helpers/interactionsHelper.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;CACd;AAED,eAAO,MAAM,iBAAiB,UAAW,KAAK,KAAG,cAmChD,CAAC"}
1
+ {"version":3,"file":"interactionsHelper.d.ts","sourceRoot":"","sources":["../../src/helpers/interactionsHelper.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,oBAAoB,QAAO,OACmE,CAAC;AAG5G,eAAO,MAAM,0BAA0B,QAAO,cAA8D,CAAC;AAE7G,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;CACd;AAED,eAAO,MAAM,iBAAiB,UAAW,KAAK,KAAG,cAmChD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"objectHelpers.d.ts","sourceRoot":"","sources":["../../src/helpers/objectHelpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"objectHelpers.d.ts","sourceRoot":"","sources":["../../src/helpers/objectHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAa,MAAM,iCAAiC,CAAC;AAGxE,eAAO,MAAM,iBAAiB,SAAU,MAAM,QAAQ,MAAM,KAAG,OAU9D,CAAC;AAEF,eAAO,MAAM,UAAU,UAAW,OAAO,KAAG,OAA+G,CAAC;AAE5J,eAAO,MAAM,0BAA0B,QAAS,MAAM,gBAAgB,GAAG,KAAG,MAAsD,CAAC;AAEnI,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACrC;AAED,eAAO,MAAM,cAAc,QAAS,OAAO,KAAG,GAAG,IAAI,KAAK,CAAC,YACvB,CAAC;AAGrC,eAAO,MAAM,kBAAkB,UAAW,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAKlF,CAAC;AAEF,eAAO,MAAM,aAAa,QAAS,OAAO,KAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAOzE,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EACjE,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,oBAAoB,GACnD,CAAC,GAAG,CAAC,CAgCP;AAED,eAAO,MAAM,oBAAoB,mCAAoC,oBAAoB,KAAG,MAoB3F,CAAC;AAEF,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAI,GAAG,CAAA;KAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,qBAAqB,8EAQ7B,yBAAyB,KAC3B,MA4CF,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,GAAG,CAAC;CACf;AAUD,eAAO,MAAM,oBAAoB,2CAA4C,wBAAwB,KAAG,MAwBvG,CAAC;AAEF,eAAO,MAAM,YAAY,eAAgB,UAAU,UAAU;IAC3D,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACvE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,KAAG,UAAU,GAAG,KA0DhB,CAAC;AAEF,eAAO,MAAM,oBAAoB,eAAgB,UAAU,aAa1D,CAAC;AAEF,eAAO,MAAM,4BAA4B,eAAgB,UAAU,aAGlE,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAS,GAAG,QAAQ,MAAM,EAAE,KAAG,GAAqE,CAAC;AAEnI,eAAO,MAAM,eAAe,QAAS,GAAG,iBAAiB,MAAM,EAAE,KAAG,GAanE,CAAC;;8BA7SsC,MAAM,QAAQ,MAAM,KAAG,OAAO;wBAYpC,OAAO,KAAG,OAAO;sCAEH,MAAM,gBAAgB,GAAG,KAAG,MAAM;0BAO9C,OAAO,KAAG,GAAG,IAAI,KAAK,CAAC,YAAY;gCAI7B,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;yBAOjD,OAAO,KAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;2DA6CN,oBAAoB,KAAG,MAAM;uGAuC7F,yBAAyB,KAC3B,MAAM;mEA4DoE,wBAAwB,KAAG,MAAM;+BA0BrE,UAAU,UAAU;QAC3D,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC;QACvE,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,KAAG,UAAU,GAAG,KAAK;uCA4D2B,UAAU;+CAeF,UAAU;6BAK5B,GAAG,QAAQ,MAAM,EAAE,KAAG,GAAG;2BAE3B,GAAG,iBAAiB,MAAM,EAAE,KAAG,GAAG;;AAevE,wBAgBE"}
@@ -1 +1 @@
1
- {"version":3,"file":"stringHelpers.d.ts","sourceRoot":"","sources":["../../src/helpers/stringHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,cAAc,aAAc,MAAM,4BAA4B,OAAO,KAAG,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,EAOlI,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,YAAa,MAAM,KAAG,MAA6F,CAAC;AAE3I;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,YAAa,MAAM,KAAG,MAA+E,CAAC;AAExI;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,YAAa,MAAM,KAAG,MAA+E,CAAC;AAmBvI;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,YAAa,MAAM,KAAG,MAA6C,CAAC;AAElG;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,YAAa,MAAM,cAAc,MAAM,KAAG,MAQxE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,OAI9C,CAAC;AAEF,eAAO,MAAM,cAAc,YAAa,MAAM,KAAG,MAMjC,CAAC;AAEjB,eAAO,MAAM,SAAS,YAAa,MAAM,KAAG,MAU3C,CAAC;AAEF,eAAO,MAAM,iBAAiB,YAAa,MAAM,SAAS,MAAM,KAAG,MAKlE,CAAC;AAEF,eAAO,MAAM,oBAAoB,YAAa,MAAM,KAAG,MAEtD,CAAC"}
1
+ {"version":3,"file":"stringHelpers.d.ts","sourceRoot":"","sources":["../../src/helpers/stringHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AA0E1B,eAAO,MAAM,cAAc,aAAc,MAAM,4BAA4B,OAAO,KAAG,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,EAIlI,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,YAAa,MAAM,KAAG,MAA6F,CAAC;AAE3I;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,YAAa,MAAM,KAAG,MAA+E,CAAC;AAExI;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,YAAa,MAAM,KAAG,MAA+E,CAAC;AAmBvI;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,YAAa,MAAM,KAAG,MAA6C,CAAC;AAElG;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,YAAa,MAAM,cAAc,MAAM,KAAG,MAQxE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,OAI9C,CAAC;AAEF,eAAO,MAAM,cAAc,YAAa,MAAM,KAAG,MAMjC,CAAC;AAEjB,eAAO,MAAM,SAAS,YAAa,MAAM,KAAG,MAU3C,CAAC;AAEF,eAAO,MAAM,iBAAiB,YAAa,MAAM,SAAS,MAAM,KAAG,MAKlE,CAAC;AAEF,eAAO,MAAM,oBAAoB,YAAa,MAAM,KAAG,MAEtD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const getSafeLinkHref: (href: string) => string | undefined;
2
+ export declare const toCssImageUrl: (url: string | undefined) => string | undefined;
3
+ //# sourceMappingURL=urlHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urlHelpers.d.ts","sourceRoot":"","sources":["../../src/helpers/urlHelpers.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,MAAM,GAAG,SAWvD,CAAC;AAWF,eAAO,MAAM,aAAa,QAAS,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAgBhE,CAAC"}