@x15ventures/x15-ui-library 3.19.0 → 3.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkdownRenderer.js","names":["_react","_interopRequireWildcard","require","_reactMarkdown","_remarkGfm","_interopRequireDefault","_documentHelpers","_plugins","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","remarkPlugins","remarkGfm","remarkLineBreaks","remarkParagraphBreaks","remarkLayoutTables","remarkTableCellLists","remarkSafeTables","rehypePlugins","rehypeTableCleanup","headingTags","rehypeFootnoteLabel","labelId","tree","visit","node","properties","id","dataFootnoteRef","ariaDescribedBy","children","forEach","getHeadingComponents","headingOffset","undefined","fromEntries","map","tag","index","level","HeadingComponent","_node","props","createElement","_extends2","role","MarkdownRenderer","markdown","resolveResourceUrl","cssClass","components","useMemo","footnoteId","useId","scopedRehypePlugins","className","trim","remarkRehypeOptions","clobberPrefix","urlTransform","url","key","resolved","tagName","vetted","resolveDocumentResource","test","defaultUrlTransform","exports","_default"],"sources":["../../../../../../../src/widgets/shared/documents/engines/markdownRenderer/MarkdownRenderer.tsx"],"sourcesContent":["import React, { createElement, FC, useId, useMemo } from 'react';\nimport ReactMarkdown, { Components, defaultUrlTransform, Options } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\n\nimport { resolveDocumentResource } from '../../documentHelpers';\nimport { ResolveResourceUrl } from '../../documents.interfaces';\nimport {\n rehypeTableCleanup,\n remarkLayoutTables,\n remarkLineBreaks,\n remarkParagraphBreaks,\n remarkSafeTables,\n remarkTableCellLists\n} from './plugins';\nimport { MarkdownNode, MarkdownTransformer } from './plugins/markdownNode.interfaces';\n\nimport './markdownRenderer.scss';\n\nexport type MarkdownRendererProps = {\n markdown: string;\n // Demote headings so an embedded document sits beneath the host page's own heading.\n headingOffset?: number;\n resolveResourceUrl?: ResolveResourceUrl;\n cssClass?: string;\n};\n\nconst remarkPlugins = [\n remarkGfm,\n remarkLineBreaks,\n remarkParagraphBreaks,\n remarkLayoutTables,\n remarkTableCellLists,\n remarkSafeTables\n] as Options['remarkPlugins'];\nconst rehypePlugins = [rehypeTableCleanup] as Options['rehypePlugins'];\nconst headingTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const;\n\n// mdast-util-to-hast prefixes footnote targets but leaves the shared label ID unprefixed.\nconst rehypeFootnoteLabel = (labelId: string): MarkdownTransformer => (tree) => {\n const visit = (node: MarkdownNode) => {\n if (node.properties?.id === 'footnote-label') {\n node.properties.id = labelId;\n }\n if (node.properties?.dataFootnoteRef) {\n node.properties.ariaDescribedBy = [labelId];\n }\n node.children?.forEach(visit);\n };\n visit(tree);\n};\n\nconst getHeadingComponents = (headingOffset: number): Components | undefined => {\n if (headingOffset <= 0) {\n return undefined;\n }\n return Object.fromEntries(headingTags.map((tag, index) => {\n const level = index + 1 + headingOffset;\n const HeadingComponent: FC<React.HTMLAttributes<HTMLHeadingElement> & { node?: unknown }> = (\n // `node` is react-markdown's AST node; it is removed so it is not written to the DOM.\n /* eslint-disable-next-line no-unused-vars */\n { node: _node, ...props }\n ) => (level <= 6\n ? createElement(`h${ level }`, props)\n : <div { ...props } role=\"heading\" aria-level={ level } />);\n return [tag, HeadingComponent];\n })) as Components;\n};\n\nexport const MarkdownRenderer: FC<MarkdownRendererProps> = (\n {\n markdown,\n headingOffset = 0,\n resolveResourceUrl,\n cssClass = ''\n }\n) => {\n const components = useMemo(() => getHeadingComponents(headingOffset), [headingOffset]);\n const footnoteId = useId();\n const scopedRehypePlugins = useMemo(() => [\n ...rehypePlugins ?? [],\n [rehypeFootnoteLabel, `document-${ footnoteId }-footnote-label`]\n ] as Options['rehypePlugins'], [footnoteId]);\n\n return (\n <div className={ `markdownRenderer ${ cssClass }`.trim() }>\n <ReactMarkdown\n remarkPlugins={ remarkPlugins }\n rehypePlugins={ scopedRehypePlugins }\n remarkRehypeOptions={ { clobberPrefix: `document-${ footnoteId }-` } }\n components={ components }\n urlTransform={ (url, key, node) => {\n // react-markdown visits final HAST, including children injected by remarkSafeTables.\n const resolved = resolveResourceUrl ? resolveResourceUrl(url) ?? '' : url;\n if (key === 'src' && node.tagName === 'img') {\n const vetted = resolveDocumentResource(resolved);\n if (/^(?:blob:|data:)/i.test(vetted)) {\n return vetted;\n }\n }\n return defaultUrlTransform(resolved);\n } }\n >\n { markdown }\n </ReactMarkdown>\n </div>\n );\n};\n\nexport default MarkdownRenderer;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/_markdownRendererVariables.css
ADDED
|
File without changes
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
.markdownRenderer {
|
|
2
|
+
padding: var(--markdownRendererPadding, var(--documentPadding, 30px));
|
|
3
|
+
max-width: var(--markdownRendererMaxWidth, 920px);
|
|
4
|
+
font-family: var(--documentFont);
|
|
5
|
+
color: var(--documentFgColor);
|
|
6
|
+
}
|
|
7
|
+
.markdownRenderer h1,
|
|
8
|
+
.markdownRenderer h2,
|
|
9
|
+
.markdownRenderer h3,
|
|
10
|
+
.markdownRenderer h4,
|
|
11
|
+
.markdownRenderer h5,
|
|
12
|
+
.markdownRenderer h6,
|
|
13
|
+
.markdownRenderer [role=heading] {
|
|
14
|
+
margin: var(--markdownRendererHeadingMargin, 25px 0 10px);
|
|
15
|
+
font-family: var(--documentHeadingFont);
|
|
16
|
+
}
|
|
17
|
+
.markdownRenderer h1:first-child,
|
|
18
|
+
.markdownRenderer h2:first-child,
|
|
19
|
+
.markdownRenderer h3:first-child,
|
|
20
|
+
.markdownRenderer h4:first-child,
|
|
21
|
+
.markdownRenderer h5:first-child,
|
|
22
|
+
.markdownRenderer h6:first-child,
|
|
23
|
+
.markdownRenderer [role=heading]:first-child {
|
|
24
|
+
margin-top: 0;
|
|
25
|
+
}
|
|
26
|
+
.markdownRenderer p,
|
|
27
|
+
.markdownRenderer li {
|
|
28
|
+
line-height: var(--markdownRendererLineHeight, 1.6);
|
|
29
|
+
}
|
|
30
|
+
.markdownRenderer table {
|
|
31
|
+
width: 100%;
|
|
32
|
+
border-collapse: collapse;
|
|
33
|
+
margin: var(--markdownRendererTableMargin, 20px 0);
|
|
34
|
+
}
|
|
35
|
+
.markdownRenderer th,
|
|
36
|
+
.markdownRenderer td {
|
|
37
|
+
border: var(--markdownRendererCellBorder, var(--documentBorder));
|
|
38
|
+
padding: var(--markdownRendererCellPadding, 10px);
|
|
39
|
+
vertical-align: top;
|
|
40
|
+
}
|
|
41
|
+
.markdownRenderer th {
|
|
42
|
+
background: var(--markdownRendererTableHeaderBg, var(--documentSubtleBg));
|
|
43
|
+
text-align: left;
|
|
44
|
+
}
|
|
45
|
+
.markdownRenderer td ul {
|
|
46
|
+
margin: 5px 0;
|
|
47
|
+
padding-left: 20px;
|
|
48
|
+
}
|
|
49
|
+
.markdownRenderer td li + li {
|
|
50
|
+
margin-top: 5px;
|
|
51
|
+
}
|
|
52
|
+
.markdownRenderer table.layoutTable > :is(thead, tbody, tfoot) > tr > :is(th, td):first-child:not(:last-child) {
|
|
53
|
+
min-width: var(--markdownRendererLayoutLabelMinWidth, clamp(100px, 20vw, 150px));
|
|
54
|
+
}
|
|
55
|
+
.markdownRenderer th.shortTableCell,
|
|
56
|
+
.markdownRenderer td.shortTableCell {
|
|
57
|
+
white-space: nowrap;
|
|
58
|
+
}
|
|
59
|
+
@media (max-width: 600px) {
|
|
60
|
+
.markdownRenderer th.shortTableCell,
|
|
61
|
+
.markdownRenderer td.shortTableCell {
|
|
62
|
+
white-space: normal;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
.markdownRenderer code {
|
|
66
|
+
background: var(--markdownRendererCodeBg, var(--documentSubtleBg));
|
|
67
|
+
border-radius: var(--documentBorderRadius);
|
|
68
|
+
padding: 0 5px;
|
|
69
|
+
}
|
|
70
|
+
.markdownRenderer pre code {
|
|
71
|
+
display: block;
|
|
72
|
+
padding: 10px;
|
|
73
|
+
overflow-x: auto;
|
|
74
|
+
}
|
|
75
|
+
.markdownRenderer img {
|
|
76
|
+
max-width: 100%;
|
|
77
|
+
height: auto;
|
|
78
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "LAYOUT_TABLE_MARKER", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _tableHelpers.LAYOUT_TABLE_MARKER;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "hasMeaningfulTableText", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _tableHelpers.hasMeaningfulTableText;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "isLikelyLayoutTable", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _tableHelpers.isLikelyLayoutTable;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "rehypeTableCleanup", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _rehypeTableCleanup.rehypeTableCleanup;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "remarkLayoutTables", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return _remarkPlugins.remarkLayoutTables;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "remarkLineBreaks", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function () {
|
|
39
|
+
return _remarkPlugins.remarkLineBreaks;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "remarkParagraphBreaks", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function () {
|
|
45
|
+
return _remarkPlugins.remarkParagraphBreaks;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
Object.defineProperty(exports, "remarkSafeTables", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
get: function () {
|
|
51
|
+
return _remarkSafeTables.remarkSafeTables;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(exports, "remarkTableCellLists", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _remarkPlugins.remarkTableCellLists;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
var _remarkPlugins = require("./remarkPlugins");
|
|
61
|
+
var _remarkSafeTables = require("./remarkSafeTables");
|
|
62
|
+
var _rehypeTableCleanup = require("./rehypeTableCleanup");
|
|
63
|
+
var _tableHelpers = require("./tableHelpers");
|
|
64
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_remarkPlugins","require","_remarkSafeTables","_rehypeTableCleanup","_tableHelpers"],"sources":["../../../../../../../../src/widgets/shared/documents/engines/markdownRenderer/plugins/index.ts"],"sourcesContent":["export {\n remarkLayoutTables,\n remarkLineBreaks,\n remarkParagraphBreaks,\n remarkTableCellLists\n} from './remarkPlugins';\nexport { remarkSafeTables } from './remarkSafeTables';\nexport { rehypeTableCleanup } from './rehypeTableCleanup';\nexport { hasMeaningfulTableText, isLikelyLayoutTable, LAYOUT_TABLE_MARKER } from './tableHelpers';\nexport type { LayoutTableCell } from './tableHelpers';\nexport type { MarkdownNode, MarkdownTransformer } from './markdownNode.interfaces';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAMA,IAAAC,iBAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdownNode.interfaces.js","names":[],"sources":["../../../../../../../../src/widgets/shared/documents/engines/markdownRenderer/plugins/markdownNode.interfaces.ts"],"sourcesContent":["// Minimal structural view of mdast/hast nodes; the plugins only need these fields, which keeps\n// them free of the unified type packages.\nexport type MarkdownNode = {\n type: string;\n value?: string;\n tagName?: string;\n properties?: Record<string, unknown>;\n children?: MarkdownNode[];\n data?: {\n hName?: string;\n hProperties?: Record<string, unknown> & { className?: string[] };\n hChildren?: unknown[];\n };\n};\n\n/* eslint-disable-next-line no-unused-vars */\nexport type MarkdownTransformer = (tree: MarkdownNode) => void;\n"],"mappings":"","ignoreList":[]}
|
package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.rehypeTableCleanup = void 0;
|
|
7
|
+
var _tableHelpers = require("./tableHelpers");
|
|
8
|
+
const SHORT_TABLE_CELL_MAX_LENGTH = 20;
|
|
9
|
+
const inlineTags = new Set(['strong', 'em', 'b', 'i', 'u', 'del', 's', 'code', 'a', 'span']);
|
|
10
|
+
const mediaTags = ['img', 'svg', 'video', 'audio', 'canvas'];
|
|
11
|
+
const getInlineText = node => {
|
|
12
|
+
if (node.type === 'text') {
|
|
13
|
+
return node.value ?? '';
|
|
14
|
+
}
|
|
15
|
+
if (node.type !== 'element' || !inlineTags.has(node.tagName ?? '')) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const parts = node.children?.map(getInlineText) ?? [];
|
|
19
|
+
return parts.some(part => part === undefined) ? undefined : parts.join('');
|
|
20
|
+
};
|
|
21
|
+
const getClassNames = className => {
|
|
22
|
+
if (Array.isArray(className)) {
|
|
23
|
+
return className;
|
|
24
|
+
}
|
|
25
|
+
return typeof className === 'string' ? className.split(/\s+/) : [];
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// Short cells (labels, codes, dates) are kept on one line rather than wrapping awkwardly.
|
|
29
|
+
const markShortCell = cell => {
|
|
30
|
+
const parts = cell.children?.map(getInlineText) ?? [];
|
|
31
|
+
if (parts.some(part => part === undefined)) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const text = parts.join('').replace(/\s+/g, ' ').trim();
|
|
35
|
+
if (!text || text.length > SHORT_TABLE_CELL_MAX_LENGTH) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const className = [...new Set([...getClassNames(cell.properties?.className), 'shortTableCell'])];
|
|
39
|
+
cell.properties = {
|
|
40
|
+
...cell.properties,
|
|
41
|
+
className
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
const hasContent = node => node.type === 'text' && (0, _tableHelpers.hasMeaningfulTableText)(node.value ?? '') || node.type === 'element' && mediaTags.includes(node.tagName ?? '') || Boolean(node.children?.some(hasContent));
|
|
45
|
+
const isCell = node => node.tagName === 'td' || node.tagName === 'th';
|
|
46
|
+
const getCells = node => isCell(node) ? [node] : node.children?.flatMap(getCells) ?? [];
|
|
47
|
+
|
|
48
|
+
// Removes tables and table headers that converters emit with no visible content.
|
|
49
|
+
const rehypeTableCleanup = () => {
|
|
50
|
+
const transform = parent => {
|
|
51
|
+
if (isCell(parent)) {
|
|
52
|
+
markShortCell(parent);
|
|
53
|
+
}
|
|
54
|
+
if (!parent.children) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
parent.children = parent.children.filter(node => {
|
|
58
|
+
if (node.tagName === 'table' && !getCells(node).some(hasContent)) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
if (parent.tagName === 'table' && node.tagName === 'thead' && !getCells(node).some(hasContent)) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
transform(node);
|
|
65
|
+
return true;
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
return transform;
|
|
69
|
+
};
|
|
70
|
+
exports.rehypeTableCleanup = rehypeTableCleanup;
|
|
71
|
+
//# sourceMappingURL=rehypeTableCleanup.js.map
|
package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rehypeTableCleanup.js","names":["_tableHelpers","require","SHORT_TABLE_CELL_MAX_LENGTH","inlineTags","Set","mediaTags","getInlineText","node","type","value","has","tagName","undefined","parts","children","map","some","part","join","getClassNames","className","Array","isArray","split","markShortCell","cell","text","replace","trim","length","properties","hasContent","hasMeaningfulTableText","includes","Boolean","isCell","getCells","flatMap","rehypeTableCleanup","transform","parent","filter","exports"],"sources":["../../../../../../../../src/widgets/shared/documents/engines/markdownRenderer/plugins/rehypeTableCleanup.ts"],"sourcesContent":["import { hasMeaningfulTableText } from './tableHelpers';\nimport { MarkdownNode, MarkdownTransformer } from './markdownNode.interfaces';\n\nconst SHORT_TABLE_CELL_MAX_LENGTH = 20;\nconst inlineTags = new Set(['strong', 'em', 'b', 'i', 'u', 'del', 's', 'code', 'a', 'span']);\nconst mediaTags = ['img', 'svg', 'video', 'audio', 'canvas'];\n\nconst getInlineText = (node: MarkdownNode): string | undefined => {\n if (node.type === 'text') {\n return node.value ?? '';\n }\n if (node.type !== 'element' || !inlineTags.has(node.tagName ?? '')) {\n return undefined;\n }\n const parts = node.children?.map(getInlineText) ?? [];\n return parts.some((part) => part === undefined) ? undefined : parts.join('');\n};\n\nconst getClassNames = (className: unknown): string[] => {\n if (Array.isArray(className)) {\n return className as string[];\n }\n return typeof className === 'string' ? className.split(/\\s+/) : [];\n};\n\n// Short cells (labels, codes, dates) are kept on one line rather than wrapping awkwardly.\nconst markShortCell = (cell: MarkdownNode): void => {\n const parts = cell.children?.map(getInlineText) ?? [];\n if (parts.some((part) => part === undefined)) {\n return;\n }\n const text = parts.join('').replace(/\\s+/g, ' ').trim();\n if (!text || text.length > SHORT_TABLE_CELL_MAX_LENGTH) {\n return;\n }\n const className = [...new Set([...getClassNames(cell.properties?.className), 'shortTableCell'])];\n cell.properties = { ...cell.properties, className };\n};\n\nconst hasContent = (node: MarkdownNode): boolean =>\n (node.type === 'text' && hasMeaningfulTableText(node.value ?? ''))\n || (node.type === 'element' && mediaTags.includes(node.tagName ?? ''))\n || Boolean(node.children?.some(hasContent));\n\nconst isCell = (node: MarkdownNode): boolean => node.tagName === 'td' || node.tagName === 'th';\n\nconst getCells = (node: MarkdownNode): MarkdownNode[] => (isCell(node) ? [node] : node.children?.flatMap(getCells) ?? []);\n\n// Removes tables and table headers that converters emit with no visible content.\nexport const rehypeTableCleanup = (): MarkdownTransformer => {\n const transform = (parent: MarkdownNode): void => {\n if (isCell(parent)) {\n markShortCell(parent);\n }\n if (!parent.children) {\n return;\n }\n parent.children = parent.children.filter((node) => {\n if (node.tagName === 'table' && !getCells(node).some(hasContent)) {\n return false;\n }\n if (parent.tagName === 'table' && node.tagName === 'thead' && !getCells(node).some(hasContent)) {\n return false;\n }\n transform(node);\n return true;\n });\n };\n return transform;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.remarkTableCellLists = exports.remarkParagraphBreaks = exports.remarkLineBreaks = exports.remarkLayoutTables = void 0;
|
|
7
|
+
var _tableHelpers = require("./tableHelpers");
|
|
8
|
+
const getText = node => node.value ?? node.children?.map(getText).join(' ') ?? '';
|
|
9
|
+
|
|
10
|
+
// Converted documents use `<br>` for line breaks; without raw HTML support they would vanish.
|
|
11
|
+
const remarkLineBreaks = () => {
|
|
12
|
+
const transform = node => {
|
|
13
|
+
if (node.type === 'html' && /^<br\s*\/?>$/i.test(node.value?.trim() ?? '')) {
|
|
14
|
+
node.type = 'break';
|
|
15
|
+
delete node.value;
|
|
16
|
+
}
|
|
17
|
+
node.children?.forEach(transform);
|
|
18
|
+
};
|
|
19
|
+
return transform;
|
|
20
|
+
};
|
|
21
|
+
exports.remarkLineBreaks = remarkLineBreaks;
|
|
22
|
+
const splitInlineContent = nodes => {
|
|
23
|
+
const paragraphs = [[]];
|
|
24
|
+
nodes.forEach(node => {
|
|
25
|
+
let segments;
|
|
26
|
+
if (node.type === 'text') {
|
|
27
|
+
segments = (node.value ?? '').split(/\r?\n/).map(value => [{
|
|
28
|
+
...node,
|
|
29
|
+
value
|
|
30
|
+
}]);
|
|
31
|
+
} else if (node.children) {
|
|
32
|
+
segments = splitInlineContent(node.children).map(children => [{
|
|
33
|
+
...node,
|
|
34
|
+
children
|
|
35
|
+
}]);
|
|
36
|
+
} else {
|
|
37
|
+
segments = [[node]];
|
|
38
|
+
}
|
|
39
|
+
segments.forEach((segment, index) => {
|
|
40
|
+
if (index > 0) {
|
|
41
|
+
paragraphs.push([]);
|
|
42
|
+
}
|
|
43
|
+
paragraphs[paragraphs.length - 1].push(...segment);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
return paragraphs;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// Source documents treat each line as its own paragraph, whereas markdown joins adjacent lines.
|
|
50
|
+
const remarkParagraphBreaks = () => {
|
|
51
|
+
const transform = parent => {
|
|
52
|
+
if (!parent.children || ['list', 'listItem', 'table', 'tableCell'].includes(parent.type)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
parent.children = parent.children.flatMap(node => {
|
|
56
|
+
if (node.type === 'paragraph') {
|
|
57
|
+
return splitInlineContent(node.children ?? []).map(children => ({
|
|
58
|
+
...node,
|
|
59
|
+
children
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
transform(node);
|
|
63
|
+
return [node];
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
return transform;
|
|
67
|
+
};
|
|
68
|
+
exports.remarkParagraphBreaks = remarkParagraphBreaks;
|
|
69
|
+
const markLayoutTable = node => {
|
|
70
|
+
const properties = node.data?.hProperties ?? {};
|
|
71
|
+
const className = [...new Set([...(properties.className ?? []), 'layoutTable'])];
|
|
72
|
+
node.data = {
|
|
73
|
+
...node.data,
|
|
74
|
+
hProperties: {
|
|
75
|
+
...properties,
|
|
76
|
+
className
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
const remarkLayoutTables = () => {
|
|
81
|
+
const transform = parent => {
|
|
82
|
+
if (!parent.children) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
parent.children = parent.children.filter((node, index, siblings) => {
|
|
86
|
+
const isMarker = node.type === 'html' && node.value?.trim() === _tableHelpers.LAYOUT_TABLE_MARKER;
|
|
87
|
+
if (isMarker && siblings[index + 1]?.type === 'table') {
|
|
88
|
+
markLayoutTable(siblings[index + 1]);
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
return true;
|
|
92
|
+
});
|
|
93
|
+
parent.children.forEach(node => {
|
|
94
|
+
if (node.type === 'table' && node.children) {
|
|
95
|
+
const rows = node.children.map((row, rowIndex) => row.children?.map(cell => ({
|
|
96
|
+
text: getText(cell),
|
|
97
|
+
isHeader: rowIndex === 0
|
|
98
|
+
})) ?? []);
|
|
99
|
+
if ((0, _tableHelpers.isLikelyLayoutTable)(rows)) {
|
|
100
|
+
markLayoutTable(node);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
transform(node);
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
return transform;
|
|
107
|
+
};
|
|
108
|
+
exports.remarkLayoutTables = remarkLayoutTables;
|
|
109
|
+
const getInlineList = (text, allowSingleLeadingBullet = false) => {
|
|
110
|
+
const leadingBullets = /^-\s+(.+)\.$/.exec(text);
|
|
111
|
+
if (leadingBullets) {
|
|
112
|
+
const items = leadingBullets[1].split(/\.\s+-\s+/).map(item => item.trim());
|
|
113
|
+
if ((items.length >= 2 || allowSingleLeadingBullet) && items.every(Boolean)) {
|
|
114
|
+
return {
|
|
115
|
+
prefix: '',
|
|
116
|
+
items: items.map(item => `${item}.`)
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const prefixedBullets = /^(.*?:)\s+-\s+(.+)$/.exec(text);
|
|
121
|
+
if (!prefixedBullets) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
const items = prefixedBullets[2].split(/;\s+(?:and\s+)?-\s+/).map(item => item.trim());
|
|
125
|
+
if (items.length < 2 || items.some(item => !item)) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
prefix: `${prefixedBullets[1]} `,
|
|
130
|
+
items: items.map((item, index) => index < items.length - 1 ? `${item};` : item)
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
const getPlainText = cell => cell.children?.length === 1 && cell.children[0].type === 'text' ? cell.children[0].value ?? '' : null;
|
|
134
|
+
const setCellList = (cell, list) => {
|
|
135
|
+
cell.children = [...(list.prefix ? [{
|
|
136
|
+
type: 'text',
|
|
137
|
+
value: list.prefix
|
|
138
|
+
}] : []), {
|
|
139
|
+
type: 'list',
|
|
140
|
+
children: list.items.map(value => ({
|
|
141
|
+
type: 'listItem',
|
|
142
|
+
children: [{
|
|
143
|
+
type: 'paragraph',
|
|
144
|
+
children: [{
|
|
145
|
+
type: 'text',
|
|
146
|
+
value
|
|
147
|
+
}]
|
|
148
|
+
}]
|
|
149
|
+
}))
|
|
150
|
+
}];
|
|
151
|
+
};
|
|
152
|
+
const getCells = row => row?.children?.filter(cell => cell.type === 'tableCell') ?? [];
|
|
153
|
+
const containsList = cell => cell?.children?.some(child => child.type === 'list') ?? false;
|
|
154
|
+
|
|
155
|
+
// A lone "- item." is only a list when the same column holds a list in a neighbouring row.
|
|
156
|
+
const convertRelatedSingleBullets = table => {
|
|
157
|
+
const rows = table.children?.filter(row => row.type === 'tableRow') ?? [];
|
|
158
|
+
rows.forEach((row, rowIndex) => {
|
|
159
|
+
getCells(row).forEach((cell, cellIndex) => {
|
|
160
|
+
const text = getPlainText(cell);
|
|
161
|
+
const list = text === null ? null : getInlineList(text, true);
|
|
162
|
+
if (list?.items.length !== 1) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (containsList(getCells(rows[rowIndex - 1])[cellIndex]) || containsList(getCells(rows[rowIndex + 1])[cellIndex])) {
|
|
166
|
+
setCellList(cell, list);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
// Table cells cannot hold markdown lists, so converters flatten them to "- a. - b." text.
|
|
173
|
+
const remarkTableCellLists = () => {
|
|
174
|
+
const transform = node => {
|
|
175
|
+
if (node.type === 'table') {
|
|
176
|
+
node.children?.forEach(transform);
|
|
177
|
+
convertRelatedSingleBullets(node);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (node.type === 'tableCell') {
|
|
181
|
+
const text = getPlainText(node);
|
|
182
|
+
const list = text === null ? null : getInlineList(text);
|
|
183
|
+
if (list) {
|
|
184
|
+
setCellList(node, list);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
node.children?.forEach(transform);
|
|
188
|
+
};
|
|
189
|
+
return transform;
|
|
190
|
+
};
|
|
191
|
+
exports.remarkTableCellLists = remarkTableCellLists;
|
|
192
|
+
//# sourceMappingURL=remarkPlugins.js.map
|
package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remarkPlugins.js","names":["_tableHelpers","require","getText","node","value","children","map","join","remarkLineBreaks","transform","type","test","trim","forEach","exports","splitInlineContent","nodes","paragraphs","segments","split","segment","index","push","length","remarkParagraphBreaks","parent","includes","flatMap","markLayoutTable","properties","data","hProperties","className","Set","remarkLayoutTables","filter","siblings","isMarker","LAYOUT_TABLE_MARKER","rows","row","rowIndex","cell","text","isHeader","isLikelyLayoutTable","getInlineList","allowSingleLeadingBullet","leadingBullets","exec","items","item","every","Boolean","prefix","prefixedBullets","some","getPlainText","setCellList","list","getCells","containsList","child","convertRelatedSingleBullets","table","cellIndex","remarkTableCellLists"],"sources":["../../../../../../../../src/widgets/shared/documents/engines/markdownRenderer/plugins/remarkPlugins.ts"],"sourcesContent":["import { isLikelyLayoutTable, LAYOUT_TABLE_MARKER } from './tableHelpers';\nimport { MarkdownNode, MarkdownTransformer } from './markdownNode.interfaces';\n\nconst getText = (node: MarkdownNode): string => node.value ?? node.children?.map(getText).join(' ') ?? '';\n\n// Converted documents use `<br>` for line breaks; without raw HTML support they would vanish.\nexport const remarkLineBreaks = (): MarkdownTransformer => {\n const transform = (node: MarkdownNode): void => {\n if (node.type === 'html' && /^<br\\s*\\/?>$/i.test(node.value?.trim() ?? '')) {\n node.type = 'break';\n delete node.value;\n }\n node.children?.forEach(transform);\n };\n return transform;\n};\n\nconst splitInlineContent = (nodes: MarkdownNode[]): MarkdownNode[][] => {\n const paragraphs: MarkdownNode[][] = [[]];\n nodes.forEach((node) => {\n let segments: MarkdownNode[][];\n if (node.type === 'text') {\n segments = (node.value ?? '').split(/\\r?\\n/).map((value) => [{ ...node, value }]);\n } else if (node.children) {\n segments = splitInlineContent(node.children).map((children) => [{ ...node, children }]);\n } else {\n segments = [[node]];\n }\n segments.forEach((segment, index) => {\n if (index > 0) {\n paragraphs.push([]);\n }\n paragraphs[paragraphs.length - 1].push(...segment);\n });\n });\n return paragraphs;\n};\n\n// Source documents treat each line as its own paragraph, whereas markdown joins adjacent lines.\nexport const remarkParagraphBreaks = (): MarkdownTransformer => {\n const transform = (parent: MarkdownNode): void => {\n if (!parent.children || ['list', 'listItem', 'table', 'tableCell'].includes(parent.type)) {\n return;\n }\n parent.children = parent.children.flatMap((node) => {\n if (node.type === 'paragraph') {\n return splitInlineContent(node.children ?? []).map((children) => ({ ...node, children }));\n }\n transform(node);\n return [node];\n });\n };\n return transform;\n};\n\nconst markLayoutTable = (node: MarkdownNode): void => {\n const properties = node.data?.hProperties ?? {};\n const className = [...new Set([...(properties.className ?? []), 'layoutTable'])];\n node.data = { ...node.data, hProperties: { ...properties, className } };\n};\n\nexport const remarkLayoutTables = (): MarkdownTransformer => {\n const transform = (parent: MarkdownNode): void => {\n if (!parent.children) {\n return;\n }\n parent.children = parent.children.filter((node, index, siblings) => {\n const isMarker = node.type === 'html' && node.value?.trim() === LAYOUT_TABLE_MARKER;\n if (isMarker && siblings[index + 1]?.type === 'table') {\n markLayoutTable(siblings[index + 1]);\n return false;\n }\n return true;\n });\n parent.children.forEach((node) => {\n if (node.type === 'table' && node.children) {\n const rows = node.children.map((row, rowIndex) =>\n row.children?.map((cell) => ({ text: getText(cell), isHeader: rowIndex === 0 })) ?? []\n );\n if (isLikelyLayoutTable(rows)) {\n markLayoutTable(node);\n }\n }\n transform(node);\n });\n };\n return transform;\n};\n\ntype InlineList = {\n prefix: string;\n items: string[];\n};\n\nconst getInlineList = (text: string, allowSingleLeadingBullet = false): InlineList | null => {\n const leadingBullets = /^-\\s+(.+)\\.$/.exec(text);\n if (leadingBullets) {\n const items = leadingBullets[1].split(/\\.\\s+-\\s+/).map((item) => item.trim());\n if ((items.length >= 2 || allowSingleLeadingBullet) && items.every(Boolean)) {\n return { prefix: '', items: items.map((item) => `${ item }.`) };\n }\n }\n\n const prefixedBullets = /^(.*?:)\\s+-\\s+(.+)$/.exec(text);\n if (!prefixedBullets) {\n return null;\n }\n const items = prefixedBullets[2].split(/;\\s+(?:and\\s+)?-\\s+/).map((item) => item.trim());\n if (items.length < 2 || items.some((item) => !item)) {\n return null;\n }\n return {\n prefix: `${ prefixedBullets[1] } `,\n items: items.map((item, index) => (index < items.length - 1 ? `${ item };` : item))\n };\n};\n\nconst getPlainText = (cell: MarkdownNode): string | null =>\n cell.children?.length === 1 && cell.children[0].type === 'text' ? cell.children[0].value ?? '' : null;\n\nconst setCellList = (cell: MarkdownNode, list: InlineList): void => {\n cell.children = [\n ...(list.prefix ? [{ type: 'text', value: list.prefix }] : []),\n {\n type: 'list',\n children: list.items.map((value) => ({\n type: 'listItem',\n children: [{ type: 'paragraph', children: [{ type: 'text', value }] }]\n }))\n }\n ];\n};\n\nconst getCells = (row: MarkdownNode | undefined): MarkdownNode[] => row?.children?.filter((cell) => cell.type === 'tableCell') ?? [];\n\nconst containsList = (cell: MarkdownNode | undefined): boolean => cell?.children?.some((child) => child.type === 'list') ?? false;\n\n// A lone \"- item.\" is only a list when the same column holds a list in a neighbouring row.\nconst convertRelatedSingleBullets = (table: MarkdownNode): void => {\n const rows = table.children?.filter((row) => row.type === 'tableRow') ?? [];\n rows.forEach((row, rowIndex) => {\n getCells(row).forEach((cell, cellIndex) => {\n const text = getPlainText(cell);\n const list = text === null ? null : getInlineList(text, true);\n if (list?.items.length !== 1) {\n return;\n }\n if (containsList(getCells(rows[rowIndex - 1])[cellIndex]) || containsList(getCells(rows[rowIndex + 1])[cellIndex])) {\n setCellList(cell, list);\n }\n });\n });\n};\n\n// Table cells cannot hold markdown lists, so converters flatten them to \"- a. - b.\" text.\nexport const remarkTableCellLists = (): MarkdownTransformer => {\n const transform = (node: MarkdownNode): void => {\n if (node.type === 'table') {\n node.children?.forEach(transform);\n convertRelatedSingleBullets(node);\n return;\n }\n if (node.type === 'tableCell') {\n const text = getPlainText(node);\n const list = text === null ? null : getInlineList(text);\n if (list) {\n setCellList(node, list);\n }\n }\n node.children?.forEach(transform);\n };\n return transform;\n};\n"],"mappings":"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","ignoreList":[]}
|
package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.remarkSafeTables = void 0;
|
|
8
|
+
var _dompurify = _interopRequireDefault(require("dompurify"));
|
|
9
|
+
var _tableHelpers = require("./tableHelpers");
|
|
10
|
+
const ALLOWED_TABLE_TAGS = ['table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', 'caption', 'colgroup', 'col', 'p', 'br', 'strong', 'em', 'b', 'i', 'u', 'del', 's', 'code', 'pre', 'ul', 'ol', 'li', 'a', 'img', 'span', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
|
|
11
|
+
const ALLOWED_TABLE_ATTRIBUTES = ['colspan', 'rowspan', 'href', 'src', 'alt', 'title', 'class'];
|
|
12
|
+
const ALLOWED_CLASS_NAMES = ['layoutTable'];
|
|
13
|
+
const toHastProperties = element => {
|
|
14
|
+
const properties = {};
|
|
15
|
+
Array.from(element.attributes).forEach(({
|
|
16
|
+
name,
|
|
17
|
+
value
|
|
18
|
+
}) => {
|
|
19
|
+
if (name === 'class') {
|
|
20
|
+
const className = value.split(/\s+/).filter(item => ALLOWED_CLASS_NAMES.includes(item));
|
|
21
|
+
if (className.length) {
|
|
22
|
+
properties.className = className;
|
|
23
|
+
}
|
|
24
|
+
} else if (name === 'colspan' || name === 'rowspan') {
|
|
25
|
+
const span = Number(value);
|
|
26
|
+
if (Number.isInteger(span) && span > 0) {
|
|
27
|
+
properties[name === 'colspan' ? 'colSpan' : 'rowSpan'] = span;
|
|
28
|
+
}
|
|
29
|
+
} else {
|
|
30
|
+
properties[name] = value;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
return properties;
|
|
34
|
+
};
|
|
35
|
+
const toHast = node => {
|
|
36
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
37
|
+
return {
|
|
38
|
+
type: 'text',
|
|
39
|
+
value: node.textContent ?? ''
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (node.nodeType !== Node.ELEMENT_NODE) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const element = node;
|
|
46
|
+
return {
|
|
47
|
+
type: 'element',
|
|
48
|
+
tagName: element.tagName.toLowerCase(),
|
|
49
|
+
properties: toHastProperties(element),
|
|
50
|
+
children: Array.from(element.childNodes).map(toHast).filter(child => child !== null)
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
const sanitizeTable = html => {
|
|
54
|
+
const fragment = _dompurify.default.sanitize(html, {
|
|
55
|
+
ALLOWED_TAGS: ALLOWED_TABLE_TAGS,
|
|
56
|
+
ALLOWED_ATTR: ALLOWED_TABLE_ATTRIBUTES,
|
|
57
|
+
RETURN_DOM_FRAGMENT: true
|
|
58
|
+
});
|
|
59
|
+
const meaningfulNodes = Array.from(fragment.childNodes).filter(child => child.nodeType !== Node.TEXT_NODE || (0, _tableHelpers.hasMeaningfulTableText)(child.textContent ?? ''));
|
|
60
|
+
const [onlyNode] = meaningfulNodes;
|
|
61
|
+
return meaningfulNodes.length === 1 && onlyNode instanceof Element && onlyNode.tagName === 'TABLE' ? onlyNode : null;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// Converters fall back to raw `<table>` HTML for merged cells, which markdown cannot express.
|
|
65
|
+
// Only a single, sanitised table is rendered; any other raw HTML stays inert text.
|
|
66
|
+
const remarkSafeTables = () => {
|
|
67
|
+
const transform = node => {
|
|
68
|
+
if (node.type === 'html' && /^<table(?:\s|>)/i.test(node.value?.trim() ?? '')) {
|
|
69
|
+
const table = sanitizeTable(node.value ?? '');
|
|
70
|
+
const hast = table ? toHast(table) : null;
|
|
71
|
+
if (hast?.type === 'element') {
|
|
72
|
+
node.type = 'safeDocumentTable';
|
|
73
|
+
node.data = {
|
|
74
|
+
hName: 'table',
|
|
75
|
+
hProperties: hast.properties,
|
|
76
|
+
hChildren: hast.children
|
|
77
|
+
};
|
|
78
|
+
delete node.value;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
node.children?.forEach(transform);
|
|
82
|
+
};
|
|
83
|
+
return transform;
|
|
84
|
+
};
|
|
85
|
+
exports.remarkSafeTables = remarkSafeTables;
|
|
86
|
+
//# sourceMappingURL=remarkSafeTables.js.map
|
package/dist/cjs/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remarkSafeTables.js","names":["_dompurify","_interopRequireDefault","require","_tableHelpers","ALLOWED_TABLE_TAGS","ALLOWED_TABLE_ATTRIBUTES","ALLOWED_CLASS_NAMES","toHastProperties","element","properties","Array","from","attributes","forEach","name","value","className","split","filter","item","includes","length","span","Number","isInteger","toHast","node","nodeType","Node","TEXT_NODE","type","textContent","ELEMENT_NODE","tagName","toLowerCase","children","childNodes","map","child","sanitizeTable","html","fragment","DOMPurify","sanitize","ALLOWED_TAGS","ALLOWED_ATTR","RETURN_DOM_FRAGMENT","meaningfulNodes","hasMeaningfulTableText","onlyNode","Element","remarkSafeTables","transform","test","trim","table","hast","data","hName","hProperties","hChildren","exports"],"sources":["../../../../../../../../src/widgets/shared/documents/engines/markdownRenderer/plugins/remarkSafeTables.ts"],"sourcesContent":["import DOMPurify from 'dompurify';\n\nimport { hasMeaningfulTableText } from './tableHelpers';\nimport { MarkdownNode, MarkdownTransformer } from './markdownNode.interfaces';\n\nconst ALLOWED_TABLE_TAGS = [\n 'table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', 'caption', 'colgroup', 'col',\n 'p', 'br', 'strong', 'em', 'b', 'i', 'u', 'del', 's', 'code', 'pre', 'ul', 'ol', 'li',\n 'a', 'img', 'span', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'\n];\nconst ALLOWED_TABLE_ATTRIBUTES = ['colspan', 'rowspan', 'href', 'src', 'alt', 'title', 'class'];\nconst ALLOWED_CLASS_NAMES = ['layoutTable'];\n\ntype HastNode =\n | { type: 'text'; value: string }\n | { type: 'element'; tagName: string; properties: Record<string, unknown>; children: HastNode[] };\n\nconst toHastProperties = (element: Element): Record<string, unknown> => {\n const properties: Record<string, unknown> = {};\n Array.from(element.attributes).forEach(({ name, value }) => {\n if (name === 'class') {\n const className = value.split(/\\s+/).filter((item) => ALLOWED_CLASS_NAMES.includes(item));\n if (className.length) {\n properties.className = className;\n }\n } else if (name === 'colspan' || name === 'rowspan') {\n const span = Number(value);\n if (Number.isInteger(span) && span > 0) {\n properties[name === 'colspan' ? 'colSpan' : 'rowSpan'] = span;\n }\n } else {\n properties[name] = value;\n }\n });\n return properties;\n};\n\nconst toHast = (node: Node): HastNode | null => {\n if (node.nodeType === Node.TEXT_NODE) {\n return { type: 'text', value: node.textContent ?? '' };\n }\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return null;\n }\n const element = node as Element;\n return {\n type: 'element',\n tagName: element.tagName.toLowerCase(),\n properties: toHastProperties(element),\n children: Array.from(element.childNodes).map(toHast).filter((child): child is HastNode => child !== null)\n };\n};\n\nconst sanitizeTable = (html: string): Element | null => {\n const fragment = DOMPurify.sanitize(html, {\n ALLOWED_TAGS: ALLOWED_TABLE_TAGS,\n ALLOWED_ATTR: ALLOWED_TABLE_ATTRIBUTES,\n RETURN_DOM_FRAGMENT: true\n });\n const meaningfulNodes = Array.from(fragment.childNodes).filter((child) =>\n child.nodeType !== Node.TEXT_NODE || hasMeaningfulTableText(child.textContent ?? '')\n );\n const [onlyNode] = meaningfulNodes;\n return meaningfulNodes.length === 1 && onlyNode instanceof Element && onlyNode.tagName === 'TABLE' ? onlyNode : null;\n};\n\n// Converters fall back to raw `<table>` HTML for merged cells, which markdown cannot express.\n// Only a single, sanitised table is rendered; any other raw HTML stays inert text.\nexport const remarkSafeTables = (): MarkdownTransformer => {\n const transform = (node: MarkdownNode): void => {\n if (node.type === 'html' && /^<table(?:\\s|>)/i.test(node.value?.trim() ?? '')) {\n const table = sanitizeTable(node.value ?? '');\n const hast = table ? toHast(table) : null;\n if (hast?.type === 'element') {\n node.type = 'safeDocumentTable';\n node.data = {\n hName: 'table',\n hProperties: hast.properties as Record<string, unknown> & { className?: string[] },\n hChildren: hast.children\n };\n delete node.value;\n }\n }\n node.children?.forEach(transform);\n };\n return transform;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isLikelyLayoutTable = exports.hasMeaningfulTableText = exports.LAYOUT_TABLE_MARKER = void 0;
|
|
7
|
+
// Converters can emit this marker before a table they know is used for layout rather than data.
|
|
8
|
+
const LAYOUT_TABLE_MARKER = exports.LAYOUT_TABLE_MARKER = '<!-- layoutTable -->';
|
|
9
|
+
|
|
10
|
+
// Zero-width spaces and byte-order marks are common in converted cells and carry no content.
|
|
11
|
+
const INVISIBLE_CHARACTERS = [0x200b, 0xfeff].map(code => String.fromCharCode(code));
|
|
12
|
+
const hasMeaningfulTableText = text => Array.from(text).some(character => !/\s/.test(character) && !INVISIBLE_CHARACTERS.includes(character));
|
|
13
|
+
exports.hasMeaningfulTableText = hasMeaningfulTableText;
|
|
14
|
+
const isProse = text => text.trim().length > 40 && text.trim().split(/\s+/).length >= 8;
|
|
15
|
+
const isLabelAndBodyRow = row => {
|
|
16
|
+
const label = row[0]?.text.trim() ?? '';
|
|
17
|
+
const body = row[1]?.text.trim() ?? '';
|
|
18
|
+
return label.length > 0 && label.length <= 90 && label.split(/\s+/).length <= 12 && !/[.!?]$/.test(label) && isProse(body) && body.length > label.length * 2;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// Documents converted from Word often use one- or two-column tables to lay out prose
|
|
22
|
+
// (a short label beside a paragraph). Those read better styled as text than as a data grid.
|
|
23
|
+
const isLikelyLayoutTable = rows => {
|
|
24
|
+
const meaningfulRows = rows.filter(row => row.some(cell => cell.text.trim()));
|
|
25
|
+
if (!meaningfulRows.length || Math.max(...meaningfulRows.map(row => row.length)) > 2) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
if (meaningfulRows[0].every(cell => cell.isHeader && cell.text.trim())) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
const layoutRows = meaningfulRows.filter(row => {
|
|
32
|
+
const populated = row.filter(cell => cell.text.trim());
|
|
33
|
+
return populated.length === 1 ? isProse(populated[0].text) : isLabelAndBodyRow(row);
|
|
34
|
+
});
|
|
35
|
+
return layoutRows.length >= Math.max(1, Math.ceil(meaningfulRows.length * 0.6));
|
|
36
|
+
};
|
|
37
|
+
exports.isLikelyLayoutTable = isLikelyLayoutTable;
|
|
38
|
+
//# sourceMappingURL=tableHelpers.js.map
|