@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DragAndDropFileUpload.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","arrowUpFromBracket","useFormContext","renderIcon","HookFormWrapper","Spinner","FormFieldLabel","InputFile","ValidationMessages","generateButtonClass","FileAttachmentsList","DEFAULT_UPLOAD_FILE_EXTENSIONS","DEFAULT_UPLOAD_FILE_TYPES","BLACKLISTED_FILE_TYPES","DragAndDropFileUpload","props","createElement","formContext","DragAndDropFileUploadField","label","field","showSpinner","fileDisplayStyle","fileListSettings","fileList","validation","customContent","customCssClasses","labelStyle","labelAsButtonStyles","color","variant","labelUploadIcon","multiple","restrictionsTxt","validFiles","extensions","fileTypes","maxFileCount","maxFileSize","onFilesChange","setValue","trigger","activeFileList","setFileList","isTouched","setIsTouched","isDragActive","setIsDragActive","inputId","id","inputElRef","dialogOpenRef","current","document","getElementById","onFocus","noneSelected","files","length","name","window","addEventListener","removeEventListener","supportedFileTypes","join","validateAndCommit","validated","filter","file","ext","split","pop","toLowerCase","isBlacklisted","includes","isValidExt","isValidSize","size","clipped","slice","shouldValidate","shouldDirty","shouldTouch","handleFileInputChange","event","target","Array","from","handleDrop","dropped","handleFilesEdited","wrapperCssClass","wrapper","position","labelProps","isRequired","required","labelStyleAsButtonClasses","cssClass","buttonStyle","hideLabel","hide","labelCssClass","className","onDragOver","e","preventDefault","onDragLeave","currentTarget","onDrop","dataTransfer","labelId","htmlFor","onClick","type","defaultValue","accept","onInput","map","index","key","customFileListSettings","onFilesRemoved","onFilesEdited"],"sources":["../../../../../../../../../src/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.tsx"],"sourcesContent":["'use client';\n\nimport React, { FormEvent, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { arrowUpFromBracket } from '@x15ventures/x15-ui-library-icons/iconDefinitions';\nimport { useFormContext } from 'react-hook-form';\nimport { renderIcon } from '../../../../../../../helpers/iconHelpers';\nimport { HookFormWrapper } from '../../../../../hookFormWrapper/HookFormWrapper';\nimport { Spinner } from '../../../../../../design/spinner/Spinner';\nimport { FormFieldLabel } from '../../../../subComponents/labels/FormFieldLabel';\nimport { InputFile } from '../../../../subComponents/inputs/file/InputFile';\nimport { ValidationMessages } from '../../../../../validation/ValidationMessages';\nimport { generateButtonClass } from '../../../../../buttons/button.helpers';\nimport { FileAttachmentsList } from '../fileAttachmentList/FileAttachmentsList';\nimport { DragAndDropFileUploadProps } from '../fileInputProps';\nimport {\n DEFAULT_UPLOAD_FILE_EXTENSIONS,\n DEFAULT_UPLOAD_FILE_TYPES,\n BLACKLISTED_FILE_TYPES\n} from '../../../../../../../constants';\n\nimport './dragAndDropFileUpload.scss';\n\nexport const DragAndDropFileUpload: React.FC<DragAndDropFileUploadProps> = (props) => (\n <HookFormWrapper formContext={ props.formContext }>\n <DragAndDropFileUploadField { ...props } />\n </HookFormWrapper>\n);\n\nconst DragAndDropFileUploadField: React.FC<DragAndDropFileUploadProps> = (\n {\n label,\n field,\n showSpinner,\n fileDisplayStyle = 'names',\n fileListSettings,\n fileList,\n validation,\n customContent,\n customCssClasses,\n labelStyle = 'dragArea',\n labelAsButtonStyles = { color: 'primary', variant: 'outline' },\n labelUploadIcon = arrowUpFromBracket,\n multiple = false,\n restrictionsTxt = '',\n validFiles = {\n extensions: DEFAULT_UPLOAD_FILE_EXTENSIONS,\n fileTypes: DEFAULT_UPLOAD_FILE_TYPES,\n maxFileCount: 5,\n maxFileSize: 52428800 // 50 MB\n },\n onFilesChange = () => {}\n }\n) => {\n const { setValue, trigger } = useFormContext();\n\n const [activeFileList, setFileList] = useState<File[]>(fileList || []);\n const [isTouched, setIsTouched] = useState(false);\n const [isDragActive, setIsDragActive] = useState(false);\n\n const inputId = field.id;\n const inputElRef = useRef<HTMLInputElement | null>(null);\n const dialogOpenRef = useRef(false);\n\n useEffect(() => {\n inputElRef.current = document.getElementById(inputId) as HTMLInputElement | null;\n }, [inputId]);\n\n // Detect “Cancel” -> dialog closes, window regains focus, but input had no change.\n useEffect(() => {\n const onFocus = () => {\n if (!dialogOpenRef.current) { return; }\n dialogOpenRef.current = false;\n const noneSelected = !inputElRef.current?.files?.length;\n if (noneSelected) {\n // Trigger React Hook Form validators (e.g., required)\n trigger(field.name);\n }\n };\n window.addEventListener('focus', onFocus);\n return () => window.removeEventListener('focus', onFocus);\n }, [trigger, field.name]);\n\n const supportedFileTypes = useMemo(\n () => validFiles?.fileTypes?.join(', ') || '',\n [validFiles?.fileTypes]\n );\n\n const validateAndCommit = useCallback(\n (files: File[]) => {\n // basic validations\n const validated = files.filter((file) => {\n const ext = file.name.split('.').pop()?.toLowerCase() || '';\n const isBlacklisted = BLACKLISTED_FILE_TYPES.includes(ext);\n const isValidExt = validFiles.extensions ? validFiles.extensions.includes(ext) : true;\n const isValidSize = validFiles.maxFileSize ? file.size <= validFiles.maxFileSize : true;\n return !isBlacklisted && isValidExt && isValidSize;\n });\n\n const clipped = validFiles.maxFileCount\n ? validated.slice(0, validFiles.maxFileCount)\n : validated;\n\n setFileList(clipped);\n setIsTouched(true);\n\n setValue(field.name, clipped.length ? clipped : null, {\n shouldValidate: true,\n shouldDirty: true,\n shouldTouch: true\n });\n\n onFilesChange(clipped);\n },\n [field.name, onFilesChange, setValue, fileDisplayStyle, validFiles]\n );\n\n const handleFileInputChange = useCallback((event: FormEvent<HTMLInputElement>) => {\n const target = event.target as HTMLInputElement;\n const files = Array.from(target.files ?? []);\n validateAndCommit(files);\n trigger(field.name);\n dialogOpenRef.current = false;\n }, [trigger, field.name, validateAndCommit]);\n\n const handleDrop = useCallback((dropped: File[]) => {\n validateAndCommit(dropped);\n trigger(field.name);\n }, [trigger, field.name, validateAndCommit]);\n\n const handleFilesEdited = useCallback((files: File[]) => {\n // No need to validate again as they were already validated\n // Changes may include renaming or removing files\n setFileList(files);\n setValue(field.name, files.length > 0 ? files : null, {\n shouldValidate: true,\n shouldDirty: true,\n shouldTouch: true\n });\n onFilesChange(files);\n }, [field.name, setValue, onFilesChange]);\n\n const wrapperCssClass = `\n formField \n dragAndDropFileUpload \n ${ fileDisplayStyle === 'list' ? 'withFileList' : '' } \n ${ labelStyle || '' }Style \n ${ customCssClasses?.wrapper || '' } \n ${ isTouched ? 'touched' : '' } \n ${ typeof validation !== 'undefined' ? 'withValidation' : '' } \n ${ label?.position === 'inset' ? 'insetLabel' : '' } \n ${ isDragActive ? 'isDragActive' : '' }\n `;\n\n const labelProps = {\n ...label,\n inputId: inputId,\n isRequired: validation && typeof validation.required !== 'undefined',\n customContent\n };\n\n const labelStyleAsButtonClasses = generateButtonClass({\n cssClass: 'button dragAndDropFileUploadButtonLabel',\n buttonStyle: labelAsButtonStyles,\n hideLabel: label.hide\n });\n\n const labelCssClass = `\n ${ labelStyle === 'button' ? labelStyleAsButtonClasses : '' }\n ${ customCssClasses?.label || '' } \n ${ showSpinner ? 'withSpinner' : '' } \n ${ label.hide ? 'hiddenLabel' : '' }\n `;\n\n return (\n <div\n className={ wrapperCssClass }\n onDragOver={ (e) => {\n e.preventDefault();\n if (!isDragActive) setIsDragActive(true);\n } }\n onDragLeave={ (e) => {\n if (e.currentTarget === e.target) setIsDragActive(false);\n } }\n onDrop={ (e) => {\n e.preventDefault();\n setIsDragActive(false);\n const files = Array.from(e.dataTransfer?.files ?? []);\n handleDrop(files);\n } }\n >\n <label\n id={ label.labelId || `${ inputId }_label` }\n className={ labelCssClass }\n htmlFor={ inputId }\n onClick={ () => { dialogOpenRef.current = true; } }\n >\n <span className=\"dragAndDropFileUploadLabel\">\n { renderIcon(labelUploadIcon) }\n <FormFieldLabel { ...labelProps } />\n { restrictionsTxt && <span className=\"fileRestrictionsText\">{ restrictionsTxt }</span> }\n </span>\n\n <span className=\"inputContainer\">\n <InputFile\n {\n ...{\n label,\n field: {\n ...field,\n type: 'file',\n id: inputId, // ensure we can query it by id\n defaultValue: '',\n multiple,\n accept: supportedFileTypes,\n onInput: (event: FormEvent<HTMLInputElement>) => {\n handleFileInputChange(event);\n }\n },\n validation,\n showSpinner,\n customCssClasses,\n customContent\n }\n }\n />\n </span>\n\n { showSpinner && <Spinner /> }\n\n { fileDisplayStyle === 'names' && activeFileList.length > 0 && (\n <span className=\"uploadedFileNames\">\n { activeFileList.map((file, index) => (\n <small key={ index } className=\"uploadedFileName\">\n { file.name }{ index < activeFileList.length - 1 ? ', ' : '' }\n </small>\n )) }\n </span>\n ) }\n\n <ValidationMessages name={ field.name } validation={ validation } />\n </label>\n\n { fileDisplayStyle === 'list' && activeFileList.length > 0 && (\n <FileAttachmentsList\n customFileListSettings={ fileListSettings }\n files={ activeFileList }\n onFilesRemoved={ handleFilesEdited }\n onFilesEdited={ handleFilesEdited }\n />\n ) }\n </div>\n );\n};\n\nexport default { DragAndDropFileUpload };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"DragAndDropFileUpload.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","arrowUpFromBracket","useFormContext","getFileExtension","renderIcon","HookFormWrapper","Spinner","FormFieldLabel","InputFile","ValidationMessages","generateButtonClass","FileAttachmentsList","DEFAULT_UPLOAD_FILE_EXTENSIONS","DEFAULT_UPLOAD_FILE_TYPES","BLACKLISTED_FILE_TYPES","getUploadExtension","fileName","startsWith","DEFAULT_VALID_FILES","extensions","fileTypes","maxFileCount","maxFileSize","resolveValidFiles","customValidFiles","customisesTypes","matchesFileTypes","file","extension","name","mimeType","type","toLowerCase","some","token","normalised","trim","slice","endsWith","DragAndDropFileUpload","props","createElement","formContext","DragAndDropFileUploadField","label","field","showSpinner","fileDisplayStyle","fileListSettings","fileList","validation","customContent","customCssClasses","labelStyle","labelAsButtonStyles","color","variant","labelUploadIcon","multiple","restrictionsTxt","validFiles","onFilesChange","setValue","trigger","activeFileList","setFileList","isTouched","setIsTouched","isDragActive","setIsDragActive","inputId","id","inputElRef","dialogOpenRef","current","document","getElementById","onFocus","noneSelected","files","length","window","addEventListener","removeEventListener","supportedFileTypes","join","isFileAllowed","ext","isBlacklisted","includes","isValidExt","isValidSize","size","validateAndCommit","validated","filter","clipped","shouldValidate","shouldDirty","shouldTouch","handleFileInputChange","event","target","Array","from","handleDrop","dropped","handleFilesEdited","editedFiles","wrapperCssClass","wrapper","position","labelProps","isRequired","required","labelStyleAsButtonClasses","cssClass","buttonStyle","hideLabel","hide","labelCssClass","className","onDragOver","e","preventDefault","onDragLeave","currentTarget","onDrop","dataTransfer","labelId","htmlFor","onClick","defaultValue","accept","onInput","map","index","key","customFileListSettings","onFilesRemoved","onFilesEdited"],"sources":["../../../../../../../../../src/components/form/formFields/subComponents/inputs/file/dragAndDrop/DragAndDropFileUpload.tsx"],"sourcesContent":["'use client';\n\nimport React, { FormEvent, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { arrowUpFromBracket } from '@x15ventures/x15-ui-library-icons/iconDefinitions';\nimport { useFormContext } from 'react-hook-form';\nimport { getFileExtension } from '../../../../../../../helpers/fileHelpers';\nimport { renderIcon } from '../../../../../../../helpers/iconHelpers';\nimport { HookFormWrapper } from '../../../../../hookFormWrapper/HookFormWrapper';\nimport { Spinner } from '../../../../../../design/spinner/Spinner';\nimport { FormFieldLabel } from '../../../../subComponents/labels/FormFieldLabel';\nimport { InputFile } from '../../../../subComponents/inputs/file/InputFile';\nimport { ValidationMessages } from '../../../../../validation/ValidationMessages';\nimport { generateButtonClass } from '../../../../../buttons/button.helpers';\nimport { FileAttachmentsList } from '../fileAttachmentList/FileAttachmentsList';\nimport { DragAndDropFileUploadProps } from '../fileInputProps';\nimport {\n DEFAULT_UPLOAD_FILE_EXTENSIONS,\n DEFAULT_UPLOAD_FILE_TYPES,\n BLACKLISTED_FILE_TYPES\n} from '../../../../../../../constants';\n\nimport './dragAndDropFileUpload.scss';\n\n// A dot-file such as `.exe` has no extension by convention, but its name is still checked as one so\n// it cannot slip past the blacklist.\nconst getUploadExtension = (fileName: string): string =>\n getFileExtension(fileName.startsWith('.') ? `upload${ fileName }` : fileName);\n\ntype ValidFiles = NonNullable<DragAndDropFileUploadProps['validFiles']>;\n\nconst DEFAULT_VALID_FILES: ValidFiles = {\n extensions: DEFAULT_UPLOAD_FILE_EXTENSIONS,\n fileTypes: DEFAULT_UPLOAD_FILE_TYPES,\n maxFileCount: 5,\n maxFileSize: 52428800 // 50 MB\n};\n\n/*\n Limits-only configurations keep the default type restrictions. Once either `extensions` or\n `fileTypes` is supplied (even as undefined), both are taken from the configuration so the picker\n filter and the validation cannot disagree.\n */\nconst resolveValidFiles = (customValidFiles?: ValidFiles): ValidFiles => {\n if (!customValidFiles) {\n return DEFAULT_VALID_FILES;\n }\n const customisesTypes = 'extensions' in customValidFiles || 'fileTypes' in customValidFiles;\n return customisesTypes\n ? {\n ...DEFAULT_VALID_FILES,\n ...customValidFiles,\n extensions: customValidFiles.extensions,\n fileTypes: customValidFiles.fileTypes\n }\n : { ...DEFAULT_VALID_FILES, ...customValidFiles };\n};\n\n// Matches a file against `accept`-style tokens: `.ext`, `type/*` or an exact MIME type.\nconst matchesFileTypes = (file: File, fileTypes: string[]): boolean => {\n const extension = getUploadExtension(file.name);\n const mimeType = file.type.toLowerCase();\n return fileTypes.some((token) => {\n const normalised = token.trim().toLowerCase();\n if (normalised.startsWith('.')) {\n return normalised.slice(1) === extension;\n }\n if (normalised.endsWith('/*')) {\n return mimeType.startsWith(normalised.slice(0, -1));\n }\n return normalised !== '' && normalised === mimeType;\n });\n};\n\nexport const DragAndDropFileUpload: React.FC<DragAndDropFileUploadProps> = (props) => (\n <HookFormWrapper formContext={ props.formContext }>\n <DragAndDropFileUploadField { ...props } />\n </HookFormWrapper>\n);\n\nconst DragAndDropFileUploadField: React.FC<DragAndDropFileUploadProps> = (\n {\n label,\n field,\n showSpinner,\n fileDisplayStyle = 'names',\n fileListSettings,\n fileList,\n validation,\n customContent,\n customCssClasses,\n labelStyle = 'dragArea',\n labelAsButtonStyles = { color: 'primary', variant: 'outline' },\n labelUploadIcon = arrowUpFromBracket,\n multiple = false,\n restrictionsTxt = '',\n validFiles: customValidFiles,\n onFilesChange = () => {}\n }\n) => {\n const validFiles = useMemo(() => resolveValidFiles(customValidFiles), [customValidFiles]);\n const { setValue, trigger } = useFormContext();\n\n const [activeFileList, setFileList] = useState<File[]>(fileList || []);\n const [isTouched, setIsTouched] = useState(false);\n const [isDragActive, setIsDragActive] = useState(false);\n\n const inputId = field.id;\n const inputElRef = useRef<HTMLInputElement | null>(null);\n const dialogOpenRef = useRef(false);\n\n useEffect(() => {\n inputElRef.current = document.getElementById(inputId) as HTMLInputElement | null;\n }, [inputId]);\n\n // Detect “Cancel” -> dialog closes, window regains focus, but input had no change.\n useEffect(() => {\n const onFocus = () => {\n if (!dialogOpenRef.current) { return; }\n dialogOpenRef.current = false;\n const noneSelected = !inputElRef.current?.files?.length;\n if (noneSelected) {\n // Trigger React Hook Form validators (e.g., required)\n trigger(field.name);\n }\n };\n window.addEventListener('focus', onFocus);\n return () => window.removeEventListener('focus', onFocus);\n }, [trigger, field.name]);\n\n const supportedFileTypes = useMemo(\n () => validFiles?.fileTypes?.join(', ') || '',\n [validFiles?.fileTypes]\n );\n\n const isFileAllowed = useCallback((file: File) => {\n const ext = getUploadExtension(file.name);\n const isBlacklisted = BLACKLISTED_FILE_TYPES.includes(ext);\n // Without an extension allowlist, the picker's file types are enforced so dropped files obey them too.\n const isValidExt = validFiles.extensions\n ? validFiles.extensions.includes(ext)\n : validFiles.fileTypes?.length ? matchesFileTypes(file, validFiles.fileTypes) : true;\n const isValidSize = validFiles.maxFileSize ? file.size <= validFiles.maxFileSize : true;\n return !isBlacklisted && isValidExt && isValidSize;\n }, [validFiles]);\n\n const validateAndCommit = useCallback(\n (files: File[]) => {\n const validated = files.filter(isFileAllowed);\n\n const clipped = validFiles.maxFileCount\n ? validated.slice(0, validFiles.maxFileCount)\n : validated;\n\n setFileList(clipped);\n setIsTouched(true);\n\n setValue(field.name, clipped.length ? clipped : null, {\n shouldValidate: true,\n shouldDirty: true,\n shouldTouch: true\n });\n\n onFilesChange(clipped);\n },\n [field.name, onFilesChange, setValue, isFileAllowed, validFiles]\n );\n\n const handleFileInputChange = useCallback((event: FormEvent<HTMLInputElement>) => {\n const target = event.target as HTMLInputElement;\n const files = Array.from(target.files ?? []);\n validateAndCommit(files);\n trigger(field.name);\n dialogOpenRef.current = false;\n }, [trigger, field.name, validateAndCommit]);\n\n const handleDrop = useCallback((dropped: File[]) => {\n validateAndCommit(dropped);\n trigger(field.name);\n }, [trigger, field.name, validateAndCommit]);\n\n const handleFilesEdited = useCallback((editedFiles: File[]) => {\n // Edits may rename files, so they are checked again: renaming `notes.txt` to `notes.exe` must not\n // get past the extension rules the original name passed.\n const files = editedFiles.filter(isFileAllowed);\n setFileList(files);\n setValue(field.name, files.length > 0 ? files : null, {\n shouldValidate: true,\n shouldDirty: true,\n shouldTouch: true\n });\n onFilesChange(files);\n }, [field.name, setValue, onFilesChange, isFileAllowed]);\n\n const wrapperCssClass = `\n formField \n dragAndDropFileUpload \n ${ fileDisplayStyle === 'list' ? 'withFileList' : '' } \n ${ labelStyle || '' }Style \n ${ customCssClasses?.wrapper || '' } \n ${ isTouched ? 'touched' : '' } \n ${ typeof validation !== 'undefined' ? 'withValidation' : '' } \n ${ label?.position === 'inset' ? 'insetLabel' : '' } \n ${ isDragActive ? 'isDragActive' : '' }\n `;\n\n const labelProps = {\n ...label,\n inputId: inputId,\n isRequired: validation && typeof validation.required !== 'undefined',\n customContent\n };\n\n const labelStyleAsButtonClasses = generateButtonClass({\n cssClass: 'button dragAndDropFileUploadButtonLabel',\n buttonStyle: labelAsButtonStyles,\n hideLabel: label.hide\n });\n\n const labelCssClass = `\n ${ labelStyle === 'button' ? labelStyleAsButtonClasses : '' }\n ${ customCssClasses?.label || '' } \n ${ showSpinner ? 'withSpinner' : '' } \n ${ label.hide ? 'hiddenLabel' : '' }\n `;\n\n return (\n <div\n className={ wrapperCssClass }\n onDragOver={ (e) => {\n e.preventDefault();\n if (!isDragActive) setIsDragActive(true);\n } }\n onDragLeave={ (e) => {\n if (e.currentTarget === e.target) setIsDragActive(false);\n } }\n onDrop={ (e) => {\n e.preventDefault();\n setIsDragActive(false);\n const files = Array.from(e.dataTransfer?.files ?? []);\n handleDrop(files);\n } }\n >\n <label\n id={ label.labelId || `${ inputId }_label` }\n className={ labelCssClass }\n htmlFor={ inputId }\n onClick={ () => { dialogOpenRef.current = true; } }\n >\n <span className=\"dragAndDropFileUploadLabel\">\n { renderIcon(labelUploadIcon) }\n <FormFieldLabel { ...labelProps } />\n { restrictionsTxt && <span className=\"fileRestrictionsText\">{ restrictionsTxt }</span> }\n </span>\n\n <span className=\"inputContainer\">\n <InputFile\n {\n ...{\n label,\n field: {\n ...field,\n type: 'file',\n id: inputId, // ensure we can query it by id\n defaultValue: '',\n multiple,\n accept: supportedFileTypes,\n onInput: (event: FormEvent<HTMLInputElement>) => {\n handleFileInputChange(event);\n }\n },\n validation,\n showSpinner,\n customCssClasses,\n customContent\n }\n }\n />\n </span>\n\n { showSpinner && <Spinner /> }\n\n { fileDisplayStyle === 'names' && activeFileList.length > 0 && (\n <span className=\"uploadedFileNames\">\n { activeFileList.map((file, index) => (\n <small key={ index } className=\"uploadedFileName\">\n { file.name }{ index < activeFileList.length - 1 ? ', ' : '' }\n </small>\n )) }\n </span>\n ) }\n\n <ValidationMessages name={ field.name } validation={ validation } />\n </label>\n\n { fileDisplayStyle === 'list' && activeFileList.length > 0 && (\n <FileAttachmentsList\n customFileListSettings={ fileListSettings }\n files={ activeFileList }\n onFilesRemoved={ handleFilesEdited }\n onFilesEdited={ handleFilesEdited }\n />\n ) }\n </div>\n );\n};\n\nexport default { DragAndDropFileUpload };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import React from 'react';
|
|
4
|
+
import { getSafeLinkHref } from '../../../helpers/urlHelpers';
|
|
4
5
|
export const Link = ({
|
|
5
6
|
href,
|
|
6
7
|
label,
|
|
7
8
|
target = '_self',
|
|
8
9
|
customCssClass = ''
|
|
9
10
|
}) => /*#__PURE__*/React.createElement("a", {
|
|
10
|
-
href: href,
|
|
11
|
+
href: getSafeLinkHref(href),
|
|
11
12
|
title: label,
|
|
12
13
|
target: target,
|
|
13
14
|
className: `link ${customCssClass}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.js","names":["React","Link","href","label","target","customCssClass","createElement","title","className","rel","undefined"],"sources":["../../../../../src/components/navigation/link/Link.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nexport interface LinkProps {\n href: string;\n label: string;\n target?: '_self' | '_blank' | '_parent' | '_top';\n customCssClass?: string;\n}\n\nexport const Link: React.FC<LinkProps> = ({\n href,\n label,\n target = '_self',\n customCssClass = ''\n}) => (\n <a\n href={ href }\n title={ label }\n target={ target }\n className={ `link ${ customCssClass }` }\n rel={ target === '_blank' ? 'noopener noreferrer' : undefined }\n >\n { label }\n </a>\n);\n\nexport default Link;"],"mappings":"AAAA,YAAY;;AAEZ,OAAOA,KAAK,MAAM,OAAO;
|
|
1
|
+
{"version":3,"file":"Link.js","names":["React","getSafeLinkHref","Link","href","label","target","customCssClass","createElement","title","className","rel","undefined"],"sources":["../../../../../src/components/navigation/link/Link.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { getSafeLinkHref } from '../../../helpers/urlHelpers';\n\nexport interface LinkProps {\n href: string;\n label: string;\n target?: '_self' | '_blank' | '_parent' | '_top';\n customCssClass?: string;\n}\n\nexport const Link: React.FC<LinkProps> = ({\n href,\n label,\n target = '_self',\n customCssClass = ''\n}) => (\n <a\n href={ getSafeLinkHref(href) }\n title={ label }\n target={ target }\n className={ `link ${ customCssClass }` }\n rel={ target === '_blank' ? 'noopener noreferrer' : undefined }\n >\n { label }\n </a>\n);\n\nexport default Link;"],"mappings":"AAAA,YAAY;;AAEZ,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,eAAe,QAAQ,6BAA6B;AAS7D,OAAO,MAAMC,IAAyB,GAAGA,CAAC;EACxCC,IAAI;EACJC,KAAK;EACLC,MAAM,GAAG,OAAO;EAChBC,cAAc,GAAG;AACnB,CAAC,kBACCN,KAAA,CAAAO,aAAA;EACEJ,IAAI,EAAGF,eAAe,CAACE,IAAI,CAAG;EAC9BK,KAAK,EAAGJ,KAAO;EACfC,MAAM,EAAGA,MAAQ;EACjBI,SAAS,EAAG,QAASH,cAAc,EAAK;EACxCI,GAAG,EAAGL,MAAM,KAAK,QAAQ,GAAG,qBAAqB,GAAGM;AAAW,GAE7DP,KACD,CACJ;AAED,eAAeF,IAAI","ignoreList":[]}
|
|
@@ -4,8 +4,10 @@ import React, { useContext } from 'react';
|
|
|
4
4
|
import { ThemeSwitch } from '../themeSwitch/ThemeSwitch';
|
|
5
5
|
import { UserContext } from '../../../contextProviders/userContext/UserContextProvider';
|
|
6
6
|
import { SimpleButton } from '../../form/buttons/SimpleButton';
|
|
7
|
-
import './devToolbar.css';
|
|
8
7
|
import { SidePanel } from '../../design/sidePanel/SidePanel';
|
|
8
|
+
|
|
9
|
+
// @ts-ignore SCSS side-effect imports are handled by the bundler.
|
|
10
|
+
import './devToolbar.css';
|
|
9
11
|
export const DevToolbar = () => {
|
|
10
12
|
const context = useContext(UserContext);
|
|
11
13
|
const env = process.env.NODE_ENV;
|
|
@@ -36,8 +38,8 @@ export const DevToolbar = () => {
|
|
|
36
38
|
}
|
|
37
39
|
}
|
|
38
40
|
}
|
|
39
|
-
} catch
|
|
40
|
-
console.
|
|
41
|
+
} catch {
|
|
42
|
+
console.warn('Could not access stylesheet.');
|
|
41
43
|
}
|
|
42
44
|
}
|
|
43
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevToolbar.js","names":["React","useContext","ThemeSwitch","UserContext","SimpleButton","SidePanel","DevToolbar","context","env","process","NODE_ENV","handleThemeChange","newTheme","applyThemeChange","listThemeCssVariables","stylesheets","document","styleSheets","i","length","stylesheet","ownerNode","id","includes","rules","cssRules","j","rule","CSSStyleRule","selectorText","k","style","prop","startsWith","console","log","getPropertyValue","trim","
|
|
1
|
+
{"version":3,"file":"DevToolbar.js","names":["React","useContext","ThemeSwitch","UserContext","SimpleButton","SidePanel","DevToolbar","context","env","process","NODE_ENV","handleThemeChange","newTheme","applyThemeChange","listThemeCssVariables","stylesheets","document","styleSheets","i","length","stylesheet","ownerNode","id","includes","rules","cssRules","j","rule","CSSStyleRule","selectorText","k","style","prop","startsWith","console","log","getPropertyValue","trim","warn","createElement","open","size","position","panelLabel","className","onThemeChangeAction","cssClass","label","onClickHandler"],"sources":["../../../../../src/components/testing/devToolbar/DevToolbar.tsx"],"sourcesContent":["'use client';\n\nimport React, { useContext } from 'react';\nimport { ThemeSwitch } from '../themeSwitch/ThemeSwitch';\nimport { UserContext } from '../../../contextProviders/userContext/UserContextProvider';\nimport { SimpleButton } from '../../form/buttons/SimpleButton';\nimport { SidePanel } from '../../design/sidePanel/SidePanel';\n\n// @ts-ignore SCSS side-effect imports are handled by the bundler.\nimport './devToolbar.scss';\n\nexport const DevToolbar: React.FC = () => {\n const context = useContext(UserContext);\n\n const env = process.env.NODE_ENV;\n\n const handleThemeChange = (newTheme: string) => {\n if (context && context?.applyThemeChange) {\n context.applyThemeChange(newTheme);\n }\n };\n\n const listThemeCssVariables = () => {\n const stylesheets = document.styleSheets;\n\n // Loop through all stylesheets\n for (let i = 0; i < stylesheets.length; i += 1) {\n const stylesheet = stylesheets[i];\n\n if (stylesheet && stylesheet.ownerNode && 'id' in stylesheet.ownerNode && stylesheet.ownerNode.id.includes('x15-ui-library-theme')) {\n try {\n const rules = stylesheet.cssRules || stylesheet.rules;\n for (let j = 0; j < rules.length; j += 1) {\n const rule = rules[j];\n\n if (rule instanceof CSSStyleRule) {\n if (rule.selectorText === ':root') {\n for (let k = 0; k < rule.style.length; k += 1) {\n const prop = rule.style[k];\n if (prop.startsWith('--')) {\n console.log(`${ prop }: ${ rule.style.getPropertyValue(prop).trim() }`);\n }\n }\n }\n }\n }\n } catch {\n console.warn('Could not access stylesheet.');\n }\n }\n }\n };\n\n return (\n <SidePanel {\n ...{\n id: 'devToolbar',\n open: true,\n size: 's',\n position: 'top',\n panelLabel: 'dev toolbar'\n }\n }\n >\n <aside className=\"devToolbar\">\n <div>Environment: { env }</div>\n <ThemeSwitch onThemeChangeAction={ handleThemeChange } />\n <SimpleButton cssClass=\"button primary compact\" label=\"List css variables\" id=\"devCssTool\" onClickHandler={ listThemeCssVariables } />\n </aside>\n </SidePanel>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
export const BLACKLISTED_FILE_TYPES = [
|
|
2
2
|
// Executable files
|
|
3
|
-
'exe', 'msi', 'msp', 'com', 'dll', 'ocx', 'sys', 'hta',
|
|
3
|
+
'exe', 'msi', 'msp', 'com', 'dll', 'ocx', 'sys', 'hta', 'scr', 'pif', 'cpl', 'msc', 'mst', 'jar', 'gadget', 'application', 'appx', 'appxbundle', 'msix', 'msixbundle',
|
|
4
4
|
// Batch, script or config files
|
|
5
|
-
'sh', 'cmd', 'bat', 'ps1', 'ps2', 'ini', 'config',
|
|
5
|
+
'sh', 'cmd', 'bat', 'ps1', 'ps2', 'psm1', 'psd1', 'ps1xml', 'js', 'jse', 'vbs', 'vbe', 'wsf', 'wsh', 'ws', 'reg', 'inf', 'ini', 'config',
|
|
6
|
+
// Help files and disk images, which can carry or mount executables
|
|
7
|
+
'chm', 'iso', 'img', 'vhd', 'vhdx',
|
|
6
8
|
// Shortcuts
|
|
7
9
|
'lnk', 'url', 'scf'];
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
|
|
11
|
+
// SVG is deliberately absent from the defaults: an SVG can carry script, which runs if the app later
|
|
12
|
+
// serves the upload from its own origin. Apps that need SVG uploads can opt in through validFiles.
|
|
13
|
+
export const DEFAULT_UPLOAD_FILE_TYPES = ['.json', '.xml', '.csv', '.eml', 'image/png', 'image/jpeg', 'image/gif', 'text/plain', 'text/markdown', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/pdf'];
|
|
14
|
+
export const DEFAULT_UPLOAD_FILE_EXTENSIONS = ['json', 'xml', 'csv', 'eml', 'png', 'jpg', 'jpeg', 'gif', 'txt', 'md', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf'];
|
|
10
15
|
export default {
|
|
11
16
|
BLACKLISTED_FILE_TYPES,
|
|
12
17
|
DEFAULT_UPLOAD_FILE_TYPES,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileUploadTypes.js","names":["BLACKLISTED_FILE_TYPES","DEFAULT_UPLOAD_FILE_TYPES","DEFAULT_UPLOAD_FILE_EXTENSIONS"],"sources":["../../../src/constants/fileUploadTypes.ts"],"sourcesContent":["export const BLACKLISTED_FILE_TYPES = [\n // Executable files\n 'exe',\n 'msi',\n 'msp',\n 'com',\n 'dll',\n 'ocx',\n 'sys',\n 'hta',\n // Batch, script or config files\n 'sh',\n 'cmd',\n 'bat',\n 'ps1',\n 'ps2',\n 'ini',\n 'config',\n // Shortcuts\n 'lnk',\n 'url',\n 'scf',\n];\n\nexport const DEFAULT_UPLOAD_FILE_TYPES = [\n '.json',\n '.xml',\n '.csv',\n '
|
|
1
|
+
{"version":3,"file":"fileUploadTypes.js","names":["BLACKLISTED_FILE_TYPES","DEFAULT_UPLOAD_FILE_TYPES","DEFAULT_UPLOAD_FILE_EXTENSIONS"],"sources":["../../../src/constants/fileUploadTypes.ts"],"sourcesContent":["export const BLACKLISTED_FILE_TYPES = [\n // Executable files\n 'exe',\n 'msi',\n 'msp',\n 'com',\n 'dll',\n 'ocx',\n 'sys',\n 'hta',\n 'scr',\n 'pif',\n 'cpl',\n 'msc',\n 'mst',\n 'jar',\n 'gadget',\n 'application',\n 'appx',\n 'appxbundle',\n 'msix',\n 'msixbundle',\n // Batch, script or config files\n 'sh',\n 'cmd',\n 'bat',\n 'ps1',\n 'ps2',\n 'psm1',\n 'psd1',\n 'ps1xml',\n 'js',\n 'jse',\n 'vbs',\n 'vbe',\n 'wsf',\n 'wsh',\n 'ws',\n 'reg',\n 'inf',\n 'ini',\n 'config',\n // Help files and disk images, which can carry or mount executables\n 'chm',\n 'iso',\n 'img',\n 'vhd',\n 'vhdx',\n // Shortcuts\n 'lnk',\n 'url',\n 'scf',\n];\n\n// SVG is deliberately absent from the defaults: an SVG can carry script, which runs if the app later\n// serves the upload from its own origin. Apps that need SVG uploads can opt in through validFiles.\nexport const DEFAULT_UPLOAD_FILE_TYPES = [\n '.json',\n '.xml',\n '.csv',\n '.eml',\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'text/plain',\n 'text/markdown',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/pdf'\n];\n\nexport const DEFAULT_UPLOAD_FILE_EXTENSIONS = [\n 'json',\n 'xml',\n 'csv',\n 'eml',\n 'png',\n 'jpg',\n 'jpeg',\n 'gif',\n 'txt',\n 'md',\n 'doc',\n 'docx',\n 'xls',\n 'xlsx',\n 'ppt',\n 'pptx',\n 'pdf'\n];\n\nexport default {\n BLACKLISTED_FILE_TYPES,\n DEFAULT_UPLOAD_FILE_TYPES,\n DEFAULT_UPLOAD_FILE_EXTENSIONS\n};\n"],"mappings":"AAAA,OAAO,MAAMA,sBAAsB,GAAG;AACpC;AACA,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,QAAQ,EACR,aAAa,EACb,MAAM,EACN,YAAY,EACZ,MAAM,EACN,YAAY;AACZ;AACA,IAAI,EACJ,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,KAAK,EACL,QAAQ;AACR;AACA,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM;AACN;AACA,KAAK,EACL,KAAK,EACL,KAAK,CACN;;AAED;AACA;AACA,OAAO,MAAMC,yBAAyB,GAAG,CACvC,OAAO,EACP,MAAM,EACN,MAAM,EACN,MAAM,EACN,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,yEAAyE,EACzE,0BAA0B,EAC1B,mEAAmE,EACnE,+BAA+B,EAC/B,2EAA2E,EAC3E,iBAAiB,CAClB;AAED,OAAO,MAAMC,8BAA8B,GAAG,CAC5C,MAAM,EACN,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,KAAK,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,KAAK,CACN;AAED,eAAe;EACbF,sBAAsB;EACtBC,yBAAyB;EACzBC;AACF,CAAC","ignoreList":[]}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
+
const parseDate = value => {
|
|
2
|
+
const parsedDate = new Date(value instanceof Date ? value.getTime() : value);
|
|
3
|
+
return Number.isNaN(parsedDate.getTime()) ? null : parsedDate;
|
|
4
|
+
};
|
|
5
|
+
const logInvalidDate = () => {
|
|
6
|
+
console.error('Invalid date format');
|
|
7
|
+
return null;
|
|
8
|
+
};
|
|
9
|
+
|
|
1
10
|
// Returns format 2022-09-06 for the 6th of September 2022
|
|
2
11
|
export const dateToShortIsoString = date => {
|
|
3
|
-
const newDate =
|
|
4
|
-
if (
|
|
5
|
-
|
|
6
|
-
return null;
|
|
12
|
+
const newDate = parseDate(date);
|
|
13
|
+
if (!newDate) {
|
|
14
|
+
return logInvalidDate();
|
|
7
15
|
}
|
|
8
16
|
newDate.setTime(newDate.getTime() - newDate.getTimezoneOffset() * 60000);
|
|
9
17
|
return newDate.toISOString().substring(0, 10);
|
|
@@ -14,18 +22,22 @@ export const isValidDate = (dateString, minDate) => {
|
|
|
14
22
|
if (!dateString) {
|
|
15
23
|
return false;
|
|
16
24
|
}
|
|
17
|
-
const newDate =
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
25
|
+
const newDate = parseDate(dateString);
|
|
26
|
+
if (!newDate) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
if (!minDate) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
const minimumDate = parseDate(minDate);
|
|
33
|
+
return minimumDate !== null && newDate.getTime() >= minimumDate.getTime();
|
|
21
34
|
};
|
|
22
35
|
|
|
23
36
|
// Returns format 06 Sep 2022
|
|
24
37
|
export const dateToShortReadableDate = (date, locale = 'en-AU') => {
|
|
25
|
-
const newDate =
|
|
26
|
-
if (
|
|
27
|
-
|
|
28
|
-
return null;
|
|
38
|
+
const newDate = parseDate(date);
|
|
39
|
+
if (!newDate) {
|
|
40
|
+
return logInvalidDate();
|
|
29
41
|
}
|
|
30
42
|
return newDate.toLocaleDateString(locale, {
|
|
31
43
|
day: '2-digit',
|
|
@@ -36,26 +48,25 @@ export const dateToShortReadableDate = (date, locale = 'en-AU') => {
|
|
|
36
48
|
|
|
37
49
|
// Returns format Sep
|
|
38
50
|
export const dateToShortReadableMonth = date => {
|
|
39
|
-
const newDate =
|
|
40
|
-
newDate
|
|
41
|
-
|
|
42
|
-
console.error('Invalid date format');
|
|
43
|
-
return null;
|
|
51
|
+
const newDate = parseDate(date);
|
|
52
|
+
if (!newDate) {
|
|
53
|
+
return logInvalidDate();
|
|
44
54
|
}
|
|
55
|
+
newDate.setDate(5); // Set to 5 to avoid timezone issues. If set to 1, for some timezones when it is converted to UTC it jumps to the day before which is the previous month
|
|
56
|
+
|
|
45
57
|
return newDate.toUTCString().substring(8, 11);
|
|
46
58
|
};
|
|
47
59
|
export const timeStampToShortReadableDate = (timestamp, locale = 'en-AU') => {
|
|
48
|
-
const newDate =
|
|
49
|
-
if (
|
|
60
|
+
const newDate = parseDate(timestamp);
|
|
61
|
+
if (newDate) {
|
|
50
62
|
return dateToShortReadableDate(newDate, locale);
|
|
51
63
|
}
|
|
52
64
|
return timestamp;
|
|
53
65
|
};
|
|
54
66
|
export const dateToReadableTime = (date, locale = 'en-AU') => {
|
|
55
|
-
const newDate =
|
|
56
|
-
if (
|
|
57
|
-
|
|
58
|
-
return null;
|
|
67
|
+
const newDate = parseDate(date);
|
|
68
|
+
if (!newDate) {
|
|
69
|
+
return logInvalidDate();
|
|
59
70
|
}
|
|
60
71
|
const readableTime = newDate.toLocaleTimeString(locale, {
|
|
61
72
|
hour: '2-digit',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateHelpers.js","names":["
|
|
1
|
+
{"version":3,"file":"dateHelpers.js","names":["parseDate","value","parsedDate","Date","getTime","Number","isNaN","logInvalidDate","console","error","dateToShortIsoString","date","newDate","setTime","getTimezoneOffset","toISOString","substring","isValidDate","dateString","minDate","minimumDate","dateToShortReadableDate","locale","toLocaleDateString","day","month","year","dateToShortReadableMonth","setDate","toUTCString","timeStampToShortReadableDate","timestamp","dateToReadableTime","readableTime","toLocaleTimeString","hour","minute","hour12","replace","dateToShortReadableDateTime","readableDate","getLastDateOfMonth","getFullYear","getMonth","daysSince","currentDate","diffInMs","Math","abs","diffInDays"],"sources":["../../../src/helpers/dateHelpers.ts"],"sourcesContent":[" \n\nconst parseDate = (value: Date | string | number): Date | null => {\n const parsedDate = new Date(value instanceof Date ? value.getTime() : value);\n return Number.isNaN(parsedDate.getTime()) ? null : parsedDate;\n};\n\nconst logInvalidDate = (): null => {\n console.error('Invalid date format');\n return null;\n};\n\n// Returns format 2022-09-06 for the 6th of September 2022\nexport const dateToShortIsoString = (date: Date | string): string | null => {\n const newDate = parseDate(date);\n if (!newDate) {\n return logInvalidDate();\n }\n\n newDate.setTime(newDate.getTime() - newDate.getTimezoneOffset() * 60000);\n return newDate.toISOString().substring(0, 10);\n};\n\n// https://stackoverflow.com/questions/7445328/check-if-a-string-is-a-date-value\nexport const isValidDate = (dateString: string | number | null | undefined, minDate?: string): boolean => {\n if (!dateString) {\n return false;\n }\n\n const newDate = parseDate(dateString);\n if (!newDate) {\n return false;\n }\n if (!minDate) {\n return true;\n }\n\n const minimumDate = parseDate(minDate);\n return minimumDate !== null && newDate.getTime() >= minimumDate.getTime();\n};\n\n// Returns format 06 Sep 2022\nexport const dateToShortReadableDate = (date: Date | string | number, locale: string = 'en-AU'): string | null => {\n const newDate = parseDate(date);\n if (!newDate) {\n return logInvalidDate();\n }\n\n return newDate.toLocaleDateString(locale, {\n day: '2-digit',\n month: 'short',\n year: 'numeric'\n });\n};\n\n// Returns format Sep\nexport const dateToShortReadableMonth = (date: Date | string | number): string | null => {\n const newDate = parseDate(date);\n if (!newDate) {\n return logInvalidDate();\n }\n newDate.setDate(5); // Set to 5 to avoid timezone issues. If set to 1, for some timezones when it is converted to UTC it jumps to the day before which is the previous month\n\n return newDate.toUTCString().substring(8, 11);\n};\n\nexport const timeStampToShortReadableDate = (timestamp: string | number, locale: string = 'en-AU'): string | number | null | undefined => {\n const newDate = parseDate(timestamp);\n if (newDate) {\n return dateToShortReadableDate(newDate, locale);\n }\n return timestamp;\n};\n\nexport const dateToReadableTime = (date: Date | string | number, locale: string = 'en-AU'): string | null => {\n const newDate = parseDate(date);\n if (!newDate) {\n return logInvalidDate();\n }\n\n const readableTime = newDate.toLocaleTimeString(locale, {\n hour: '2-digit',\n minute: '2-digit',\n hour12: true\n }).replace(/^0|\\s+/g, '');\n\n return readableTime;\n};\n\nexport const dateToShortReadableDateTime = (date: Date | string | number, locale: string = 'en-AU'): string | null => {\n const readableDate = dateToShortReadableDate(date, locale);\n const readableTime = dateToReadableTime(date, locale);\n return `${ readableDate } ${ readableTime }`;\n};\n\nexport const getLastDateOfMonth = (date: Date) => new Date(date.getFullYear(), date.getMonth() + 1, 0);\n\nexport const daysSince = (date: Date) => {\n const currentDate: Date = new Date();\n const diffInMs = Math.abs(currentDate.getTime() - date.getTime());\n\n const diffInDays = diffInMs / (1000 * 60 * 60 * 24);\n\n return diffInDays;\n};\n\nexport default {\n dateToShortIsoString,\n isValidDate,\n dateToShortReadableDate,\n dateToShortReadableMonth,\n timeStampToShortReadableDate,\n dateToReadableTime,\n dateToShortReadableDateTime,\n getLastDateOfMonth,\n daysSince\n};"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Returns the lower-case extension of a file name or path. `?` and `#` are ordinary characters in
|
|
3
|
+
file names, so `payload#.exe` is an `exe`. Trailing dots and spaces are ignored, as Windows drops
|
|
4
|
+
them when saving, so `payload.exe.` is an `exe` too. Names without an extension (including
|
|
5
|
+
dot-files such as `.env`) return an empty string. For URLs use getUrlExtension.
|
|
6
|
+
*/
|
|
7
|
+
export const getFileExtension = fileName => {
|
|
8
|
+
const name = (fileName.split(/[/\\]/).pop() ?? '').replace(/[.\s]+$/, '');
|
|
9
|
+
const dotIndex = name.lastIndexOf('.');
|
|
10
|
+
return dotIndex > 0 ? name.slice(dotIndex + 1).toLowerCase() : '';
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// Any fixed origin works: it only lets relative URLs parse, and only the pathname is inspected.
|
|
14
|
+
const URL_PARSE_BASE = 'http://localhost/';
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
Returns the lower-case extension of a URL's path, ignoring the host, query string and fragment, so
|
|
18
|
+
`https://files.example.md` has no extension. Relative URLs are supported.
|
|
19
|
+
*/
|
|
20
|
+
export const getUrlExtension = url => {
|
|
21
|
+
let pathname;
|
|
22
|
+
try {
|
|
23
|
+
pathname = new URL(url, URL_PARSE_BASE).pathname;
|
|
24
|
+
} catch {
|
|
25
|
+
pathname = url.split(/[?#]/)[0];
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
pathname = decodeURIComponent(pathname);
|
|
29
|
+
} catch {
|
|
30
|
+
// Malformed percent-encoding is left as-is.
|
|
31
|
+
}
|
|
32
|
+
return getFileExtension(pathname);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
// FileReader rather than Blob.text()/arrayBuffer(), which older browsers and jsdom lack.
|
|
36
|
+
const readFile = (file, asText) => new Promise((resolve, reject) => {
|
|
37
|
+
const reader = new FileReader();
|
|
38
|
+
reader.onload = () => resolve(reader.result);
|
|
39
|
+
reader.onerror = () => reject(reader.error ?? new Error('The file could not be read.'));
|
|
40
|
+
if (asText) {
|
|
41
|
+
reader.readAsText(file);
|
|
42
|
+
} else {
|
|
43
|
+
reader.readAsArrayBuffer(file);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
export const readFileAsText = file => readFile(file, true);
|
|
47
|
+
export const readFileAsArrayBuffer = file => readFile(file, false);
|
|
48
|
+
//# sourceMappingURL=fileHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileHelpers.js","names":["getFileExtension","fileName","name","split","pop","replace","dotIndex","lastIndexOf","slice","toLowerCase","URL_PARSE_BASE","getUrlExtension","url","pathname","URL","decodeURIComponent","readFile","file","asText","Promise","resolve","reject","reader","FileReader","onload","result","onerror","error","Error","readAsText","readAsArrayBuffer","readFileAsText","readFileAsArrayBuffer"],"sources":["../../../src/helpers/fileHelpers.ts"],"sourcesContent":["/*\n Returns the lower-case extension of a file name or path. `?` and `#` are ordinary characters in\n file names, so `payload#.exe` is an `exe`. Trailing dots and spaces are ignored, as Windows drops\n them when saving, so `payload.exe.` is an `exe` too. Names without an extension (including\n dot-files such as `.env`) return an empty string. For URLs use getUrlExtension.\n */\nexport const getFileExtension = (fileName: string): string => {\n const name = (fileName.split(/[/\\\\]/).pop() ?? '').replace(/[.\\s]+$/, '');\n const dotIndex = name.lastIndexOf('.');\n return dotIndex > 0 ? name.slice(dotIndex + 1).toLowerCase() : '';\n};\n\n// Any fixed origin works: it only lets relative URLs parse, and only the pathname is inspected.\nconst URL_PARSE_BASE = 'http://localhost/';\n\n/*\n Returns the lower-case extension of a URL's path, ignoring the host, query string and fragment, so\n `https://files.example.md` has no extension. Relative URLs are supported.\n */\nexport const getUrlExtension = (url: string): string => {\n let pathname: string;\n try {\n pathname = new URL(url, URL_PARSE_BASE).pathname;\n } catch {\n pathname = url.split(/[?#]/)[0];\n }\n try {\n pathname = decodeURIComponent(pathname);\n } catch {\n // Malformed percent-encoding is left as-is.\n }\n return getFileExtension(pathname);\n};\n\n// FileReader rather than Blob.text()/arrayBuffer(), which older browsers and jsdom lack.\nconst readFile = <T extends string | ArrayBuffer>(file: Blob, asText: boolean): Promise<T> => new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as T);\n reader.onerror = () => reject(reader.error ?? new Error('The file could not be read.'));\n if (asText) {\n reader.readAsText(file);\n } else {\n reader.readAsArrayBuffer(file);\n }\n});\n\nexport const readFileAsText = (file: Blob): Promise<string> => readFile<string>(file, true);\n\nexport const readFileAsArrayBuffer = (file: Blob): Promise<ArrayBuffer> => readFile<ArrayBuffer>(file, false);\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,gBAAgB,GAAIC,QAAgB,IAAa;EAC5D,MAAMC,IAAI,GAAG,CAACD,QAAQ,CAACE,KAAK,CAAC,OAAO,CAAC,CAACC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAEC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;EACzE,MAAMC,QAAQ,GAAGJ,IAAI,CAACK,WAAW,CAAC,GAAG,CAAC;EACtC,OAAOD,QAAQ,GAAG,CAAC,GAAGJ,IAAI,CAACM,KAAK,CAACF,QAAQ,GAAG,CAAC,CAAC,CAACG,WAAW,CAAC,CAAC,GAAG,EAAE;AACnE,CAAC;;AAED;AACA,MAAMC,cAAc,GAAG,mBAAmB;;AAE1C;AACA;AACA;AACA;AACA,OAAO,MAAMC,eAAe,GAAIC,GAAW,IAAa;EACtD,IAAIC,QAAgB;EACpB,IAAI;IACFA,QAAQ,GAAG,IAAIC,GAAG,CAACF,GAAG,EAAEF,cAAc,CAAC,CAACG,QAAQ;EAClD,CAAC,CAAC,MAAM;IACNA,QAAQ,GAAGD,GAAG,CAACT,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACjC;EACA,IAAI;IACFU,QAAQ,GAAGE,kBAAkB,CAACF,QAAQ,CAAC;EACzC,CAAC,CAAC,MAAM;IACN;EAAA;EAEF,OAAOb,gBAAgB,CAACa,QAAQ,CAAC;AACnC,CAAC;;AAED;AACA,MAAMG,QAAQ,GAAGA,CAAiCC,IAAU,EAAEC,MAAe,KAAiB,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;EAC7H,MAAMC,MAAM,GAAG,IAAIC,UAAU,CAAC,CAAC;EAC/BD,MAAM,CAACE,MAAM,GAAG,MAAMJ,OAAO,CAACE,MAAM,CAACG,MAAW,CAAC;EACjDH,MAAM,CAACI,OAAO,GAAG,MAAML,MAAM,CAACC,MAAM,CAACK,KAAK,IAAI,IAAIC,KAAK,CAAC,6BAA6B,CAAC,CAAC;EACvF,IAAIV,MAAM,EAAE;IACVI,MAAM,CAACO,UAAU,CAACZ,IAAI,CAAC;EACzB,CAAC,MAAM;IACLK,MAAM,CAACQ,iBAAiB,CAACb,IAAI,CAAC;EAChC;AACF,CAAC,CAAC;AAEF,OAAO,MAAMc,cAAc,GAAId,IAAU,IAAsBD,QAAQ,CAASC,IAAI,EAAE,IAAI,CAAC;AAE3F,OAAO,MAAMe,qBAAqB,GAAIf,IAAU,IAA2BD,QAAQ,CAAcC,IAAI,EAAE,KAAK,CAAC","ignoreList":[]}
|
|
@@ -3,6 +3,8 @@ export { binaryFindInArray, addAndSortArray, moveItemInArrayMutate, moveItemInAr
|
|
|
3
3
|
export { transformPlacesData, extractNamePieces } from './dataHelpers';
|
|
4
4
|
export { dateToShortIsoString, isValidDate, dateToShortReadableDate, dateToShortReadableMonth, timeStampToShortReadableDate, dateToReadableTime, dateToShortReadableDateTime, getLastDateOfMonth, daysSince } from './dateHelpers';
|
|
5
5
|
export { USER_CURRENCY, intlCurrencyFormatter, intlNumberFormatter, formatNumberForLocale, formatAsCurrencyForLocale, getNumberAbbreviation, formatRoundedNumberWithAbbreviation, formatNumberWithAbbreviation, formatNumberForChartAxis, formatAsSimpleCurrencyForChartAxis, formatAsInternationalCurrencyForChartAxis, formatAsCurrencyWithAbbreviation, formatFileSize } from './formatters';
|
|
6
|
+
export { getFileExtension, getUrlExtension, readFileAsText, readFileAsArrayBuffer } from './fileHelpers';
|
|
7
|
+
export { prefersReducedMotion, getPreferredScrollBehavior, getScrollSettings } from './interactionsHelper';
|
|
6
8
|
export { getRandomNumberBelow, getRandomBetweenInclusive, getRandomBetweenExclusive, hashCode, roundToDecimal, formatNumberToMinDigits, formatDigitalTime } from './numberHelpers';
|
|
7
9
|
export { richTextParser, capitalize, capitalizeFirstLetter, lowerCaseFirstLetter, getCharacterCount, clampToGraphemeMax, useAnInsteadOfA, splitCamelCase, pluralize, pluralizeIfNeeded, getInitialsOrAcronym } from './stringHelpers';
|
|
8
10
|
export { objectsAreTheSame, isAnObject, createCompareValueOverride, isReactElement, isNonElementObject, isPlainObject, deepMergeObjects, overrideMergeObjects, makeInheritanceObject, updateNestedProperty, filterObject, getArrayOfObjectKeys, getArrayOfReadableObjectKeys, getBranchFromPath, deepRemoveProps } from './objectHelpers';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["getMinAge","getMaxAge","getMinAndMaxAges","validateBirthdate","isDateEntryComplete","getAgeInWeeks","getAgeInYears","binaryFindInArray","addAndSortArray","moveItemInArrayMutate","moveItemInArrayCopy","getRandomItemFromArray","getItemIndexWithinArray","getRoundedMedian","getMostOccurringBoolean","cssClassesArrayToString","transformPlacesData","extractNamePieces","dateToShortIsoString","isValidDate","dateToShortReadableDate","dateToShortReadableMonth","timeStampToShortReadableDate","dateToReadableTime","dateToShortReadableDateTime","getLastDateOfMonth","daysSince","USER_CURRENCY","intlCurrencyFormatter","intlNumberFormatter","formatNumberForLocale","formatAsCurrencyForLocale","getNumberAbbreviation","formatRoundedNumberWithAbbreviation","formatNumberWithAbbreviation","formatNumberForChartAxis","formatAsSimpleCurrencyForChartAxis","formatAsInternationalCurrencyForChartAxis","formatAsCurrencyWithAbbreviation","formatFileSize","getRandomNumberBelow","getRandomBetweenInclusive","getRandomBetweenExclusive","hashCode","roundToDecimal","formatNumberToMinDigits","formatDigitalTime","richTextParser","capitalize","capitalizeFirstLetter","lowerCaseFirstLetter","getCharacterCount","clampToGraphemeMax","useAnInsteadOfA","splitCamelCase","pluralize","pluralizeIfNeeded","getInitialsOrAcronym","objectsAreTheSame","isAnObject","createCompareValueOverride","isReactElement","isNonElementObject","isPlainObject","deepMergeObjects","overrideMergeObjects","makeInheritanceObject","updateNestedProperty","filterObject","getArrayOfObjectKeys","getArrayOfReadableObjectKeys","getBranchFromPath","deepRemoveProps","renderIcon","isSvgIconDefinition","isIconProps","isEmptyIconSource"],"sources":["../../../src/helpers/index.ts"],"sourcesContent":["export {\n getMinAge,\n getMaxAge,\n getMinAndMaxAges,\n validateBirthdate,\n isDateEntryComplete,\n getAgeInWeeks,\n getAgeInYears\n} from './ageHelpers';\n\nexport {\n binaryFindInArray,\n addAndSortArray,\n moveItemInArrayMutate,\n moveItemInArrayCopy,\n getRandomItemFromArray,\n getItemIndexWithinArray,\n getRoundedMedian,\n getMostOccurringBoolean,\n cssClassesArrayToString\n} from './arrayHelpers';\n\nexport {\n transformPlacesData,\n extractNamePieces\n} from './dataHelpers';\nexport type { NamePieces } from './dataHelpers';\n\nexport {\n dateToShortIsoString,\n isValidDate,\n dateToShortReadableDate,\n dateToShortReadableMonth,\n timeStampToShortReadableDate,\n dateToReadableTime,\n dateToShortReadableDateTime,\n getLastDateOfMonth,\n daysSince\n} from './dateHelpers';\n\nexport {\n USER_CURRENCY,\n intlCurrencyFormatter,\n intlNumberFormatter,\n formatNumberForLocale,\n formatAsCurrencyForLocale,\n getNumberAbbreviation,\n formatRoundedNumberWithAbbreviation,\n formatNumberWithAbbreviation,\n formatNumberForChartAxis,\n formatAsSimpleCurrencyForChartAxis,\n formatAsInternationalCurrencyForChartAxis,\n formatAsCurrencyWithAbbreviation,\n formatFileSize\n} from './formatters';\n\nexport {\n getRandomNumberBelow,\n getRandomBetweenInclusive,\n getRandomBetweenExclusive,\n hashCode,\n roundToDecimal,\n formatNumberToMinDigits,\n formatDigitalTime\n} from './numberHelpers';\n\nexport {\n richTextParser,\n capitalize,\n capitalizeFirstLetter,\n lowerCaseFirstLetter,\n getCharacterCount,\n clampToGraphemeMax,\n useAnInsteadOfA,\n splitCamelCase,\n pluralize,\n pluralizeIfNeeded,\n getInitialsOrAcronym\n} from './stringHelpers';\n\nexport {\n objectsAreTheSame,\n isAnObject,\n createCompareValueOverride,\n isReactElement,\n isNonElementObject,\n isPlainObject,\n deepMergeObjects,\n overrideMergeObjects,\n makeInheritanceObject,\n updateNestedProperty,\n filterObject,\n getArrayOfObjectKeys,\n getArrayOfReadableObjectKeys,\n getBranchFromPath,\n deepRemoveProps\n} from './objectHelpers';\nexport type {\n DeepMergeObjectsArgs,\n MakeInheritanceObjectArgs,\n UpdateNestedPropertyArgs\n} from './objectHelpers';\n\nexport {\n renderIcon,\n isSvgIconDefinition,\n isIconProps,\n isEmptyIconSource\n} from './iconHelpers';\nexport type {\n IconSource,\n RenderIconOptions,\n SvgIconDefinition,\n SvgIconSize\n} from './iconHelpers';\n"],"mappings":"AAAA,SACEA,SAAS,EACTC,SAAS,EACTC,gBAAgB,EAChBC,iBAAiB,EACjBC,mBAAmB,EACnBC,aAAa,EACbC,aAAa,QACR,cAAc;AAErB,SACEC,iBAAiB,EACjBC,eAAe,EACfC,qBAAqB,EACrBC,mBAAmB,EACnBC,sBAAsB,EACtBC,uBAAuB,EACvBC,gBAAgB,EAChBC,uBAAuB,EACvBC,uBAAuB,QAClB,gBAAgB;AAEvB,SACEC,mBAAmB,EACnBC,iBAAiB,QACZ,eAAe;AAGtB,SACEC,oBAAoB,EACpBC,WAAW,EACXC,uBAAuB,EACvBC,wBAAwB,EACxBC,4BAA4B,EAC5BC,kBAAkB,EAClBC,2BAA2B,EAC3BC,kBAAkB,EAClBC,SAAS,QACJ,eAAe;AAEtB,SACEC,aAAa,EACbC,qBAAqB,EACrBC,mBAAmB,EACnBC,qBAAqB,EACrBC,yBAAyB,EACzBC,qBAAqB,EACrBC,mCAAmC,EACnCC,4BAA4B,EAC5BC,wBAAwB,EACxBC,kCAAkC,EAClCC,yCAAyC,EACzCC,gCAAgC,EAChCC,cAAc,QACT,cAAc;AAErB,SACEC,oBAAoB,EACpBC,yBAAyB,EACzBC,yBAAyB,EACzBC,QAAQ,EACRC,cAAc,EACdC,uBAAuB,EACvBC,iBAAiB,QACZ,iBAAiB;AAExB,SACEC,cAAc,EACdC,UAAU,EACVC,qBAAqB,EACrBC,oBAAoB,EACpBC,iBAAiB,EACjBC,kBAAkB,EAClBC,eAAe,EACfC,cAAc,EACdC,SAAS,EACTC,iBAAiB,EACjBC,oBAAoB,QACf,iBAAiB;AAExB,SACEC,iBAAiB,EACjBC,UAAU,EACVC,0BAA0B,EAC1BC,cAAc,EACdC,kBAAkB,EAClBC,aAAa,EACbC,gBAAgB,EAChBC,oBAAoB,EACpBC,qBAAqB,EACrBC,oBAAoB,EACpBC,YAAY,EACZC,oBAAoB,EACpBC,4BAA4B,EAC5BC,iBAAiB,EACjBC,eAAe,QACV,iBAAiB;AAOxB,SACEC,UAAU,EACVC,mBAAmB,EACnBC,WAAW,EACXC,iBAAiB,QACZ,eAAe","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["getMinAge","getMaxAge","getMinAndMaxAges","validateBirthdate","isDateEntryComplete","getAgeInWeeks","getAgeInYears","binaryFindInArray","addAndSortArray","moveItemInArrayMutate","moveItemInArrayCopy","getRandomItemFromArray","getItemIndexWithinArray","getRoundedMedian","getMostOccurringBoolean","cssClassesArrayToString","transformPlacesData","extractNamePieces","dateToShortIsoString","isValidDate","dateToShortReadableDate","dateToShortReadableMonth","timeStampToShortReadableDate","dateToReadableTime","dateToShortReadableDateTime","getLastDateOfMonth","daysSince","USER_CURRENCY","intlCurrencyFormatter","intlNumberFormatter","formatNumberForLocale","formatAsCurrencyForLocale","getNumberAbbreviation","formatRoundedNumberWithAbbreviation","formatNumberWithAbbreviation","formatNumberForChartAxis","formatAsSimpleCurrencyForChartAxis","formatAsInternationalCurrencyForChartAxis","formatAsCurrencyWithAbbreviation","formatFileSize","getFileExtension","getUrlExtension","readFileAsText","readFileAsArrayBuffer","prefersReducedMotion","getPreferredScrollBehavior","getScrollSettings","getRandomNumberBelow","getRandomBetweenInclusive","getRandomBetweenExclusive","hashCode","roundToDecimal","formatNumberToMinDigits","formatDigitalTime","richTextParser","capitalize","capitalizeFirstLetter","lowerCaseFirstLetter","getCharacterCount","clampToGraphemeMax","useAnInsteadOfA","splitCamelCase","pluralize","pluralizeIfNeeded","getInitialsOrAcronym","objectsAreTheSame","isAnObject","createCompareValueOverride","isReactElement","isNonElementObject","isPlainObject","deepMergeObjects","overrideMergeObjects","makeInheritanceObject","updateNestedProperty","filterObject","getArrayOfObjectKeys","getArrayOfReadableObjectKeys","getBranchFromPath","deepRemoveProps","renderIcon","isSvgIconDefinition","isIconProps","isEmptyIconSource"],"sources":["../../../src/helpers/index.ts"],"sourcesContent":["export {\n getMinAge,\n getMaxAge,\n getMinAndMaxAges,\n validateBirthdate,\n isDateEntryComplete,\n getAgeInWeeks,\n getAgeInYears\n} from './ageHelpers';\n\nexport {\n binaryFindInArray,\n addAndSortArray,\n moveItemInArrayMutate,\n moveItemInArrayCopy,\n getRandomItemFromArray,\n getItemIndexWithinArray,\n getRoundedMedian,\n getMostOccurringBoolean,\n cssClassesArrayToString\n} from './arrayHelpers';\n\nexport {\n transformPlacesData,\n extractNamePieces\n} from './dataHelpers';\nexport type { NamePieces } from './dataHelpers';\n\nexport {\n dateToShortIsoString,\n isValidDate,\n dateToShortReadableDate,\n dateToShortReadableMonth,\n timeStampToShortReadableDate,\n dateToReadableTime,\n dateToShortReadableDateTime,\n getLastDateOfMonth,\n daysSince\n} from './dateHelpers';\n\nexport {\n USER_CURRENCY,\n intlCurrencyFormatter,\n intlNumberFormatter,\n formatNumberForLocale,\n formatAsCurrencyForLocale,\n getNumberAbbreviation,\n formatRoundedNumberWithAbbreviation,\n formatNumberWithAbbreviation,\n formatNumberForChartAxis,\n formatAsSimpleCurrencyForChartAxis,\n formatAsInternationalCurrencyForChartAxis,\n formatAsCurrencyWithAbbreviation,\n formatFileSize\n} from './formatters';\n\nexport {\n getFileExtension,\n getUrlExtension,\n readFileAsText,\n readFileAsArrayBuffer\n} from './fileHelpers';\n\nexport {\n prefersReducedMotion,\n getPreferredScrollBehavior,\n getScrollSettings\n} from './interactionsHelper';\nexport type { ScrollSettings } from './interactionsHelper';\n\nexport {\n getRandomNumberBelow,\n getRandomBetweenInclusive,\n getRandomBetweenExclusive,\n hashCode,\n roundToDecimal,\n formatNumberToMinDigits,\n formatDigitalTime\n} from './numberHelpers';\n\nexport {\n richTextParser,\n capitalize,\n capitalizeFirstLetter,\n lowerCaseFirstLetter,\n getCharacterCount,\n clampToGraphemeMax,\n useAnInsteadOfA,\n splitCamelCase,\n pluralize,\n pluralizeIfNeeded,\n getInitialsOrAcronym\n} from './stringHelpers';\n\nexport {\n objectsAreTheSame,\n isAnObject,\n createCompareValueOverride,\n isReactElement,\n isNonElementObject,\n isPlainObject,\n deepMergeObjects,\n overrideMergeObjects,\n makeInheritanceObject,\n updateNestedProperty,\n filterObject,\n getArrayOfObjectKeys,\n getArrayOfReadableObjectKeys,\n getBranchFromPath,\n deepRemoveProps\n} from './objectHelpers';\nexport type {\n DeepMergeObjectsArgs,\n MakeInheritanceObjectArgs,\n UpdateNestedPropertyArgs\n} from './objectHelpers';\n\nexport {\n renderIcon,\n isSvgIconDefinition,\n isIconProps,\n isEmptyIconSource\n} from './iconHelpers';\nexport type {\n IconSource,\n RenderIconOptions,\n SvgIconDefinition,\n SvgIconSize\n} from './iconHelpers';\n"],"mappings":"AAAA,SACEA,SAAS,EACTC,SAAS,EACTC,gBAAgB,EAChBC,iBAAiB,EACjBC,mBAAmB,EACnBC,aAAa,EACbC,aAAa,QACR,cAAc;AAErB,SACEC,iBAAiB,EACjBC,eAAe,EACfC,qBAAqB,EACrBC,mBAAmB,EACnBC,sBAAsB,EACtBC,uBAAuB,EACvBC,gBAAgB,EAChBC,uBAAuB,EACvBC,uBAAuB,QAClB,gBAAgB;AAEvB,SACEC,mBAAmB,EACnBC,iBAAiB,QACZ,eAAe;AAGtB,SACEC,oBAAoB,EACpBC,WAAW,EACXC,uBAAuB,EACvBC,wBAAwB,EACxBC,4BAA4B,EAC5BC,kBAAkB,EAClBC,2BAA2B,EAC3BC,kBAAkB,EAClBC,SAAS,QACJ,eAAe;AAEtB,SACEC,aAAa,EACbC,qBAAqB,EACrBC,mBAAmB,EACnBC,qBAAqB,EACrBC,yBAAyB,EACzBC,qBAAqB,EACrBC,mCAAmC,EACnCC,4BAA4B,EAC5BC,wBAAwB,EACxBC,kCAAkC,EAClCC,yCAAyC,EACzCC,gCAAgC,EAChCC,cAAc,QACT,cAAc;AAErB,SACEC,gBAAgB,EAChBC,eAAe,EACfC,cAAc,EACdC,qBAAqB,QAChB,eAAe;AAEtB,SACEC,oBAAoB,EACpBC,0BAA0B,EAC1BC,iBAAiB,QACZ,sBAAsB;AAG7B,SACEC,oBAAoB,EACpBC,yBAAyB,EACzBC,yBAAyB,EACzBC,QAAQ,EACRC,cAAc,EACdC,uBAAuB,EACvBC,iBAAiB,QACZ,iBAAiB;AAExB,SACEC,cAAc,EACdC,UAAU,EACVC,qBAAqB,EACrBC,oBAAoB,EACpBC,iBAAiB,EACjBC,kBAAkB,EAClBC,eAAe,EACfC,cAAc,EACdC,SAAS,EACTC,iBAAiB,EACjBC,oBAAoB,QACf,iBAAiB;AAExB,SACEC,iBAAiB,EACjBC,UAAU,EACVC,0BAA0B,EAC1BC,cAAc,EACdC,kBAAkB,EAClBC,aAAa,EACbC,gBAAgB,EAChBC,oBAAoB,EACpBC,qBAAqB,EACrBC,oBAAoB,EACpBC,YAAY,EACZC,oBAAoB,EACpBC,4BAA4B,EAC5BC,iBAAiB,EACjBC,eAAe,QACV,iBAAiB;AAOxB,SACEC,UAAU,EACVC,mBAAmB,EACnBC,WAAW,EACXC,iBAAiB,QACZ,eAAe","ignoreList":[]}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
// True when the user has asked the operating system to minimise non-essential motion.
|
|
2
|
+
export const prefersReducedMotion = () => typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches === true;
|
|
3
|
+
|
|
4
|
+
// Scroll behaviour for scrollIntoView / scrollTo that respects the reduced-motion preference.
|
|
5
|
+
export const getPreferredScrollBehavior = () => prefersReducedMotion() ? 'auto' : 'smooth';
|
|
1
6
|
export const getScrollSettings = event => {
|
|
2
7
|
const domNode = event.target;
|
|
3
8
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactionsHelper.js","names":["getScrollSettings","event","domNode","target","scrollHeight","clientHeight","scrollLeft","scrollTop","scrollWidth","clientWidth","hasVerticalScroller","hasHorizontalScroller","scrollerAtBottom","scrollerAtTop","scrollerAtLeft","scrollerAtRight"],"sources":["../../../src/helpers/interactionsHelper.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"interactionsHelper.js","names":["prefersReducedMotion","window","matchMedia","matches","getPreferredScrollBehavior","getScrollSettings","event","domNode","target","scrollHeight","clientHeight","scrollLeft","scrollTop","scrollWidth","clientWidth","hasVerticalScroller","hasHorizontalScroller","scrollerAtBottom","scrollerAtTop","scrollerAtLeft","scrollerAtRight"],"sources":["../../../src/helpers/interactionsHelper.ts"],"sourcesContent":["// True when the user has asked the operating system to minimise non-essential motion.\nexport const prefersReducedMotion = (): boolean =>\n typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches === true;\n\n// Scroll behaviour for scrollIntoView / scrollTo that respects the reduced-motion preference.\nexport const getPreferredScrollBehavior = (): ScrollBehavior => (prefersReducedMotion() ? 'auto' : 'smooth');\n\nexport interface ScrollSettings {\n scrollHeight: number;\n clientHeight: number;\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n clientWidth: number;\n hasVerticalScroller: boolean;\n hasHorizontalScroller: boolean;\n scrollerAtBottom: boolean;\n scrollerAtTop: boolean;\n scrollerAtLeft: boolean;\n scrollerAtRight: boolean;\n event: Event;\n}\n\nexport const getScrollSettings = (event: Event): ScrollSettings => {\n const domNode = event.target as HTMLElement;\n\n const {\n scrollHeight,\n clientHeight,\n scrollLeft,\n scrollTop,\n scrollWidth,\n clientWidth\n } = domNode;\n\n const hasVerticalScroller = scrollHeight > clientHeight;\n const hasHorizontalScroller = scrollWidth > clientWidth;\n\n const scrollerAtBottom = scrollTop + clientHeight + 100 >= scrollHeight;\n const scrollerAtTop = scrollTop <= 0;\n const scrollerAtLeft = scrollLeft <= 0;\n const scrollerAtRight = scrollLeft + clientWidth + 100 >= scrollWidth;\n\n return {\n scrollHeight,\n scrollLeft,\n clientHeight,\n clientWidth,\n hasVerticalScroller,\n hasHorizontalScroller,\n scrollTop,\n scrollWidth,\n scrollerAtBottom,\n scrollerAtTop,\n scrollerAtLeft,\n scrollerAtRight,\n event\n } as ScrollSettings;\n};\n"],"mappings":"AAAA;AACA,OAAO,MAAMA,oBAAoB,GAAGA,CAAA,KAClC,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,UAAU,GAAG,kCAAkC,CAAC,CAACC,OAAO,KAAK,IAAI;;AAE3G;AACA,OAAO,MAAMC,0BAA0B,GAAGA,CAAA,KAAuBJ,oBAAoB,CAAC,CAAC,GAAG,MAAM,GAAG,QAAS;AAkB5G,OAAO,MAAMK,iBAAiB,GAAIC,KAAY,IAAqB;EACjE,MAAMC,OAAO,GAAGD,KAAK,CAACE,MAAqB;EAE3C,MAAM;IACJC,YAAY;IACZC,YAAY;IACZC,UAAU;IACVC,SAAS;IACTC,WAAW;IACXC;EACF,CAAC,GAAGP,OAAO;EAEX,MAAMQ,mBAAmB,GAAGN,YAAY,GAAGC,YAAY;EACvD,MAAMM,qBAAqB,GAAGH,WAAW,GAAGC,WAAW;EAEvD,MAAMG,gBAAgB,GAAGL,SAAS,GAAGF,YAAY,GAAG,GAAG,IAAID,YAAY;EACvE,MAAMS,aAAa,GAAGN,SAAS,IAAI,CAAC;EACpC,MAAMO,cAAc,GAAGR,UAAU,IAAI,CAAC;EACtC,MAAMS,eAAe,GAAGT,UAAU,GAAGG,WAAW,GAAG,GAAG,IAAID,WAAW;EAErE,OAAO;IACLJ,YAAY;IACZE,UAAU;IACVD,YAAY;IACZI,WAAW;IACXC,mBAAmB;IACnBC,qBAAqB;IACrBJ,SAAS;IACTC,WAAW;IACXI,gBAAgB;IAChBC,aAAa;IACbC,cAAc;IACdC,eAAe;IACfd;EACF,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -123,25 +123,39 @@ export const makeInheritanceObject = ({
|
|
|
123
123
|
});
|
|
124
124
|
return `{${inheritanceObjectPieces.join(', ')}}`;
|
|
125
125
|
};
|
|
126
|
+
// Path segments that would reach an object's prototype rather than its own data.
|
|
127
|
+
const PROTOTYPE_PATH_SEGMENTS = new Set(['__proto__', 'prototype', 'constructor']);
|
|
128
|
+
|
|
129
|
+
/*
|
|
130
|
+
Sets a value at a dot-separated path, creating any missing intermediate objects. Paths often come
|
|
131
|
+
from form field names or JSON keys, so segments that would reach a prototype are rejected:
|
|
132
|
+
otherwise "__proto__.isAdmin" would set isAdmin on every object in the application.
|
|
133
|
+
*/
|
|
126
134
|
export const updateNestedProperty = ({
|
|
127
135
|
jsonObject,
|
|
128
136
|
propertyPath,
|
|
129
137
|
newValue
|
|
130
138
|
}) => {
|
|
131
139
|
const pathPieces = propertyPath.split('.');
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
jsonObject[propertyPath] = newValue;
|
|
135
|
-
return jsonObject;
|
|
140
|
+
if (pathPieces.some(piece => PROTOTYPE_PATH_SEGMENTS.has(piece))) {
|
|
141
|
+
throw new TypeError(`Refusing to update a prototype through the path "${propertyPath}".`);
|
|
136
142
|
}
|
|
137
143
|
let currentBranch = jsonObject;
|
|
138
|
-
pathPieces.
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
144
|
+
pathPieces.slice(0, -1).forEach(piece => {
|
|
145
|
+
const descriptor = Object.getOwnPropertyDescriptor(currentBranch, piece);
|
|
146
|
+
let nextBranch = descriptor?.value;
|
|
147
|
+
if (!descriptor || typeof nextBranch !== 'object' || nextBranch === null) {
|
|
148
|
+
nextBranch = {};
|
|
149
|
+
Object.defineProperty(currentBranch, piece, {
|
|
150
|
+
value: nextBranch,
|
|
151
|
+
writable: true,
|
|
152
|
+
enumerable: true,
|
|
153
|
+
configurable: true
|
|
154
|
+
});
|
|
143
155
|
}
|
|
156
|
+
currentBranch = nextBranch;
|
|
144
157
|
});
|
|
158
|
+
currentBranch[pathPieces[pathPieces.length - 1]] = newValue;
|
|
145
159
|
return jsonObject;
|
|
146
160
|
};
|
|
147
161
|
export const filterObject = (jsonObject, filter) => {
|