@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.
- package/THIRD_PARTY_LICENSES.md +11182 -0
- package/dist/cjs/autoGenerated/libraryThemes.js +12 -12
- package/dist/cjs/autoGenerated/libraryThemes.js.map +1 -1
- package/dist/cjs/autoGenerated/libraryThemes.json +12 -12
- package/dist/cjs/components/design/banners/pageBanner/PageBanner.js +27 -12
- package/dist/cjs/components/design/banners/pageBanner/PageBanner.js.map +1 -1
- package/dist/cjs/components/design/card/cardHeader/CardHeaderItem.js +22 -15
- package/dist/cjs/components/design/card/cardHeader/CardHeaderItem.js.map +1 -1
- package/dist/cjs/components/design/dialog/dialog.css +4 -0
- package/dist/cjs/components/design/logos/LogoLink.js +2 -1
- package/dist/cjs/components/design/logos/LogoLink.js.map +1 -1
- package/dist/cjs/components/design/logos/VentureLogo.js +2 -1
- package/dist/cjs/components/design/logos/VentureLogo.js.map +1 -1
- package/dist/cjs/components/design/revealMore/RevealMoreBelow.js +2 -2
- package/dist/cjs/components/design/revealMore/RevealMoreBelow.js.map +1 -1
- package/dist/cjs/components/design/skeleton/Skeleton.js +15 -5
- package/dist/cjs/components/design/skeleton/Skeleton.js.map +1 -1
- package/dist/cjs/components/design/themeLoader/ThemeLoader.js +1 -1
- package/dist/cjs/components/design/themeLoader/ThemeLoader.js.map +1 -1
- package/dist/cjs/components/form/buttons/SimpleButton.js +3 -1
- package/dist/cjs/components/form/buttons/SimpleButton.js.map +1 -1
- package/dist/cjs/components/form/buttons/button.interface.js.map +1 -1
- package/dist/cjs/components/form/buttons/userPicButton/UserPicButton.js +5 -3
- package/dist/cjs/components/form/buttons/userPicButton/UserPicButton.js.map +1 -1
- package/dist/cjs/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.js +64 -19
- package/dist/cjs/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.js.map +1 -1
- package/dist/cjs/components/navigation/link/Link.js +2 -1
- package/dist/cjs/components/navigation/link/Link.js.map +1 -1
- package/dist/cjs/components/testing/devToolbar/DevToolbar.js +5 -3
- package/dist/cjs/components/testing/devToolbar/DevToolbar.js.map +1 -1
- package/dist/cjs/constants/fileUploadTypes.js +9 -4
- package/dist/cjs/constants/fileUploadTypes.js.map +1 -1
- package/dist/cjs/helpers/dateHelpers.js +34 -23
- package/dist/cjs/helpers/dateHelpers.js.map +1 -1
- package/dist/cjs/helpers/fileHelpers.js +58 -0
- package/dist/cjs/helpers/fileHelpers.js.map +1 -0
- package/dist/cjs/helpers/index.js +44 -0
- package/dist/cjs/helpers/index.js.map +1 -1
- package/dist/cjs/helpers/interactionsHelper.js +8 -1
- package/dist/cjs/helpers/interactionsHelper.js.map +1 -1
- package/dist/cjs/helpers/objectHelpers.js +23 -9
- package/dist/cjs/helpers/objectHelpers.js.map +1 -1
- package/dist/cjs/helpers/stringHelpers.js +61 -5
- package/dist/cjs/helpers/stringHelpers.js.map +1 -1
- package/dist/cjs/helpers/urlHelpers.js +48 -0
- package/dist/cjs/helpers/urlHelpers.js.map +1 -0
- package/dist/cjs/index.js +191 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/package.json +3 -305
- package/dist/cjs/styles/index.css +18 -0
- package/dist/cjs/styles/variables/cssVars/_designVariables.css +18 -0
- package/dist/cjs/widgets/documentComments/DocumentComments.js +305 -0
- package/dist/cjs/widgets/documentComments/DocumentComments.js.map +1 -0
- package/dist/cjs/widgets/documentComments/_documentCommentsVariables.css +0 -0
- package/dist/cjs/widgets/documentComments/documentComments.css +107 -0
- package/dist/cjs/widgets/documentComments/documentComments.interfaces.js +6 -0
- package/dist/cjs/widgets/documentComments/documentComments.interfaces.js.map +1 -0
- package/dist/cjs/widgets/documentComments/index.js +19 -0
- package/dist/cjs/widgets/documentComments/index.js.map +1 -0
- package/dist/cjs/widgets/documentComparer/DocumentComparer.js +309 -0
- package/dist/cjs/widgets/documentComparer/DocumentComparer.js.map +1 -0
- package/dist/cjs/widgets/documentComparer/_documentComparerVariables.css +0 -0
- package/dist/cjs/widgets/documentComparer/documentComparer.css +117 -0
- package/dist/cjs/widgets/documentComparer/documentComparer.interfaces.js +6 -0
- package/dist/cjs/widgets/documentComparer/documentComparer.interfaces.js.map +1 -0
- package/dist/cjs/widgets/documentComparer/index.js +19 -0
- package/dist/cjs/widgets/documentComparer/index.js.map +1 -0
- package/dist/cjs/widgets/documentEditor/DocumentEditor.js +142 -0
- package/dist/cjs/widgets/documentEditor/DocumentEditor.js.map +1 -0
- package/dist/cjs/widgets/documentEditor/_documentEditorVariables.css +0 -0
- package/dist/cjs/widgets/documentEditor/documentEditor.css +33 -0
- package/dist/cjs/widgets/documentEditor/documentEditor.interfaces.js +6 -0
- package/dist/cjs/widgets/documentEditor/documentEditor.interfaces.js.map +1 -0
- package/dist/cjs/widgets/documentEditor/index.js +19 -0
- package/dist/cjs/widgets/documentEditor/index.js.map +1 -0
- package/dist/cjs/widgets/documentViewer/DocumentViewer.js +206 -0
- package/dist/cjs/widgets/documentViewer/DocumentViewer.js.map +1 -0
- package/dist/cjs/widgets/documentViewer/_documentViewerVariables.css +0 -0
- package/dist/cjs/widgets/documentViewer/documentViewer.css +82 -0
- package/dist/cjs/widgets/documentViewer/documentViewer.interfaces.js +6 -0
- package/dist/cjs/widgets/documentViewer/documentViewer.interfaces.js.map +1 -0
- package/dist/cjs/widgets/documentViewer/index.js +19 -0
- package/dist/cjs/widgets/documentViewer/index.js.map +1 -0
- package/dist/cjs/widgets/index.js +126 -0
- package/dist/cjs/widgets/index.js.map +1 -1
- package/dist/cjs/widgets/shared/documents/ToggleGroup.js +32 -0
- package/dist/cjs/widgets/shared/documents/ToggleGroup.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/_documentVariables.css +0 -0
- package/dist/cjs/widgets/shared/documents/annotations/AnnotationLayer.js +279 -0
- package/dist/cjs/widgets/shared/documents/annotations/AnnotationLayer.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/annotations/_annotationLayerVariables.css +0 -0
- package/dist/cjs/widgets/shared/documents/annotations/annotationLayer.css +65 -0
- package/dist/cjs/widgets/shared/documents/annotations/annotations.interfaces.js +21 -0
- package/dist/cjs/widgets/shared/documents/annotations/annotations.interfaces.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/annotations/highlightRegistry.js +67 -0
- package/dist/cjs/widgets/shared/documents/annotations/highlightRegistry.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/annotations/index.js +39 -0
- package/dist/cjs/widgets/shared/documents/annotations/index.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/annotations/textIndex.js +112 -0
- package/dist/cjs/widgets/shared/documents/annotations/textIndex.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/annotations/textQuoteAnchor.js +160 -0
- package/dist/cjs/widgets/shared/documents/annotations/textQuoteAnchor.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/documentHelpers.js +186 -0
- package/dist/cjs/widgets/shared/documents/documentHelpers.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/documents.interfaces.js +6 -0
- package/dist/cjs/widgets/shared/documents/documents.interfaces.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/documentDiff/DocumentDiff.js +73 -0
- package/dist/cjs/widgets/shared/documents/engines/documentDiff/DocumentDiff.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/documentDiff/_documentDiffVariables.css +0 -0
- package/dist/cjs/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.js +114 -0
- package/dist/cjs/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/documentDiff/documentDiff.css +69 -0
- package/dist/cjs/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.js +6 -0
- package/dist/cjs/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/lazyEngines.js +19 -0
- package/dist/cjs/widgets/shared/documents/engines/lazyEngines.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.js +200 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownEditor/_markdownEditorEngineVariables.css +0 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.css +50 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.js +6 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.js +179 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.js +278 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.js +208 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.js +85 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/_markdownRendererVariables.css +0 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/markdownRenderer.css +78 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/index.js +64 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/index.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.js +6 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js +71 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.js +192 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js +86 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.js +38 -0
- package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/wordRenderer/WordRenderer.js +49 -0
- package/dist/cjs/widgets/shared/documents/engines/wordRenderer/WordRenderer.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/wordRenderer/renderWordDocument.js +214 -0
- package/dist/cjs/widgets/shared/documents/engines/wordRenderer/renderWordDocument.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.js +112 -0
- package/dist/cjs/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/engines/wordRenderer/wordXml.js +68 -0
- package/dist/cjs/widgets/shared/documents/engines/wordRenderer/wordXml.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/index.js +50 -0
- package/dist/cjs/widgets/shared/documents/index.js.map +1 -0
- package/dist/cjs/widgets/shared/documents/toggleGroup.css +8 -0
- package/dist/cjs/widgets/shared/documents/useDocumentContent.js +222 -0
- package/dist/cjs/widgets/shared/documents/useDocumentContent.js.map +1 -0
- package/dist/components/design/banners/pageBanner/PageBanner.d.ts.map +1 -1
- package/dist/components/design/card/cardHeader/CardHeaderItem.d.ts.map +1 -1
- package/dist/components/design/logos/LogoLink.d.ts.map +1 -1
- package/dist/components/design/logos/VentureLogo.d.ts.map +1 -1
- package/dist/components/design/skeleton/Skeleton.d.ts +1 -1
- package/dist/components/design/skeleton/Skeleton.d.ts.map +1 -1
- package/dist/components/design/themeLoader/ThemeLoader.d.ts.map +1 -1
- package/dist/components/form/buttons/SimpleButton.d.ts.map +1 -1
- package/dist/components/form/buttons/button.interface.d.ts +1 -0
- package/dist/components/form/buttons/button.interface.d.ts.map +1 -1
- package/dist/components/form/buttons/userPicButton/UserPicButton.d.ts.map +1 -1
- package/dist/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.d.ts.map +1 -1
- package/dist/components/navigation/link/Link.d.ts.map +1 -1
- package/dist/components/testing/devToolbar/DevToolbar.d.ts.map +1 -1
- package/dist/constants/fileUploadTypes.d.ts.map +1 -1
- package/dist/esm/autoGenerated/libraryThemes.js +12 -12
- package/dist/esm/autoGenerated/libraryThemes.js.map +1 -1
- package/dist/esm/autoGenerated/libraryThemes.json +12 -12
- package/dist/esm/components/design/banners/pageBanner/PageBanner.js +27 -12
- package/dist/esm/components/design/banners/pageBanner/PageBanner.js.map +1 -1
- package/dist/esm/components/design/card/cardHeader/CardHeaderItem.js +22 -15
- package/dist/esm/components/design/card/cardHeader/CardHeaderItem.js.map +1 -1
- package/dist/esm/components/design/dialog/dialog.css +4 -0
- package/dist/esm/components/design/logos/LogoLink.js +2 -1
- package/dist/esm/components/design/logos/LogoLink.js.map +1 -1
- package/dist/esm/components/design/logos/VentureLogo.js +2 -1
- package/dist/esm/components/design/logos/VentureLogo.js.map +1 -1
- package/dist/esm/components/design/revealMore/RevealMoreBelow.js +1 -1
- package/dist/esm/components/design/revealMore/RevealMoreBelow.js.map +1 -1
- package/dist/esm/components/design/skeleton/Skeleton.js +15 -5
- package/dist/esm/components/design/skeleton/Skeleton.js.map +1 -1
- package/dist/esm/components/design/themeLoader/ThemeLoader.js +1 -1
- package/dist/esm/components/design/themeLoader/ThemeLoader.js.map +1 -1
- package/dist/esm/components/form/buttons/SimpleButton.js +3 -1
- package/dist/esm/components/form/buttons/SimpleButton.js.map +1 -1
- package/dist/esm/components/form/buttons/button.interface.js.map +1 -1
- package/dist/esm/components/form/buttons/userPicButton/UserPicButton.js +5 -3
- package/dist/esm/components/form/buttons/userPicButton/UserPicButton.js.map +1 -1
- package/dist/esm/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.js +65 -19
- package/dist/esm/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.js.map +1 -1
- package/dist/esm/components/navigation/link/Link.js +2 -1
- package/dist/esm/components/navigation/link/Link.js.map +1 -1
- package/dist/esm/components/testing/devToolbar/DevToolbar.js +5 -3
- package/dist/esm/components/testing/devToolbar/DevToolbar.js.map +1 -1
- package/dist/esm/constants/fileUploadTypes.js +9 -4
- package/dist/esm/constants/fileUploadTypes.js.map +1 -1
- package/dist/esm/helpers/dateHelpers.js +34 -23
- package/dist/esm/helpers/dateHelpers.js.map +1 -1
- package/dist/esm/helpers/fileHelpers.js +48 -0
- package/dist/esm/helpers/fileHelpers.js.map +1 -0
- package/dist/esm/helpers/index.js +2 -0
- package/dist/esm/helpers/index.js.map +1 -1
- package/dist/esm/helpers/interactionsHelper.js +5 -0
- package/dist/esm/helpers/interactionsHelper.js.map +1 -1
- package/dist/esm/helpers/objectHelpers.js +23 -9
- package/dist/esm/helpers/objectHelpers.js.map +1 -1
- package/dist/esm/helpers/stringHelpers.js +61 -5
- package/dist/esm/helpers/stringHelpers.js.map +1 -1
- package/dist/esm/helpers/urlHelpers.js +40 -0
- package/dist/esm/helpers/urlHelpers.js.map +1 -0
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/package.json +2 -304
- package/dist/esm/styles/index.css +18 -0
- package/dist/esm/styles/variables/cssVars/_designVariables.css +18 -0
- package/dist/esm/widgets/documentComments/DocumentComments.js +298 -0
- package/dist/esm/widgets/documentComments/DocumentComments.js.map +1 -0
- package/dist/esm/widgets/documentComments/_documentCommentsVariables.css +0 -0
- package/dist/esm/widgets/documentComments/documentComments.css +107 -0
- package/dist/esm/widgets/documentComments/documentComments.interfaces.js +2 -0
- package/dist/esm/widgets/documentComments/documentComments.interfaces.js.map +1 -0
- package/dist/esm/widgets/documentComments/index.js +2 -0
- package/dist/esm/widgets/documentComments/index.js.map +1 -0
- package/dist/esm/widgets/documentComparer/DocumentComparer.js +301 -0
- package/dist/esm/widgets/documentComparer/DocumentComparer.js.map +1 -0
- package/dist/esm/widgets/documentComparer/_documentComparerVariables.css +0 -0
- package/dist/esm/widgets/documentComparer/documentComparer.css +117 -0
- package/dist/esm/widgets/documentComparer/documentComparer.interfaces.js +2 -0
- package/dist/esm/widgets/documentComparer/documentComparer.interfaces.js.map +1 -0
- package/dist/esm/widgets/documentComparer/index.js +2 -0
- package/dist/esm/widgets/documentComparer/index.js.map +1 -0
- package/dist/esm/widgets/documentEditor/DocumentEditor.js +135 -0
- package/dist/esm/widgets/documentEditor/DocumentEditor.js.map +1 -0
- package/dist/esm/widgets/documentEditor/_documentEditorVariables.css +0 -0
- package/dist/esm/widgets/documentEditor/documentEditor.css +33 -0
- package/dist/esm/widgets/documentEditor/documentEditor.interfaces.js +2 -0
- package/dist/esm/widgets/documentEditor/documentEditor.interfaces.js.map +1 -0
- package/dist/esm/widgets/documentEditor/index.js +2 -0
- package/dist/esm/widgets/documentEditor/index.js.map +1 -0
- package/dist/esm/widgets/documentViewer/DocumentViewer.js +198 -0
- package/dist/esm/widgets/documentViewer/DocumentViewer.js.map +1 -0
- package/dist/esm/widgets/documentViewer/_documentViewerVariables.css +0 -0
- package/dist/esm/widgets/documentViewer/documentViewer.css +82 -0
- package/dist/esm/widgets/documentViewer/documentViewer.interfaces.js +2 -0
- package/dist/esm/widgets/documentViewer/documentViewer.interfaces.js.map +1 -0
- package/dist/esm/widgets/documentViewer/index.js +2 -0
- package/dist/esm/widgets/documentViewer/index.js.map +1 -0
- package/dist/esm/widgets/index.js +6 -0
- package/dist/esm/widgets/index.js.map +1 -1
- package/dist/esm/widgets/shared/documents/ToggleGroup.js +24 -0
- package/dist/esm/widgets/shared/documents/ToggleGroup.js.map +1 -0
- package/dist/esm/widgets/shared/documents/_documentVariables.css +0 -0
- package/dist/esm/widgets/shared/documents/annotations/AnnotationLayer.js +273 -0
- package/dist/esm/widgets/shared/documents/annotations/AnnotationLayer.js.map +1 -0
- package/dist/esm/widgets/shared/documents/annotations/_annotationLayerVariables.css +0 -0
- package/dist/esm/widgets/shared/documents/annotations/annotationLayer.css +65 -0
- package/dist/esm/widgets/shared/documents/annotations/annotations.interfaces.js +14 -0
- package/dist/esm/widgets/shared/documents/annotations/annotations.interfaces.js.map +1 -0
- package/dist/esm/widgets/shared/documents/annotations/highlightRegistry.js +58 -0
- package/dist/esm/widgets/shared/documents/annotations/highlightRegistry.js.map +1 -0
- package/dist/esm/widgets/shared/documents/annotations/index.js +4 -0
- package/dist/esm/widgets/shared/documents/annotations/index.js.map +1 -0
- package/dist/esm/widgets/shared/documents/annotations/textIndex.js +103 -0
- package/dist/esm/widgets/shared/documents/annotations/textIndex.js.map +1 -0
- package/dist/esm/widgets/shared/documents/annotations/textQuoteAnchor.js +150 -0
- package/dist/esm/widgets/shared/documents/annotations/textQuoteAnchor.js.map +1 -0
- package/dist/esm/widgets/shared/documents/documentHelpers.js +168 -0
- package/dist/esm/widgets/shared/documents/documentHelpers.js.map +1 -0
- package/dist/esm/widgets/shared/documents/documents.interfaces.js +2 -0
- package/dist/esm/widgets/shared/documents/documents.interfaces.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/documentDiff/DocumentDiff.js +65 -0
- package/dist/esm/widgets/shared/documents/engines/documentDiff/DocumentDiff.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/documentDiff/_documentDiffVariables.css +0 -0
- package/dist/esm/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.js +102 -0
- package/dist/esm/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/documentDiff/documentDiff.css +69 -0
- package/dist/esm/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.js +2 -0
- package/dist/esm/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/lazyEngines.js +13 -0
- package/dist/esm/widgets/shared/documents/engines/lazyEngines.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.js +191 -0
- package/dist/esm/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/markdownEditor/_markdownEditorEngineVariables.css +0 -0
- package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.css +50 -0
- package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.js +2 -0
- package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.js +170 -0
- package/dist/esm/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.js +270 -0
- package/dist/esm/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.js +198 -0
- package/dist/esm/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.js +76 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/_markdownRendererVariables.css +0 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/markdownRenderer.css +78 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/index.js +5 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/index.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.js +2 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js +64 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.js +182 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js +78 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.js +30 -0
- package/dist/esm/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/wordRenderer/WordRenderer.js +41 -0
- package/dist/esm/widgets/shared/documents/engines/wordRenderer/WordRenderer.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/wordRenderer/renderWordDocument.js +207 -0
- package/dist/esm/widgets/shared/documents/engines/wordRenderer/renderWordDocument.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.js +105 -0
- package/dist/esm/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.js.map +1 -0
- package/dist/esm/widgets/shared/documents/engines/wordRenderer/wordXml.js +57 -0
- package/dist/esm/widgets/shared/documents/engines/wordRenderer/wordXml.js.map +1 -0
- package/dist/esm/widgets/shared/documents/index.js +3 -0
- package/dist/esm/widgets/shared/documents/index.js.map +1 -0
- package/dist/esm/widgets/shared/documents/toggleGroup.css +8 -0
- package/dist/esm/widgets/shared/documents/useDocumentContent.js +215 -0
- package/dist/esm/widgets/shared/documents/useDocumentContent.js.map +1 -0
- package/dist/helpers/dateHelpers.d.ts.map +1 -1
- package/dist/helpers/fileHelpers.d.ts +5 -0
- package/dist/helpers/fileHelpers.d.ts.map +1 -0
- package/dist/helpers/index.d.ts +3 -0
- package/dist/helpers/index.d.ts.map +1 -1
- package/dist/helpers/interactionsHelper.d.ts +2 -0
- package/dist/helpers/interactionsHelper.d.ts.map +1 -1
- package/dist/helpers/objectHelpers.d.ts.map +1 -1
- package/dist/helpers/stringHelpers.d.ts.map +1 -1
- package/dist/helpers/urlHelpers.d.ts +3 -0
- package/dist/helpers/urlHelpers.d.ts.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/package.json +42 -28
- package/dist/widgets/documentComments/DocumentComments.d.ts +7 -0
- package/dist/widgets/documentComments/DocumentComments.d.ts.map +1 -0
- package/dist/widgets/documentComments/documentComments.interfaces.d.ts +57 -0
- package/dist/widgets/documentComments/documentComments.interfaces.d.ts.map +1 -0
- package/dist/widgets/documentComments/index.d.ts +3 -0
- package/dist/widgets/documentComments/index.d.ts.map +1 -0
- package/dist/widgets/documentComparer/DocumentComparer.d.ts +7 -0
- package/dist/widgets/documentComparer/DocumentComparer.d.ts.map +1 -0
- package/dist/widgets/documentComparer/documentComparer.interfaces.d.ts +78 -0
- package/dist/widgets/documentComparer/documentComparer.interfaces.d.ts.map +1 -0
- package/dist/widgets/documentComparer/index.d.ts +3 -0
- package/dist/widgets/documentComparer/index.d.ts.map +1 -0
- package/dist/widgets/documentEditor/DocumentEditor.d.ts +7 -0
- package/dist/widgets/documentEditor/DocumentEditor.d.ts.map +1 -0
- package/dist/widgets/documentEditor/documentEditor.interfaces.d.ts +40 -0
- package/dist/widgets/documentEditor/documentEditor.interfaces.d.ts.map +1 -0
- package/dist/widgets/documentEditor/index.d.ts +3 -0
- package/dist/widgets/documentEditor/index.d.ts.map +1 -0
- package/dist/widgets/documentViewer/DocumentViewer.d.ts +7 -0
- package/dist/widgets/documentViewer/DocumentViewer.d.ts.map +1 -0
- package/dist/widgets/documentViewer/documentViewer.interfaces.d.ts +47 -0
- package/dist/widgets/documentViewer/documentViewer.interfaces.d.ts.map +1 -0
- package/dist/widgets/documentViewer/index.d.ts +3 -0
- package/dist/widgets/documentViewer/index.d.ts.map +1 -0
- package/dist/widgets/index.d.ts +12 -0
- package/dist/widgets/index.d.ts.map +1 -1
- package/dist/widgets/shared/documents/ToggleGroup.d.ts +15 -0
- package/dist/widgets/shared/documents/ToggleGroup.d.ts.map +1 -0
- package/dist/widgets/shared/documents/annotations/AnnotationLayer.d.ts +27 -0
- package/dist/widgets/shared/documents/annotations/AnnotationLayer.d.ts.map +1 -0
- package/dist/widgets/shared/documents/annotations/annotations.interfaces.d.ts +43 -0
- package/dist/widgets/shared/documents/annotations/annotations.interfaces.d.ts.map +1 -0
- package/dist/widgets/shared/documents/annotations/highlightRegistry.d.ts +12 -0
- package/dist/widgets/shared/documents/annotations/highlightRegistry.d.ts.map +1 -0
- package/dist/widgets/shared/documents/annotations/index.d.ts +6 -0
- package/dist/widgets/shared/documents/annotations/index.d.ts.map +1 -0
- package/dist/widgets/shared/documents/annotations/textIndex.d.ts +16 -0
- package/dist/widgets/shared/documents/annotations/textIndex.d.ts.map +1 -0
- package/dist/widgets/shared/documents/annotations/textQuoteAnchor.d.ts +15 -0
- package/dist/widgets/shared/documents/annotations/textQuoteAnchor.d.ts.map +1 -0
- package/dist/widgets/shared/documents/documentHelpers.d.ts +14 -0
- package/dist/widgets/shared/documents/documentHelpers.d.ts.map +1 -0
- package/dist/widgets/shared/documents/documents.interfaces.d.ts +20 -0
- package/dist/widgets/shared/documents/documents.interfaces.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/documentDiff/DocumentDiff.d.ts +6 -0
- package/dist/widgets/shared/documents/engines/documentDiff/DocumentDiff.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.d.ts +25 -0
- package/dist/widgets/shared/documents/engines/documentDiff/buildDocumentDiff.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.d.ts +17 -0
- package/dist/widgets/shared/documents/engines/documentDiff/documentDiff.interfaces.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/lazyEngines.d.ts +5 -0
- package/dist/widgets/shared/documents/engines/lazyEngines.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.d.ts +8 -0
- package/dist/widgets/shared/documents/engines/markdownEditor/MarkdownEditorEngine.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.d.ts +23 -0
- package/dist/widgets/shared/documents/engines/markdownEditor/markdownEditorEngine.interfaces.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.d.ts +12 -0
- package/dist/widgets/shared/documents/engines/markdownEditor/markdownTextIndex.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.d.ts +8 -0
- package/dist/widgets/shared/documents/engines/markdownEditor/sanitizeForMdx.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.d.ts +32 -0
- package/dist/widgets/shared/documents/engines/markdownEditor/sourceAnnotations.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.d.ts +12 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/index.d.ts +7 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/index.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.d.ts +16 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.d.ts +3 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.d.ts +6 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.d.ts +3 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.d.ts +8 -0
- package/dist/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/wordRenderer/WordRenderer.d.ts +11 -0
- package/dist/widgets/shared/documents/engines/wordRenderer/WordRenderer.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/wordRenderer/renderWordDocument.d.ts +7 -0
- package/dist/widgets/shared/documents/engines/wordRenderer/renderWordDocument.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.d.ts +3 -0
- package/dist/widgets/shared/documents/engines/wordRenderer/wordPreviewNumbering.d.ts.map +1 -0
- package/dist/widgets/shared/documents/engines/wordRenderer/wordXml.d.ts +21 -0
- package/dist/widgets/shared/documents/engines/wordRenderer/wordXml.d.ts.map +1 -0
- package/dist/widgets/shared/documents/index.d.ts +5 -0
- package/dist/widgets/shared/documents/index.d.ts.map +1 -0
- package/dist/widgets/shared/documents/useDocumentContent.d.ts +11 -0
- package/dist/widgets/shared/documents/useDocumentContent.d.ts.map +1 -0
- package/package.json +42 -28
- package/readme.md +49 -2
- package/dist/components/design/dialog/Dialog.test.d.ts +0 -5
- package/dist/components/design/dialog/Dialog.test.d.ts.map +0 -1
- package/dist/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.test.d.ts +0 -5
- package/dist/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.test.d.ts.map +0 -1
- package/dist/components/design/tooltip/Tooltip.test.d.ts +0 -2
- package/dist/components/design/tooltip/Tooltip.test.d.ts.map +0 -1
- package/dist/components/form/buttons/SimpleButton.test.d.ts +0 -5
- package/dist/components/form/buttons/SimpleButton.test.d.ts.map +0 -1
- package/dist/components/form/formFields/formFieldWrapper/FormField.test.d.ts +0 -5
- package/dist/components/form/formFields/formFieldWrapper/FormField.test.d.ts.map +0 -1
- package/dist/components/form/formFields/subComponents/inputs/checkbox/InputCheckbox.test.d.ts +0 -5
- package/dist/components/form/formFields/subComponents/inputs/checkbox/InputCheckbox.test.d.ts.map +0 -1
- package/dist/components/form/formFields/subComponents/inputs/checkbox/checkboxSwitch/CheckboxSwitch.test.d.ts +0 -5
- package/dist/components/form/formFields/subComponents/inputs/checkbox/checkboxSwitch/CheckboxSwitch.test.d.ts.map +0 -1
- package/dist/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.test.d.ts +0 -5
- package/dist/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.test.d.ts.map +0 -1
- package/dist/components/form/formFields/subComponents/inputs/file/fileAttachmentList/FileAttachmentsList.test.d.ts +0 -5
- package/dist/components/form/formFields/subComponents/inputs/file/fileAttachmentList/FileAttachmentsList.test.d.ts.map +0 -1
- package/dist/components/form/formFields/subComponents/inputs/text/InputText.test.d.ts +0 -5
- package/dist/components/form/formFields/subComponents/inputs/text/InputText.test.d.ts.map +0 -1
- package/dist/components/form/formFields/subComponents/nestedFormContext.test.d.ts +0 -5
- package/dist/components/form/formFields/subComponents/nestedFormContext.test.d.ts.map +0 -1
- package/dist/components/form/formFields/subComponents/select/Select.test.d.ts +0 -5
- package/dist/components/form/formFields/subComponents/select/Select.test.d.ts.map +0 -1
- package/dist/components/form/formFields/subComponents/textarea/Textarea.test.d.ts +0 -5
- package/dist/components/form/formFields/subComponents/textarea/Textarea.test.d.ts.map +0 -1
- package/dist/components/form/hookFormWrapper/HookFormWrapper.test.d.ts +0 -5
- package/dist/components/form/hookFormWrapper/HookFormWrapper.test.d.ts.map +0 -1
- package/dist/components/form/validation/ValidationMessages.test.d.ts +0 -5
- package/dist/components/form/validation/ValidationMessages.test.d.ts.map +0 -1
- package/dist/components/navigation/bubbleNavigator/bubbleNavigatorUtilities.test.d.ts +0 -2
- package/dist/components/navigation/bubbleNavigator/bubbleNavigatorUtilities.test.d.ts.map +0 -1
- package/dist/components/navigation/menu/menuItemContent/MenuItemIcon.test.d.ts +0 -5
- package/dist/components/navigation/menu/menuItemContent/MenuItemIcon.test.d.ts.map +0 -1
- package/dist/helpers/ageHelpers.test.d.ts +0 -2
- package/dist/helpers/ageHelpers.test.d.ts.map +0 -1
- package/dist/helpers/dateHelpers.test.d.ts +0 -2
- package/dist/helpers/dateHelpers.test.d.ts.map +0 -1
- package/dist/helpers/formatters.test.d.ts +0 -5
- package/dist/helpers/formatters.test.d.ts.map +0 -1
- package/dist/helpers/iconHelpers.test.d.ts +0 -5
- package/dist/helpers/iconHelpers.test.d.ts.map +0 -1
- package/dist/helpers/numberHelpers.test.d.ts +0 -5
- package/dist/helpers/numberHelpers.test.d.ts.map +0 -1
- package/dist/helpers/objectHelpers.test.d.ts +0 -2
- package/dist/helpers/objectHelpers.test.d.ts.map +0 -1
- package/dist/helpers/stringHelpers.test.d.ts +0 -2
- package/dist/helpers/stringHelpers.test.d.ts.map +0 -1
- package/dist/hooks/InteractiveHostFocus.test.d.ts +0 -5
- package/dist/hooks/InteractiveHostFocus.test.d.ts.map +0 -1
- package/dist/widgets/processLauncher/ProcessLauncher.test.d.ts +0 -5
- package/dist/widgets/processLauncher/ProcessLauncher.test.d.ts.map +0 -1
package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tableHelpers.js","names":["LAYOUT_TABLE_MARKER","exports","INVISIBLE_CHARACTERS","map","code","String","fromCharCode","hasMeaningfulTableText","text","Array","from","some","character","test","includes","isProse","trim","length","split","isLabelAndBodyRow","row","label","body","isLikelyLayoutTable","rows","meaningfulRows","filter","cell","Math","max","every","isHeader","layoutRows","populated","ceil"],"sources":["../../../../../../../../src/widgets/shared/documents/engines/markdownRenderer/plugins/tableHelpers.ts"],"sourcesContent":["export type LayoutTableCell = {\n text: string;\n isHeader?: boolean;\n};\n\n// Converters can emit this marker before a table they know is used for layout rather than data.\nexport const LAYOUT_TABLE_MARKER = '<!-- layoutTable -->';\n\n// Zero-width spaces and byte-order marks are common in converted cells and carry no content.\nconst INVISIBLE_CHARACTERS = [0x200b, 0xfeff].map((code) => String.fromCharCode(code));\n\nexport const hasMeaningfulTableText = (text: string): boolean =>\n Array.from(text).some((character) => !/\\s/.test(character) && !INVISIBLE_CHARACTERS.includes(character));\n\nconst isProse = (text: string): boolean => text.trim().length > 40 && text.trim().split(/\\s+/).length >= 8;\n\nconst isLabelAndBodyRow = (row: LayoutTableCell[]): boolean => {\n const label = row[0]?.text.trim() ?? '';\n const body = row[1]?.text.trim() ?? '';\n return label.length > 0\n && label.length <= 90\n && label.split(/\\s+/).length <= 12\n && !/[.!?]$/.test(label)\n && isProse(body)\n && body.length > label.length * 2;\n};\n\n// Documents converted from Word often use one- or two-column tables to lay out prose\n// (a short label beside a paragraph). Those read better styled as text than as a data grid.\nexport const isLikelyLayoutTable = (rows: LayoutTableCell[][]): boolean => {\n const meaningfulRows = rows.filter((row) => row.some((cell) => cell.text.trim()));\n if (!meaningfulRows.length || Math.max(...meaningfulRows.map((row) => row.length)) > 2) {\n return false;\n }\n if (meaningfulRows[0].every((cell) => cell.isHeader && cell.text.trim())) {\n return false;\n }\n const layoutRows = meaningfulRows.filter((row) => {\n const populated = row.filter((cell) => cell.text.trim());\n return populated.length === 1 ? isProse(populated[0].text) : isLabelAndBodyRow(row);\n });\n return layoutRows.length >= Math.max(1, Math.ceil(meaningfulRows.length * 0.6));\n};\n"],"mappings":";;;;;;AAKA;AACO,MAAMA,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,GAAG,sBAAsB;;AAEzD;AACA,MAAME,oBAAoB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAACC,GAAG,CAAEC,IAAI,IAAKC,MAAM,CAACC,YAAY,CAACF,IAAI,CAAC,CAAC;AAE/E,MAAMG,sBAAsB,GAAIC,IAAY,IACjDC,KAAK,CAACC,IAAI,CAACF,IAAI,CAAC,CAACG,IAAI,CAAEC,SAAS,IAAK,CAAC,IAAI,CAACC,IAAI,CAACD,SAAS,CAAC,IAAI,CAACV,oBAAoB,CAACY,QAAQ,CAACF,SAAS,CAAC,CAAC;AAACX,OAAA,CAAAM,sBAAA,GAAAA,sBAAA;AAE3G,MAAMQ,OAAO,GAAIP,IAAY,IAAcA,IAAI,CAACQ,IAAI,CAAC,CAAC,CAACC,MAAM,GAAG,EAAE,IAAIT,IAAI,CAACQ,IAAI,CAAC,CAAC,CAACE,KAAK,CAAC,KAAK,CAAC,CAACD,MAAM,IAAI,CAAC;AAE1G,MAAME,iBAAiB,GAAIC,GAAsB,IAAc;EAC7D,MAAMC,KAAK,GAAGD,GAAG,CAAC,CAAC,CAAC,EAAEZ,IAAI,CAACQ,IAAI,CAAC,CAAC,IAAI,EAAE;EACvC,MAAMM,IAAI,GAAGF,GAAG,CAAC,CAAC,CAAC,EAAEZ,IAAI,CAACQ,IAAI,CAAC,CAAC,IAAI,EAAE;EACtC,OAAOK,KAAK,CAACJ,MAAM,GAAG,CAAC,IAClBI,KAAK,CAACJ,MAAM,IAAI,EAAE,IAClBI,KAAK,CAACH,KAAK,CAAC,KAAK,CAAC,CAACD,MAAM,IAAI,EAAE,IAC/B,CAAC,QAAQ,CAACJ,IAAI,CAACQ,KAAK,CAAC,IACrBN,OAAO,CAACO,IAAI,CAAC,IACbA,IAAI,CAACL,MAAM,GAAGI,KAAK,CAACJ,MAAM,GAAG,CAAC;AACrC,CAAC;;AAED;AACA;AACO,MAAMM,mBAAmB,GAAIC,IAAyB,IAAc;EACzE,MAAMC,cAAc,GAAGD,IAAI,CAACE,MAAM,CAAEN,GAAG,IAAKA,GAAG,CAACT,IAAI,CAAEgB,IAAI,IAAKA,IAAI,CAACnB,IAAI,CAACQ,IAAI,CAAC,CAAC,CAAC,CAAC;EACjF,IAAI,CAACS,cAAc,CAACR,MAAM,IAAIW,IAAI,CAACC,GAAG,CAAC,GAAGJ,cAAc,CAACtB,GAAG,CAAEiB,GAAG,IAAKA,GAAG,CAACH,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE;IACtF,OAAO,KAAK;EACd;EACA,IAAIQ,cAAc,CAAC,CAAC,CAAC,CAACK,KAAK,CAAEH,IAAI,IAAKA,IAAI,CAACI,QAAQ,IAAIJ,IAAI,CAACnB,IAAI,CAACQ,IAAI,CAAC,CAAC,CAAC,EAAE;IACxE,OAAO,KAAK;EACd;EACA,MAAMgB,UAAU,GAAGP,cAAc,CAACC,MAAM,CAAEN,GAAG,IAAK;IAChD,MAAMa,SAAS,GAAGb,GAAG,CAACM,MAAM,CAAEC,IAAI,IAAKA,IAAI,CAACnB,IAAI,CAACQ,IAAI,CAAC,CAAC,CAAC;IACxD,OAAOiB,SAAS,CAAChB,MAAM,KAAK,CAAC,GAAGF,OAAO,CAACkB,SAAS,CAAC,CAAC,CAAC,CAACzB,IAAI,CAAC,GAAGW,iBAAiB,CAACC,GAAG,CAAC;EACrF,CAAC,CAAC;EACF,OAAOY,UAAU,CAACf,MAAM,IAAIW,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACM,IAAI,CAACT,cAAc,CAACR,MAAM,GAAG,GAAG,CAAC,CAAC;AACjF,CAAC;AAAChB,OAAA,CAAAsB,mBAAA,GAAAA,mBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.WordRenderer = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _renderWordDocument = require("./renderWordDocument");
|
|
9
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
10
|
+
const WordRenderer = ({
|
|
11
|
+
arrayBuffer,
|
|
12
|
+
title,
|
|
13
|
+
cssClass = '',
|
|
14
|
+
loadingIndicator = null,
|
|
15
|
+
onError
|
|
16
|
+
}) => {
|
|
17
|
+
const [previewDocument, setPreviewDocument] = (0, _react.useState)(null);
|
|
18
|
+
(0, _react.useEffect)(() => {
|
|
19
|
+
let isCurrent = true;
|
|
20
|
+
setPreviewDocument(null);
|
|
21
|
+
(0, _renderWordDocument.renderWordDocument)(arrayBuffer).then(html => {
|
|
22
|
+
if (isCurrent) {
|
|
23
|
+
setPreviewDocument(html);
|
|
24
|
+
}
|
|
25
|
+
}).catch(error => {
|
|
26
|
+
if (isCurrent) {
|
|
27
|
+
onError?.(error);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
return () => {
|
|
31
|
+
isCurrent = false;
|
|
32
|
+
};
|
|
33
|
+
}, [arrayBuffer, onError]);
|
|
34
|
+
if (previewDocument === null) {
|
|
35
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, loadingIndicator);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// An empty sandbox blocks scripts, forms and same-origin access; the CSP inside the document
|
|
39
|
+
// additionally blocks any network requests from the converted content.
|
|
40
|
+
return /*#__PURE__*/_react.default.createElement("iframe", {
|
|
41
|
+
title: title,
|
|
42
|
+
className: `wordRenderer ${cssClass}`.trim(),
|
|
43
|
+
sandbox: "",
|
|
44
|
+
srcDoc: previewDocument
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
exports.WordRenderer = WordRenderer;
|
|
48
|
+
var _default = exports.default = WordRenderer;
|
|
49
|
+
//# sourceMappingURL=WordRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WordRenderer.js","names":["_react","_interopRequireWildcard","require","_renderWordDocument","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","WordRenderer","arrayBuffer","title","cssClass","loadingIndicator","onError","previewDocument","setPreviewDocument","useState","useEffect","isCurrent","renderWordDocument","then","html","catch","error","createElement","Fragment","className","trim","sandbox","srcDoc","exports","_default"],"sources":["../../../../../../../src/widgets/shared/documents/engines/wordRenderer/WordRenderer.tsx"],"sourcesContent":["import React, { FC, ReactNode, useEffect, useState } from 'react';\n\nimport { renderWordDocument } from './renderWordDocument';\n\nexport type WordRendererProps = {\n arrayBuffer: ArrayBuffer;\n title: string;\n cssClass?: string;\n // Shown while the document is being converted, after the engine itself has loaded.\n loadingIndicator?: ReactNode;\n /* eslint-disable-next-line no-unused-vars */\n onError?: (error: unknown) => void;\n};\n\nexport const WordRenderer: FC<WordRendererProps> = (\n {\n arrayBuffer,\n title,\n cssClass = '',\n loadingIndicator = null,\n onError\n }\n) => {\n const [previewDocument, setPreviewDocument] = useState<string | null>(null);\n\n useEffect(() => {\n let isCurrent = true;\n setPreviewDocument(null);\n renderWordDocument(arrayBuffer)\n .then((html) => {\n if (isCurrent) {\n setPreviewDocument(html);\n }\n })\n .catch((error: unknown) => {\n if (isCurrent) {\n onError?.(error);\n }\n });\n return () => {\n isCurrent = false;\n };\n }, [arrayBuffer, onError]);\n\n if (previewDocument === null) {\n return <>{ loadingIndicator }</>;\n }\n\n // An empty sandbox blocks scripts, forms and same-origin access; the CSP inside the document\n // additionally blocks any network requests from the converted content.\n return <iframe title={ title } className={ `wordRenderer ${ cssClass }`.trim() } sandbox=\"\" srcDoc={ previewDocument } />;\n};\n\nexport default WordRenderer;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,mBAAA,GAAAD,OAAA;AAA0D,SAAAD,wBAAAG,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAL,uBAAA,YAAAA,CAAAG,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAYnD,MAAMkB,YAAmC,GAAGA,CACjD;EACEC,WAAW;EACXC,KAAK;EACLC,QAAQ,GAAG,EAAE;EACbC,gBAAgB,GAAG,IAAI;EACvBC;AACF,CAAC,KACE;EACH,MAAM,CAACC,eAAe,EAAEC,kBAAkB,CAAC,GAAG,IAAAC,eAAQ,EAAgB,IAAI,CAAC;EAE3E,IAAAC,gBAAS,EAAC,MAAM;IACd,IAAIC,SAAS,GAAG,IAAI;IACpBH,kBAAkB,CAAC,IAAI,CAAC;IACxB,IAAAI,sCAAkB,EAACV,WAAW,CAAC,CAC5BW,IAAI,CAAEC,IAAI,IAAK;MACd,IAAIH,SAAS,EAAE;QACbH,kBAAkB,CAACM,IAAI,CAAC;MAC1B;IACF,CAAC,CAAC,CACDC,KAAK,CAAEC,KAAc,IAAK;MACzB,IAAIL,SAAS,EAAE;QACbL,OAAO,GAAGU,KAAK,CAAC;MAClB;IACF,CAAC,CAAC;IACJ,OAAO,MAAM;MACXL,SAAS,GAAG,KAAK;IACnB,CAAC;EACH,CAAC,EAAE,CAACT,WAAW,EAAEI,OAAO,CAAC,CAAC;EAE1B,IAAIC,eAAe,KAAK,IAAI,EAAE;IAC5B,oBAAO7B,MAAA,CAAAc,OAAA,CAAAyB,aAAA,CAAAvC,MAAA,CAAAc,OAAA,CAAA0B,QAAA,QAAIb,gBAAoB,CAAC;EAClC;;EAEA;EACA;EACA,oBAAO3B,MAAA,CAAAc,OAAA,CAAAyB,aAAA;IAAQd,KAAK,EAAGA,KAAO;IAACgB,SAAS,EAAG,gBAAiBf,QAAQ,EAAG,CAACgB,IAAI,CAAC,CAAG;IAACC,OAAO,EAAC,EAAE;IAACC,MAAM,EAAGf;EAAiB,CAAE,CAAC;AAC3H,CAAC;AAACgB,OAAA,CAAAtB,YAAA,GAAAA,YAAA;AAAA,IAAAuB,QAAA,GAAAD,OAAA,CAAA/B,OAAA,GAEaS,YAAY","ignoreList":[]}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.renderWordDocument = exports.WORD_DOCUMENT_LIMITS = void 0;
|
|
8
|
+
var _docxPreview = require("docx-preview");
|
|
9
|
+
var _dompurify = _interopRequireDefault(require("dompurify"));
|
|
10
|
+
var _jszip = _interopRequireDefault(require("jszip"));
|
|
11
|
+
var _wordPreviewNumbering = require("./wordPreviewNumbering");
|
|
12
|
+
var _wordXml = require("./wordXml");
|
|
13
|
+
// The preview runs in a sandboxed iframe that cannot read the host page's CSS variables.
|
|
14
|
+
const PAGE_GUTTER = '15px';
|
|
15
|
+
const CONTENT_SECURITY_POLICY = 'default-src \'none\'; img-src data:; font-src data:; style-src \'unsafe-inline\';';
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
Limits against "zip bombs": a small .docx can declare, or simply contain, gigabytes of compressed
|
|
19
|
+
content. The sizes a zip declares cannot be trusted, so every entry is decompressed through a
|
|
20
|
+
stream that stops once the running total passes the limit, into a new zip that docx-preview reads.
|
|
21
|
+
Its own decompression then only ever sees content whose size has been measured.
|
|
22
|
+
*/
|
|
23
|
+
const WORD_DOCUMENT_LIMITS = exports.WORD_DOCUMENT_LIMITS = {
|
|
24
|
+
maxFileBytes: 50 * 1024 * 1024,
|
|
25
|
+
maxUncompressedBytes: 200 * 1024 * 1024,
|
|
26
|
+
maxEntries: 5000
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// Documented by JSZip but missing from its typings.
|
|
30
|
+
|
|
31
|
+
const TOO_LARGE = 'This Word document is too large to preview.';
|
|
32
|
+
const readZipEntry = (file, budget) => new Promise((resolve, reject) => {
|
|
33
|
+
const chunks = [];
|
|
34
|
+
let length = 0;
|
|
35
|
+
const stream = file.internalStream('uint8array');
|
|
36
|
+
stream.on('data', chunk => {
|
|
37
|
+
budget.remaining -= chunk.length;
|
|
38
|
+
if (budget.remaining < 0) {
|
|
39
|
+
stream.pause();
|
|
40
|
+
reject(new Error(TOO_LARGE));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
chunks.push(chunk);
|
|
44
|
+
length += chunk.length;
|
|
45
|
+
}).on('error', reject).on('end', () => {
|
|
46
|
+
const content = new Uint8Array(length);
|
|
47
|
+
let offset = 0;
|
|
48
|
+
chunks.forEach(chunk => {
|
|
49
|
+
content.set(chunk, offset);
|
|
50
|
+
offset += chunk.length;
|
|
51
|
+
});
|
|
52
|
+
resolve(content);
|
|
53
|
+
}).resume();
|
|
54
|
+
});
|
|
55
|
+
const loadBoundedZip = async arrayBuffer => {
|
|
56
|
+
if (arrayBuffer.byteLength > WORD_DOCUMENT_LIMITS.maxFileBytes) {
|
|
57
|
+
throw new Error(TOO_LARGE);
|
|
58
|
+
}
|
|
59
|
+
const zip = await _jszip.default.loadAsync(arrayBuffer);
|
|
60
|
+
const entries = Object.values(zip.files).filter(file => !file.dir);
|
|
61
|
+
if (entries.length > WORD_DOCUMENT_LIMITS.maxEntries) {
|
|
62
|
+
throw new Error(TOO_LARGE);
|
|
63
|
+
}
|
|
64
|
+
const bounded = new _jszip.default();
|
|
65
|
+
const budget = {
|
|
66
|
+
remaining: WORD_DOCUMENT_LIMITS.maxUncompressedBytes
|
|
67
|
+
};
|
|
68
|
+
// Sequential, so the budget is spent in order and the first entry over it stops the rest.
|
|
69
|
+
for (const file of entries) {
|
|
70
|
+
bounded.file(file.name, await readZipEntry(file, budget));
|
|
71
|
+
}
|
|
72
|
+
return bounded;
|
|
73
|
+
};
|
|
74
|
+
const parseWordPart = async (zip, name) => {
|
|
75
|
+
const file = zip.file(`word/${name}.xml`);
|
|
76
|
+
if (!file) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
const xml = new DOMParser().parseFromString(await file.async('string'), 'application/xml');
|
|
80
|
+
if (xml.querySelector('parsererror')) {
|
|
81
|
+
throw new Error(`Invalid Word XML: ${name}`);
|
|
82
|
+
}
|
|
83
|
+
return xml;
|
|
84
|
+
};
|
|
85
|
+
const hasLatinFont = fonts => Boolean((0, _wordXml.wordAttribute)(fonts, 'ascii') || (0, _wordXml.wordAttribute)(fonts, 'asciiTheme'));
|
|
86
|
+
|
|
87
|
+
// docx-preview replaces the whole CSS font-family when a style only names an East Asian font,
|
|
88
|
+
// so copy the Latin font each style would otherwise inherit.
|
|
89
|
+
const inheritLatinFonts = (styleDefinitions, styles) => {
|
|
90
|
+
const defaultFonts = styleDefinitions?.getElementsByTagNameNS(_wordXml.wordNamespace, 'rPrDefault')[0]?.getElementsByTagNameNS(_wordXml.wordNamespace, 'rFonts')[0];
|
|
91
|
+
const resolveLatinFont = (styleId, visited = new Set()) => {
|
|
92
|
+
if (!styleId) {
|
|
93
|
+
return defaultFonts;
|
|
94
|
+
}
|
|
95
|
+
if (visited.has(styleId)) {
|
|
96
|
+
throw new Error(`Circular Word style inheritance: ${styleId}`);
|
|
97
|
+
}
|
|
98
|
+
visited.add(styleId);
|
|
99
|
+
const style = styles.byId.get(styleId);
|
|
100
|
+
const fonts = (0, _wordXml.wordChild)((0, _wordXml.wordChild)(style, 'rPr'), 'rFonts');
|
|
101
|
+
return hasLatinFont(fonts) ? fonts : resolveLatinFont((0, _wordXml.wordValue)(style, 'basedOn'), visited);
|
|
102
|
+
};
|
|
103
|
+
styles.byId.forEach((style, id) => {
|
|
104
|
+
const fonts = (0, _wordXml.wordChild)((0, _wordXml.wordChild)(style, 'rPr'), 'rFonts');
|
|
105
|
+
if (!fonts || hasLatinFont(fonts)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const inheritedFonts = resolveLatinFont(id);
|
|
109
|
+
['ascii', 'asciiTheme'].forEach(name => {
|
|
110
|
+
const font = (0, _wordXml.wordAttribute)(inheritedFonts, name);
|
|
111
|
+
if (font) {
|
|
112
|
+
fonts.setAttributeNS(_wordXml.wordNamespace, `w:${name}`, font);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
const ensureChild = (source, parent, name, prepend = false) => {
|
|
118
|
+
let child = (0, _wordXml.wordChild)(parent, name);
|
|
119
|
+
if (!child) {
|
|
120
|
+
child = source.createElementNS(_wordXml.wordNamespace, `w:${name}`);
|
|
121
|
+
if (prepend) {
|
|
122
|
+
parent.prepend(child);
|
|
123
|
+
} else {
|
|
124
|
+
parent.append(child);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return child;
|
|
128
|
+
};
|
|
129
|
+
const isPageBreak = element => element.localName === 'lastRenderedPageBreak' || element.localName === 'br' && (0, _wordXml.wordAttribute)(element, 'type') === 'page';
|
|
130
|
+
|
|
131
|
+
// A leading inline page break otherwise produces an empty numbered fragment before the paragraph.
|
|
132
|
+
const convertLeadingPageBreaks = (source, paragraph) => {
|
|
133
|
+
const runContent = Array.from(paragraph.getElementsByTagNameNS(_wordXml.wordNamespace, 'r')).flatMap(run => Array.from(run.children).filter(child => child.localName !== 'rPr'));
|
|
134
|
+
for (const child of runContent) {
|
|
135
|
+
if (!isPageBreak(child)) {
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
const properties = ensureChild(source, paragraph, 'pPr', true);
|
|
139
|
+
ensureChild(source, properties, 'pageBreakBefore').setAttributeNS(_wordXml.wordNamespace, 'w:val', '1');
|
|
140
|
+
child.remove();
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
const applyResolvedNumbering = (source, paragraph, resolveNumbering) => {
|
|
144
|
+
const {
|
|
145
|
+
id,
|
|
146
|
+
level
|
|
147
|
+
} = resolveNumbering((0, _wordXml.wordChild)(paragraph, 'pPr'));
|
|
148
|
+
if (!id || id === '0') {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const numbering = ensureChild(source, ensureChild(source, paragraph, 'pPr', true), 'numPr');
|
|
152
|
+
ensureChild(source, numbering, 'numId').setAttributeNS(_wordXml.wordNamespace, 'w:val', id);
|
|
153
|
+
ensureChild(source, numbering, 'ilvl').setAttributeNS(_wordXml.wordNamespace, 'w:val', level);
|
|
154
|
+
};
|
|
155
|
+
const wrapPreviewDocument = html => `<!doctype html><html><head><meta charset="utf-8">
|
|
156
|
+
<meta http-equiv="Content-Security-Policy" content="${CONTENT_SECURITY_POLICY}">
|
|
157
|
+
</head><body>${html}
|
|
158
|
+
<style>body { margin: 0; } .docx-wrapper { padding: ${PAGE_GUTTER}; align-items: flex-start; }
|
|
159
|
+
.docx-wrapper > section.docx { flex-shrink: 0; margin: 0 auto ${PAGE_GUTTER}; }
|
|
160
|
+
.docx-wrapper p { text-indent: 0 !important; margin-inline-start: 0 !important; }</style>
|
|
161
|
+
</body></html>`;
|
|
162
|
+
|
|
163
|
+
/*
|
|
164
|
+
Renders a .docx file to a self-contained, sanitised HTML document for a sandboxed iframe.
|
|
165
|
+
The Word XML is patched first to fix fonts, page breaks and list numbering that docx-preview
|
|
166
|
+
would otherwise render incorrectly.
|
|
167
|
+
*/
|
|
168
|
+
const renderWordDocument = async arrayBuffer => {
|
|
169
|
+
const zip = await loadBoundedZip(arrayBuffer);
|
|
170
|
+
const source = await parseWordPart(zip, 'document');
|
|
171
|
+
if (!source) {
|
|
172
|
+
throw new Error('DOCX is missing word/document.xml.');
|
|
173
|
+
}
|
|
174
|
+
const styleDefinitions = await parseWordPart(zip, 'styles');
|
|
175
|
+
const styles = (0, _wordXml.getWordStyles)(styleDefinitions);
|
|
176
|
+
inheritLatinFonts(styleDefinitions, styles);
|
|
177
|
+
if (styleDefinitions) {
|
|
178
|
+
zip.file('word/styles.xml', new XMLSerializer().serializeToString(styleDefinitions));
|
|
179
|
+
}
|
|
180
|
+
const numberingDefinitions = await parseWordPart(zip, 'numbering');
|
|
181
|
+
const resolveNumbering = (0, _wordXml.createWordNumberingResolver)(numberingDefinitions, styles);
|
|
182
|
+
Array.from(source.getElementsByTagNameNS(_wordXml.wordNamespace, 'p')).forEach(paragraph => {
|
|
183
|
+
convertLeadingPageBreaks(source, paragraph);
|
|
184
|
+
applyResolvedNumbering(source, paragraph, resolveNumbering);
|
|
185
|
+
});
|
|
186
|
+
const numberingCss = (0, _wordPreviewNumbering.prepareWordPreviewNumbering)(numberingDefinitions, styles);
|
|
187
|
+
if (numberingDefinitions) {
|
|
188
|
+
zip.file('word/numbering.xml', new XMLSerializer().serializeToString(numberingDefinitions));
|
|
189
|
+
}
|
|
190
|
+
zip.file('word/document.xml', new XMLSerializer().serializeToString(source));
|
|
191
|
+
const container = document.createElement('div');
|
|
192
|
+
await (0, _docxPreview.renderAsync)(await zip.generateAsync({
|
|
193
|
+
type: 'arraybuffer'
|
|
194
|
+
}), container, undefined, {
|
|
195
|
+
useBase64URL: true,
|
|
196
|
+
ignoreLastRenderedPageBreak: false,
|
|
197
|
+
renderAltChunks: false
|
|
198
|
+
});
|
|
199
|
+
const numberingStyle = document.createElement('style');
|
|
200
|
+
numberingStyle.textContent = numberingCss;
|
|
201
|
+
container.append(numberingStyle);
|
|
202
|
+
container.querySelectorAll('section.docx').forEach(page => {
|
|
203
|
+
if (page.style.width) {
|
|
204
|
+
// Scale fixed-width pages down to fit narrow viewers instead of scrolling sideways.
|
|
205
|
+
page.style.setProperty('zoom', `min(1, calc((100vw - 2 * ${PAGE_GUTTER}) / ${page.style.width}))`);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
return wrapPreviewDocument(_dompurify.default.sanitize(container.innerHTML, {
|
|
209
|
+
ADD_TAGS: ['style'],
|
|
210
|
+
FORCE_BODY: true
|
|
211
|
+
}));
|
|
212
|
+
};
|
|
213
|
+
exports.renderWordDocument = renderWordDocument;
|
|
214
|
+
//# sourceMappingURL=renderWordDocument.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderWordDocument.js","names":["_docxPreview","require","_dompurify","_interopRequireDefault","_jszip","_wordPreviewNumbering","_wordXml","PAGE_GUTTER","CONTENT_SECURITY_POLICY","WORD_DOCUMENT_LIMITS","exports","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","JSZip","loadAsync","entries","Object","values","files","filter","dir","bounded","name","parseWordPart","undefined","xml","DOMParser","parseFromString","async","querySelector","hasLatinFont","fonts","Boolean","wordAttribute","inheritLatinFonts","styleDefinitions","styles","defaultFonts","getElementsByTagNameNS","wordNamespace","resolveLatinFont","styleId","visited","Set","has","add","style","byId","get","wordChild","wordValue","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","getWordStyles","XMLSerializer","serializeToString","numberingDefinitions","createWordNumberingResolver","numberingCss","prepareWordPreviewNumbering","container","document","createElement","renderAsync","generateAsync","type","useBase64URL","ignoreLastRenderedPageBreak","renderAltChunks","numberingStyle","textContent","querySelectorAll","page","width","setProperty","DOMPurify","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,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.prepareWordPreviewNumbering = void 0;
|
|
7
|
+
var _wordXml = require("./wordXml");
|
|
8
|
+
const MAX_WORD_LIST_LEVEL = 8;
|
|
9
|
+
const childElements = (element, localName) => Array.from(element.children).filter(child => child.localName === localName);
|
|
10
|
+
const setStartOverride = (numbering, level, startOverride) => {
|
|
11
|
+
let start = (0, _wordXml.wordChild)(level, 'start');
|
|
12
|
+
if (!start) {
|
|
13
|
+
start = numbering.createElementNS(_wordXml.wordNamespace, 'w:start');
|
|
14
|
+
level.prepend(start);
|
|
15
|
+
}
|
|
16
|
+
start.setAttributeNS(_wordXml.wordNamespace, 'w:val', startOverride);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/*
|
|
20
|
+
Normalises numbering definitions the preview library does not resolve (style links, level
|
|
21
|
+
overrides, restarts), then returns CSS counter rules that replace its immediate-parent-only resets.
|
|
22
|
+
Missing or cyclic definitions throw so a mis-numbered preview is never shown silently.
|
|
23
|
+
*/
|
|
24
|
+
const prepareWordPreviewNumbering = (numbering, styles) => {
|
|
25
|
+
if (!numbering) {
|
|
26
|
+
return '';
|
|
27
|
+
}
|
|
28
|
+
const nums = new Map(Array.from(numbering.getElementsByTagNameNS(_wordXml.wordNamespace, 'num')).map(element => [(0, _wordXml.wordAttribute)(element, 'numId'), element]));
|
|
29
|
+
const abstracts = new Map(Array.from(numbering.getElementsByTagNameNS(_wordXml.wordNamespace, 'abstractNum')).map(element => [(0, _wordXml.wordAttribute)(element, 'abstractNumId'), element]));
|
|
30
|
+
const resolveLevels = (id, visited = new Set()) => {
|
|
31
|
+
if (visited.has(id)) {
|
|
32
|
+
throw new Error(`Circular Word numbering style link: ${id}`);
|
|
33
|
+
}
|
|
34
|
+
visited.add(id);
|
|
35
|
+
const num = nums.get(id);
|
|
36
|
+
const abstract = abstracts.get((0, _wordXml.wordValue)(num, 'abstractNumId'));
|
|
37
|
+
if (!num || !abstract) {
|
|
38
|
+
throw new Error(`Missing Word numbering definition: ${id}`);
|
|
39
|
+
}
|
|
40
|
+
const linkedId = styles.properties((0, _wordXml.wordValue)(abstract, 'numStyleLink')).numId;
|
|
41
|
+
const levels = linkedId ? resolveLevels(linkedId, visited) : new Map();
|
|
42
|
+
childElements(abstract, 'lvl').forEach(level => {
|
|
43
|
+
levels.set(Number((0, _wordXml.wordAttribute)(level, 'ilvl')), level.cloneNode(true));
|
|
44
|
+
});
|
|
45
|
+
childElements(num, 'lvlOverride').forEach(override => {
|
|
46
|
+
const index = Number((0, _wordXml.wordAttribute)(override, 'ilvl'));
|
|
47
|
+
const definition = (0, _wordXml.wordChild)(override, 'lvl') ?? levels.get(index);
|
|
48
|
+
if (!definition) {
|
|
49
|
+
throw new Error(`Missing Word numbering definition for numId ${id}, level ${index}.`);
|
|
50
|
+
}
|
|
51
|
+
const level = definition.cloneNode(true);
|
|
52
|
+
const startOverride = (0, _wordXml.wordValue)(override, 'startOverride');
|
|
53
|
+
if (startOverride !== undefined) {
|
|
54
|
+
setStartOverride(numbering, level, startOverride);
|
|
55
|
+
}
|
|
56
|
+
levels.set(index, level);
|
|
57
|
+
});
|
|
58
|
+
return levels;
|
|
59
|
+
};
|
|
60
|
+
const resolved = Array.from(nums.keys()).map(id => {
|
|
61
|
+
if (!id || !/^\d+$/.test(id)) {
|
|
62
|
+
throw new Error(`Invalid Word numbering ID: ${id}`);
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
id,
|
|
66
|
+
levels: resolveLevels(id)
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
const initialCounters = [];
|
|
70
|
+
const rules = [];
|
|
71
|
+
let nextAbstractId = Math.max(-1, ...Array.from(abstracts.keys()).map(id => Number(id))) + 1;
|
|
72
|
+
resolved.forEach(({
|
|
73
|
+
id,
|
|
74
|
+
levels
|
|
75
|
+
}) => {
|
|
76
|
+
const abstract = numbering.createElementNS(_wordXml.wordNamespace, 'w:abstractNum');
|
|
77
|
+
const abstractId = String(nextAbstractId);
|
|
78
|
+
nextAbstractId += 1;
|
|
79
|
+
abstract.setAttributeNS(_wordXml.wordNamespace, 'w:abstractNumId', abstractId);
|
|
80
|
+
const definitions = Array.from(levels).sort(([first], [second]) => first - second).map(([index, level]) => {
|
|
81
|
+
const start = Number((0, _wordXml.wordValue)(level, 'start') ?? 1);
|
|
82
|
+
const restart = Number((0, _wordXml.wordValue)(level, 'lvlRestart') ?? index);
|
|
83
|
+
const isValidLevel = Number.isInteger(index) && index >= 0 && index <= MAX_WORD_LIST_LEVEL;
|
|
84
|
+
if (!isValidLevel || !Number.isSafeInteger(start) || !Number.isInteger(restart) || restart < 0 || restart > index) {
|
|
85
|
+
throw new Error(`Invalid Word numbering properties for numId ${id}, level ${index}.`);
|
|
86
|
+
}
|
|
87
|
+
level.setAttributeNS(_wordXml.wordNamespace, 'w:ilvl', String(index));
|
|
88
|
+
abstract.append(level);
|
|
89
|
+
const counter = `docx-num-${id}-${index} ${start - 1}`;
|
|
90
|
+
initialCounters.push(counter);
|
|
91
|
+
return {
|
|
92
|
+
index,
|
|
93
|
+
restart,
|
|
94
|
+
counter
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
numbering.documentElement.append(abstract);
|
|
98
|
+
(0, _wordXml.wordChild)(nums.get(id), 'abstractNumId')?.setAttributeNS(_wordXml.wordNamespace, 'w:val', abstractId);
|
|
99
|
+
definitions.forEach(({
|
|
100
|
+
index
|
|
101
|
+
}) => {
|
|
102
|
+
const resets = definitions.filter(deeper => deeper.index > index && deeper.restart > index).map(deeper => deeper.counter);
|
|
103
|
+
rules.push(`p.docx-num-${id}-${index} { counter-set: ${resets.join(' ') || 'none'}; }`);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
if (initialCounters.length) {
|
|
107
|
+
rules.unshift(`.docx-wrapper { counter-reset: ${initialCounters.join(' ')}; }`);
|
|
108
|
+
}
|
|
109
|
+
return rules.join('\n');
|
|
110
|
+
};
|
|
111
|
+
exports.prepareWordPreviewNumbering = prepareWordPreviewNumbering;
|
|
112
|
+
//# sourceMappingURL=wordPreviewNumbering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wordPreviewNumbering.js","names":["_wordXml","require","MAX_WORD_LIST_LEVEL","childElements","element","localName","Array","from","children","filter","child","setStartOverride","numbering","level","startOverride","start","wordChild","createElementNS","wordNamespace","prepend","setAttributeNS","prepareWordPreviewNumbering","styles","nums","Map","getElementsByTagNameNS","map","wordAttribute","abstracts","resolveLevels","id","visited","Set","has","Error","add","num","get","abstract","wordValue","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","exports"],"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,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.wordValue = exports.wordNamespace = exports.wordChild = exports.wordAttribute = exports.getWordStyles = exports.createWordNumberingResolver = void 0;
|
|
7
|
+
const wordNamespace = exports.wordNamespace = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';
|
|
8
|
+
const wordChild = (element, name) => Array.from(element?.children ?? []).find(item => item.namespaceURI === wordNamespace && item.localName === name);
|
|
9
|
+
exports.wordChild = wordChild;
|
|
10
|
+
const wordAttribute = (element, name = 'val') => element?.getAttributeNS(wordNamespace, name) ?? undefined;
|
|
11
|
+
exports.wordAttribute = wordAttribute;
|
|
12
|
+
const wordValue = (element, name) => wordAttribute(wordChild(element, name));
|
|
13
|
+
exports.wordValue = wordValue;
|
|
14
|
+
const isWordFalse = value => ['0', 'false', 'off'].includes(value ?? '');
|
|
15
|
+
const getWordStyles = styles => {
|
|
16
|
+
const styleElements = Array.from(styles?.getElementsByTagNameNS(wordNamespace, 'style') ?? []);
|
|
17
|
+
const byId = new Map(styleElements.map(style => [wordAttribute(style, 'styleId'), style]));
|
|
18
|
+
const properties = (id, visited = new Set()) => {
|
|
19
|
+
if (!id) {
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
if (visited.has(id)) {
|
|
23
|
+
throw new Error(`Circular Word style inheritance: ${id}`);
|
|
24
|
+
}
|
|
25
|
+
visited.add(id);
|
|
26
|
+
const style = byId.get(id);
|
|
27
|
+
const inherited = properties(wordValue(style, 'basedOn'), visited);
|
|
28
|
+
const paragraph = wordChild(style, 'pPr');
|
|
29
|
+
const numbering = wordChild(paragraph, 'numPr');
|
|
30
|
+
const bold = wordChild(wordChild(style, 'rPr'), 'b');
|
|
31
|
+
return {
|
|
32
|
+
numId: wordValue(numbering, 'numId') ?? inherited.numId,
|
|
33
|
+
level: wordValue(numbering, 'ilvl') ?? inherited.level,
|
|
34
|
+
outline: wordValue(paragraph, 'outlineLvl') ?? inherited.outline,
|
|
35
|
+
// Word toggles bold relative to the inherited style rather than setting it absolutely.
|
|
36
|
+
bold: bold && !isWordFalse(wordAttribute(bold)) ? !inherited.bold : inherited.bold
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
return {
|
|
40
|
+
byId,
|
|
41
|
+
properties
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
exports.getWordStyles = getWordStyles;
|
|
45
|
+
const createWordNumberingResolver = (numbering, styles) => {
|
|
46
|
+
const numElements = Array.from(numbering?.getElementsByTagNameNS(wordNamespace, 'num') ?? []);
|
|
47
|
+
const nums = new Map(numElements.map(num => [wordAttribute(num, 'numId'), num]));
|
|
48
|
+
const activeInstances = new Map();
|
|
49
|
+
return paragraphProperties => {
|
|
50
|
+
const inherited = styles.properties(wordValue(paragraphProperties, 'pStyle'));
|
|
51
|
+
const numberingProperties = wordChild(paragraphProperties, 'numPr');
|
|
52
|
+
const explicitId = wordValue(numberingProperties, 'numId');
|
|
53
|
+
const inheritedAbstract = wordValue(nums.get(inherited.numId), 'abstractNumId');
|
|
54
|
+
const restartsInheritedList = explicitId && explicitId !== '0' && inherited.numId && inheritedAbstract && wordValue(nums.get(explicitId), 'abstractNumId') === inheritedAbstract;
|
|
55
|
+
if (restartsInheritedList && inherited.numId) {
|
|
56
|
+
// A restarted instance also governs following items that inherit the base list style.
|
|
57
|
+
activeInstances.set(inherited.numId, explicitId);
|
|
58
|
+
}
|
|
59
|
+
const inheritedId = inherited.numId ? activeInstances.get(inherited.numId) ?? inherited.numId : undefined;
|
|
60
|
+
return {
|
|
61
|
+
id: explicitId ?? inheritedId,
|
|
62
|
+
level: wordValue(numberingProperties, 'ilvl') ?? inherited.level ?? '0',
|
|
63
|
+
inherited
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
exports.createWordNumberingResolver = createWordNumberingResolver;
|
|
68
|
+
//# sourceMappingURL=wordXml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wordXml.js","names":["wordNamespace","exports","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":";;;;;;AAAO,MAAMA,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG,8DAA8D;AAEpF,MAAME,SAAS,GAAGA,CAACC,OAA4B,EAAEC,IAAY,KAClEC,KAAK,CAACC,IAAI,CAACH,OAAO,EAAEI,QAAQ,IAAI,EAAE,CAAC,CAACC,IAAI,CAAEC,IAAI,IAAKA,IAAI,CAACC,YAAY,KAAKV,aAAa,IAAIS,IAAI,CAACE,SAAS,KAAKP,IAAI,CAAC;AAACH,OAAA,CAAAC,SAAA,GAAAA,SAAA;AAE9G,MAAMU,aAAa,GAAGA,CAACT,OAA4B,EAAEC,IAAI,GAAG,KAAK,KACtED,OAAO,EAAEU,cAAc,CAACb,aAAa,EAAEI,IAAI,CAAC,IAAIU,SAAS;AAACb,OAAA,CAAAW,aAAA,GAAAA,aAAA;AAErD,MAAMG,SAAS,GAAGA,CAACZ,OAA4B,EAAEC,IAAY,KAAyBQ,aAAa,CAACV,SAAS,CAACC,OAAO,EAAEC,IAAI,CAAC,CAAC;AAACH,OAAA,CAAAc,SAAA,GAAAA,SAAA;AAerI,MAAMC,WAAW,GAAIC,KAAyB,IAAc,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAACC,QAAQ,CAACD,KAAK,IAAI,EAAE,CAAC;AAEhG,MAAME,aAAa,GAAIC,MAA4B,IAAiB;EACzE,MAAMC,aAAa,GAAGhB,KAAK,CAACC,IAAI,CAACc,MAAM,EAAEE,sBAAsB,CAACtB,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;EAC9F,MAAMuB,IAAI,GAAG,IAAIC,GAAG,CAACH,aAAa,CAACI,GAAG,CAAEC,KAAK,IAAK,CAACd,aAAa,CAACc,KAAK,EAAE,SAAS,CAAC,EAAEA,KAAK,CAAC,CAAC,CAAC;EAE5F,MAAMC,UAAU,GAAGA,CAACC,EAAsB,EAAEC,OAAO,GAAG,IAAIC,GAAG,CAAS,CAAC,KAA0B;IAC/F,IAAI,CAACF,EAAE,EAAE;MACP,OAAO,CAAC,CAAC;IACX;IACA,IAAIC,OAAO,CAACE,GAAG,CAACH,EAAE,CAAC,EAAE;MACnB,MAAM,IAAII,KAAK,CAAC,oCAAqCJ,EAAE,EAAG,CAAC;IAC7D;IACAC,OAAO,CAACI,GAAG,CAACL,EAAE,CAAC;IACf,MAAMF,KAAK,GAAGH,IAAI,CAACW,GAAG,CAACN,EAAE,CAAC;IAC1B,MAAMO,SAAS,GAAGR,UAAU,CAACZ,SAAS,CAACW,KAAK,EAAE,SAAS,CAAC,EAAEG,OAAO,CAAC;IAClE,MAAMO,SAAS,GAAGlC,SAAS,CAACwB,KAAK,EAAE,KAAK,CAAC;IACzC,MAAMW,SAAS,GAAGnC,SAAS,CAACkC,SAAS,EAAE,OAAO,CAAC;IAC/C,MAAME,IAAI,GAAGpC,SAAS,CAACA,SAAS,CAACwB,KAAK,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC;IACpD,OAAO;MACLa,KAAK,EAAExB,SAAS,CAACsB,SAAS,EAAE,OAAO,CAAC,IAAIF,SAAS,CAACI,KAAK;MACvDC,KAAK,EAAEzB,SAAS,CAACsB,SAAS,EAAE,MAAM,CAAC,IAAIF,SAAS,CAACK,KAAK;MACtDC,OAAO,EAAE1B,SAAS,CAACqB,SAAS,EAAE,YAAY,CAAC,IAAID,SAAS,CAACM,OAAO;MAChE;MACAH,IAAI,EAAEA,IAAI,IAAI,CAACtB,WAAW,CAACJ,aAAa,CAAC0B,IAAI,CAAC,CAAC,GAAG,CAACH,SAAS,CAACG,IAAI,GAAGH,SAAS,CAACG;IAChF,CAAC;EACH,CAAC;EAED,OAAO;IAAEf,IAAI;IAAEI;EAAW,CAAC;AAC7B,CAAC;AAAC1B,OAAA,CAAAkB,aAAA,GAAAA,aAAA;AAEK,MAAMuB,2BAA2B,GAAGA,CAACL,SAA+B,EAAEjB,MAAkB,KAAK;EAClG,MAAMuB,WAAW,GAAGtC,KAAK,CAACC,IAAI,CAAC+B,SAAS,EAAEf,sBAAsB,CAACtB,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;EAC7F,MAAM4C,IAAI,GAAG,IAAIpB,GAAG,CAACmB,WAAW,CAAClB,GAAG,CAAEoB,GAAG,IAAK,CAACjC,aAAa,CAACiC,GAAG,EAAE,OAAO,CAAC,EAAEA,GAAG,CAAC,CAAC,CAAC;EAClF,MAAMC,eAAe,GAAG,IAAItB,GAAG,CAAiB,CAAC;EAEjD,OAAQuB,mBAAwC,IAAK;IACnD,MAAMZ,SAAS,GAAGf,MAAM,CAACO,UAAU,CAACZ,SAAS,CAACgC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IAC7E,MAAMC,mBAAmB,GAAG9C,SAAS,CAAC6C,mBAAmB,EAAE,OAAO,CAAC;IACnE,MAAME,UAAU,GAAGlC,SAAS,CAACiC,mBAAmB,EAAE,OAAO,CAAC;IAC1D,MAAME,iBAAiB,GAAGnC,SAAS,CAAC6B,IAAI,CAACV,GAAG,CAACC,SAAS,CAACI,KAAK,CAAC,EAAE,eAAe,CAAC;IAC/E,MAAMY,qBAAqB,GAAGF,UAAU,IACnCA,UAAU,KAAK,GAAG,IAClBd,SAAS,CAACI,KAAK,IACfW,iBAAiB,IACjBnC,SAAS,CAAC6B,IAAI,CAACV,GAAG,CAACe,UAAU,CAAC,EAAE,eAAe,CAAC,KAAKC,iBAAiB;IAC3E,IAAIC,qBAAqB,IAAIhB,SAAS,CAACI,KAAK,EAAE;MAC5C;MACAO,eAAe,CAACM,GAAG,CAACjB,SAAS,CAACI,KAAK,EAAEU,UAAU,CAAC;IAClD;IACA,MAAMI,WAAW,GAAGlB,SAAS,CAACI,KAAK,GAAGO,eAAe,CAACZ,GAAG,CAACC,SAAS,CAACI,KAAK,CAAC,IAAIJ,SAAS,CAACI,KAAK,GAAGzB,SAAS;IACzG,OAAO;MACLc,EAAE,EAAEqB,UAAU,IAAII,WAAW;MAC7Bb,KAAK,EAAEzB,SAAS,CAACiC,mBAAmB,EAAE,MAAM,CAAC,IAAIb,SAAS,CAACK,KAAK,IAAI,GAAG;MACvEL;IACF,CAAC;EACH,CAAC;AACH,CAAC;AAAClC,OAAA,CAAAyC,2BAAA,GAAAA,2BAAA","ignoreList":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "fetchDocumentAsArrayBuffer", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _documentHelpers.fetchDocumentAsArrayBuffer;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "fetchDocumentAsText", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _documentHelpers.fetchDocumentAsText;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "getDocumentExtension", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _documentHelpers.getDocumentExtension;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "getDocumentFileName", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _documentHelpers.getDocumentFileName;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "getDocumentKind", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return _documentHelpers.getDocumentKind;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "resolveDocumentResource", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function () {
|
|
39
|
+
return _documentHelpers.resolveDocumentResource;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "useDocumentContent", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function () {
|
|
45
|
+
return _useDocumentContent.useDocumentContent;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
var _documentHelpers = require("./documentHelpers");
|
|
49
|
+
var _useDocumentContent = require("./useDocumentContent");
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_documentHelpers","require","_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,IAAAA,gBAAA,GAAAC,OAAA;AAQA,IAAAC,mBAAA,GAAAD,OAAA","ignoreList":[]}
|