@pierre/diffs 1.0.0-beta.1
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/LICENSE.txt +201 -0
- package/README.md +26 -0
- package/dist/components/File.d.ts +78 -0
- package/dist/components/File.d.ts.map +1 -0
- package/dist/components/File.js +322 -0
- package/dist/components/File.js.map +1 -0
- package/dist/components/FileDiff.d.ts +90 -0
- package/dist/components/FileDiff.d.ts.map +1 -0
- package/dist/components/FileDiff.js +392 -0
- package/dist/components/FileDiff.js.map +1 -0
- package/dist/components/FileStream.d.ts +40 -0
- package/dist/components/FileStream.d.ts.map +1 -0
- package/dist/components/FileStream.js +161 -0
- package/dist/components/FileStream.js.map +1 -0
- package/dist/components/web-components.d.ts +5 -0
- package/dist/components/web-components.d.ts.map +1 -0
- package/dist/components/web-components.js +25 -0
- package/dist/components/web-components.js.map +1 -0
- package/dist/constants.d.ts +21 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +23 -0
- package/dist/constants.js.map +1 -0
- package/dist/highlighter/languages/areLanguagesAttached.d.ts +7 -0
- package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -0
- package/dist/highlighter/languages/areLanguagesAttached.js +11 -0
- package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -0
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts +9 -0
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -0
- package/dist/highlighter/languages/attachResolvedLanguages.js +20 -0
- package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -0
- package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts +5 -0
- package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -0
- package/dist/highlighter/languages/cleanUpResolvedLanguages.js +11 -0
- package/dist/highlighter/languages/cleanUpResolvedLanguages.js.map +1 -0
- package/dist/highlighter/languages/constants.d.ts +11 -0
- package/dist/highlighter/languages/constants.d.ts.map +1 -0
- package/dist/highlighter/languages/constants.js +8 -0
- package/dist/highlighter/languages/constants.js.map +1 -0
- package/dist/highlighter/languages/getResolvedLanguages.d.ts +9 -0
- package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -0
- package/dist/highlighter/languages/getResolvedLanguages.js +16 -0
- package/dist/highlighter/languages/getResolvedLanguages.js.map +1 -0
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +9 -0
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -0
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.js +11 -0
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.js.map +1 -0
- package/dist/highlighter/languages/hasResolvedLanguages.d.ts +7 -0
- package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -0
- package/dist/highlighter/languages/hasResolvedLanguages.js +11 -0
- package/dist/highlighter/languages/hasResolvedLanguages.js.map +1 -0
- package/dist/highlighter/languages/resolveLanguage.d.ts +9 -0
- package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -0
- package/dist/highlighter/languages/resolveLanguage.js +30 -0
- package/dist/highlighter/languages/resolveLanguage.js.map +1 -0
- package/dist/highlighter/languages/resolveLanguages.d.ts +9 -0
- package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -0
- package/dist/highlighter/languages/resolveLanguages.js +25 -0
- package/dist/highlighter/languages/resolveLanguages.js.map +1 -0
- package/dist/highlighter/shared_highlighter.d.ts +21 -0
- package/dist/highlighter/shared_highlighter.d.ts.map +1 -0
- package/dist/highlighter/shared_highlighter.js +71 -0
- package/dist/highlighter/shared_highlighter.js.map +1 -0
- package/dist/highlighter/themes/areThemesAttached.d.ts +7 -0
- package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -0
- package/dist/highlighter/themes/areThemesAttached.js +12 -0
- package/dist/highlighter/themes/areThemesAttached.js.map +1 -0
- package/dist/highlighter/themes/attachResolvedThemes.d.ts +7 -0
- package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -0
- package/dist/highlighter/themes/attachResolvedThemes.js +24 -0
- package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -0
- package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts +5 -0
- package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -0
- package/dist/highlighter/themes/cleanUpResolvedThemes.js +11 -0
- package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -0
- package/dist/highlighter/themes/constants.d.ts +11 -0
- package/dist/highlighter/themes/constants.d.ts.map +1 -0
- package/dist/highlighter/themes/constants.js +9 -0
- package/dist/highlighter/themes/constants.js.map +1 -0
- package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +7 -0
- package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -0
- package/dist/highlighter/themes/getResolvedOrResolveTheme.js +11 -0
- package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -0
- package/dist/highlighter/themes/getResolvedThemes.d.ts +7 -0
- package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -0
- package/dist/highlighter/themes/getResolvedThemes.js +16 -0
- package/dist/highlighter/themes/getResolvedThemes.js.map +1 -0
- package/dist/highlighter/themes/hasResolvedThemes.d.ts +7 -0
- package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -0
- package/dist/highlighter/themes/hasResolvedThemes.js +11 -0
- package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -0
- package/dist/highlighter/themes/registerCustomTheme.d.ts +7 -0
- package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -0
- package/dist/highlighter/themes/registerCustomTheme.js +14 -0
- package/dist/highlighter/themes/registerCustomTheme.js.map +1 -0
- package/dist/highlighter/themes/resolveTheme.d.ts +7 -0
- package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -0
- package/dist/highlighter/themes/resolveTheme.js +35 -0
- package/dist/highlighter/themes/resolveTheme.js.map +1 -0
- package/dist/highlighter/themes/resolveThemes.d.ts +7 -0
- package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -0
- package/dist/highlighter/themes/resolveThemes.js +21 -0
- package/dist/highlighter/themes/resolveThemes.js.map +1 -0
- package/dist/index.d.ts +84 -0
- package/dist/index.js +83 -0
- package/dist/managers/LineSelectionManager.d.ts +64 -0
- package/dist/managers/LineSelectionManager.d.ts.map +1 -0
- package/dist/managers/LineSelectionManager.js +276 -0
- package/dist/managers/LineSelectionManager.js.map +1 -0
- package/dist/managers/MouseEventManager.d.ts +64 -0
- package/dist/managers/MouseEventManager.d.ts.map +1 -0
- package/dist/managers/MouseEventManager.js +244 -0
- package/dist/managers/MouseEventManager.js.map +1 -0
- package/dist/managers/ResizeManager.d.ts +11 -0
- package/dist/managers/ResizeManager.d.ts.map +1 -0
- package/dist/managers/ResizeManager.js +132 -0
- package/dist/managers/ResizeManager.js.map +1 -0
- package/dist/managers/ScrollSyncManager.d.ts +15 -0
- package/dist/managers/ScrollSyncManager.d.ts.map +1 -0
- package/dist/managers/ScrollSyncManager.js +54 -0
- package/dist/managers/ScrollSyncManager.js.map +1 -0
- package/dist/managers/UniversalRenderingManager.d.ts +6 -0
- package/dist/managers/UniversalRenderingManager.d.ts.map +1 -0
- package/dist/managers/UniversalRenderingManager.js +32 -0
- package/dist/managers/UniversalRenderingManager.js.map +1 -0
- package/dist/react/File.d.ts +19 -0
- package/dist/react/File.d.ts.map +1 -0
- package/dist/react/File.js +36 -0
- package/dist/react/File.js.map +1 -0
- package/dist/react/FileDiff.d.ts +22 -0
- package/dist/react/FileDiff.d.ts.map +1 -0
- package/dist/react/FileDiff.js +36 -0
- package/dist/react/FileDiff.js.map +1 -0
- package/dist/react/MultiFileDiff.d.ts +24 -0
- package/dist/react/MultiFileDiff.d.ts.map +1 -0
- package/dist/react/MultiFileDiff.js +38 -0
- package/dist/react/MultiFileDiff.js.map +1 -0
- package/dist/react/PatchDiff.d.ts +21 -0
- package/dist/react/PatchDiff.d.ts.map +1 -0
- package/dist/react/PatchDiff.js +42 -0
- package/dist/react/PatchDiff.js.map +1 -0
- package/dist/react/WorkerPoolContext.d.ts +20 -0
- package/dist/react/WorkerPoolContext.d.ts.map +1 -0
- package/dist/react/WorkerPoolContext.js +41 -0
- package/dist/react/WorkerPoolContext.js.map +1 -0
- package/dist/react/constants.d.ts +7 -0
- package/dist/react/constants.d.ts.map +1 -0
- package/dist/react/constants.js +11 -0
- package/dist/react/constants.js.map +1 -0
- package/dist/react/index.d.ts +17 -0
- package/dist/react/index.js +14 -0
- package/dist/react/jsx.d.ts +12 -0
- package/dist/react/jsx.d.ts.map +1 -0
- package/dist/react/types.d.ts +34 -0
- package/dist/react/types.d.ts.map +1 -0
- package/dist/react/types.js +1 -0
- package/dist/react/utils/renderDiffChildren.d.ts +29 -0
- package/dist/react/utils/renderDiffChildren.d.ts.map +1 -0
- package/dist/react/utils/renderDiffChildren.js +32 -0
- package/dist/react/utils/renderDiffChildren.js.map +1 -0
- package/dist/react/utils/renderFileChildren.d.ts +25 -0
- package/dist/react/utils/renderFileChildren.d.ts.map +1 -0
- package/dist/react/utils/renderFileChildren.js +28 -0
- package/dist/react/utils/renderFileChildren.js.map +1 -0
- package/dist/react/utils/templateRender.d.ts +7 -0
- package/dist/react/utils/templateRender.d.ts.map +1 -0
- package/dist/react/utils/templateRender.js +14 -0
- package/dist/react/utils/templateRender.js.map +1 -0
- package/dist/react/utils/useFileDiffInstance.d.ts +31 -0
- package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -0
- package/dist/react/utils/useFileDiffInstance.js +54 -0
- package/dist/react/utils/useFileDiffInstance.js.map +1 -0
- package/dist/react/utils/useFileInstance.d.ts +27 -0
- package/dist/react/utils/useFileInstance.d.ts.map +1 -0
- package/dist/react/utils/useFileInstance.js +49 -0
- package/dist/react/utils/useFileInstance.js.map +1 -0
- package/dist/react/utils/useStableCallback.d.ts +5 -0
- package/dist/react/utils/useStableCallback.d.ts.map +1 -0
- package/dist/react/utils/useStableCallback.js +14 -0
- package/dist/react/utils/useStableCallback.js.map +1 -0
- package/dist/renderers/DiffHunksRenderer.d.ts +62 -0
- package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -0
- package/dist/renderers/DiffHunksRenderer.js +651 -0
- package/dist/renderers/DiffHunksRenderer.js.map +1 -0
- package/dist/renderers/FileRenderer.d.ts +49 -0
- package/dist/renderers/FileRenderer.d.ts.map +1 -0
- package/dist/renderers/FileRenderer.js +239 -0
- package/dist/renderers/FileRenderer.js.map +1 -0
- package/dist/shiki-stream/index.d.ts +4 -0
- package/dist/shiki-stream/index.js +4 -0
- package/dist/shiki-stream/stream.d.ts +17 -0
- package/dist/shiki-stream/stream.d.ts.map +1 -0
- package/dist/shiki-stream/stream.js +32 -0
- package/dist/shiki-stream/stream.js.map +1 -0
- package/dist/shiki-stream/tokenizer.d.ts +24 -0
- package/dist/shiki-stream/tokenizer.d.ts.map +1 -0
- package/dist/shiki-stream/tokenizer.js +71 -0
- package/dist/shiki-stream/tokenizer.js.map +1 -0
- package/dist/shiki-stream/types.d.ts +45 -0
- package/dist/shiki-stream/types.d.ts.map +1 -0
- package/dist/shiki-stream/types.js +0 -0
- package/dist/sprite.d.ts +6 -0
- package/dist/sprite.d.ts.map +1 -0
- package/dist/sprite.js +55 -0
- package/dist/sprite.js.map +1 -0
- package/dist/ssr/FileDiffReact.d.ts +21 -0
- package/dist/ssr/FileDiffReact.d.ts.map +1 -0
- package/dist/ssr/FileDiffReact.js +53 -0
- package/dist/ssr/FileDiffReact.js.map +1 -0
- package/dist/ssr/index.d.ts +6 -0
- package/dist/ssr/index.js +6 -0
- package/dist/ssr/preloadDiffs.d.ts +72 -0
- package/dist/ssr/preloadDiffs.d.ts.map +1 -0
- package/dist/ssr/preloadDiffs.js +66 -0
- package/dist/ssr/preloadDiffs.js.map +1 -0
- package/dist/ssr/preloadFile.d.ts +23 -0
- package/dist/ssr/preloadFile.d.ts.map +1 -0
- package/dist/ssr/preloadFile.js +26 -0
- package/dist/ssr/preloadFile.js.map +1 -0
- package/dist/ssr/preloadPatchFile.d.ts +15 -0
- package/dist/ssr/preloadPatchFile.d.ts.map +1 -0
- package/dist/ssr/preloadPatchFile.js +17 -0
- package/dist/ssr/preloadPatchFile.js.map +1 -0
- package/dist/ssr/renderHTML.d.ts +7 -0
- package/dist/ssr/renderHTML.d.ts.map +1 -0
- package/dist/ssr/renderHTML.js +11 -0
- package/dist/ssr/renderHTML.js.map +1 -0
- package/dist/string-import.d.ts +6 -0
- package/dist/string-import.d.ts.map +1 -0
- package/dist/style.js +6 -0
- package/dist/style.js.map +1 -0
- package/dist/themes/pierre-dark.js +1328 -0
- package/dist/themes/pierre-dark.js.map +1 -0
- package/dist/themes/pierre-light.js +1328 -0
- package/dist/themes/pierre-light.js.map +1 -0
- package/dist/types.d.ts +238 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +0 -0
- package/dist/utils/areFilesEqual.d.ts +7 -0
- package/dist/utils/areFilesEqual.d.ts.map +1 -0
- package/dist/utils/areFilesEqual.js +8 -0
- package/dist/utils/areFilesEqual.js.map +1 -0
- package/dist/utils/areObjectsEqual.d.ts +5 -0
- package/dist/utils/areObjectsEqual.d.ts.map +1 -0
- package/dist/utils/areObjectsEqual.js +18 -0
- package/dist/utils/areObjectsEqual.js.map +1 -0
- package/dist/utils/areOptionsEqual.d.ts +9 -0
- package/dist/utils/areOptionsEqual.d.ts.map +1 -0
- package/dist/utils/areOptionsEqual.js +12 -0
- package/dist/utils/areOptionsEqual.js.map +1 -0
- package/dist/utils/areSelectionsEqual.d.ts +7 -0
- package/dist/utils/areSelectionsEqual.d.ts.map +1 -0
- package/dist/utils/areSelectionsEqual.js +8 -0
- package/dist/utils/areSelectionsEqual.js.map +1 -0
- package/dist/utils/areThemesEqual.d.ts +7 -0
- package/dist/utils/areThemesEqual.d.ts.map +1 -0
- package/dist/utils/areThemesEqual.js +9 -0
- package/dist/utils/areThemesEqual.js.map +1 -0
- package/dist/utils/cleanLastNewline.d.ts +5 -0
- package/dist/utils/cleanLastNewline.d.ts.map +1 -0
- package/dist/utils/cleanLastNewline.js +8 -0
- package/dist/utils/cleanLastNewline.js.map +1 -0
- package/dist/utils/createAnnotationElement.d.ts +8 -0
- package/dist/utils/createAnnotationElement.d.ts.map +1 -0
- package/dist/utils/createAnnotationElement.js +21 -0
- package/dist/utils/createAnnotationElement.js.map +1 -0
- package/dist/utils/createAnnotationWrapperNode.d.ts +5 -0
- package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -0
- package/dist/utils/createAnnotationWrapperNode.js +12 -0
- package/dist/utils/createAnnotationWrapperNode.js.map +1 -0
- package/dist/utils/createCodeNode.d.ts +12 -0
- package/dist/utils/createCodeNode.d.ts.map +1 -0
- package/dist/utils/createCodeNode.js +12 -0
- package/dist/utils/createCodeNode.js.map +1 -0
- package/dist/utils/createEmptyRowBuffer.d.ts +7 -0
- package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -0
- package/dist/utils/createEmptyRowBuffer.js +16 -0
- package/dist/utils/createEmptyRowBuffer.js.map +1 -0
- package/dist/utils/createFileHeaderElement.d.ts +17 -0
- package/dist/utils/createFileHeaderElement.d.ts.map +1 -0
- package/dist/utils/createFileHeaderElement.js +84 -0
- package/dist/utils/createFileHeaderElement.js.map +1 -0
- package/dist/utils/createHoverContentNode.d.ts +5 -0
- package/dist/utils/createHoverContentNode.d.ts.map +1 -0
- package/dist/utils/createHoverContentNode.js +15 -0
- package/dist/utils/createHoverContentNode.js.map +1 -0
- package/dist/utils/createNoNewlineElement.d.ts +7 -0
- package/dist/utils/createNoNewlineElement.d.ts.map +1 -0
- package/dist/utils/createNoNewlineElement.js +24 -0
- package/dist/utils/createNoNewlineElement.js.map +1 -0
- package/dist/utils/createPreElement.d.ts +18 -0
- package/dist/utils/createPreElement.d.ts.map +1 -0
- package/dist/utils/createPreElement.js +28 -0
- package/dist/utils/createPreElement.js.map +1 -0
- package/dist/utils/createRowNodes.d.ts +8 -0
- package/dist/utils/createRowNodes.d.ts.map +1 -0
- package/dist/utils/createRowNodes.js +20 -0
- package/dist/utils/createRowNodes.js.map +1 -0
- package/dist/utils/createSeparator.d.ts +25 -0
- package/dist/utils/createSeparator.d.ts.map +1 -0
- package/dist/utils/createSeparator.js +69 -0
- package/dist/utils/createSeparator.js.map +1 -0
- package/dist/utils/createSpanNodeFromToken.d.ts +7 -0
- package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -0
- package/dist/utils/createSpanNodeFromToken.js +13 -0
- package/dist/utils/createSpanNodeFromToken.js.map +1 -0
- package/dist/utils/createStyleElement.d.ts +7 -0
- package/dist/utils/createStyleElement.d.ts.map +1 -0
- package/dist/utils/createStyleElement.js +19 -0
- package/dist/utils/createStyleElement.js.map +1 -0
- package/dist/utils/createTransformerWithState.d.ts +13 -0
- package/dist/utils/createTransformerWithState.d.ts.map +1 -0
- package/dist/utils/createTransformerWithState.js +56 -0
- package/dist/utils/createTransformerWithState.js.map +1 -0
- package/dist/utils/createUnsafeCSSStyleNode.d.ts +5 -0
- package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -0
- package/dist/utils/createUnsafeCSSStyleNode.js +12 -0
- package/dist/utils/createUnsafeCSSStyleNode.js.map +1 -0
- package/dist/utils/cssWrappers.d.ts +6 -0
- package/dist/utils/cssWrappers.d.ts.map +1 -0
- package/dist/utils/cssWrappers.js +21 -0
- package/dist/utils/cssWrappers.js.map +1 -0
- package/dist/utils/diffAcceptRejectHunk.d.ts +7 -0
- package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -0
- package/dist/utils/diffAcceptRejectHunk.js +82 -0
- package/dist/utils/diffAcceptRejectHunk.js.map +1 -0
- package/dist/utils/formatCSSVariablePrefix.d.ts +5 -0
- package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -0
- package/dist/utils/formatCSSVariablePrefix.js +8 -0
- package/dist/utils/formatCSSVariablePrefix.js.map +1 -0
- package/dist/utils/getFiletypeFromFileName.d.ts +9 -0
- package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -0
- package/dist/utils/getFiletypeFromFileName.js +343 -0
- package/dist/utils/getFiletypeFromFileName.js.map +1 -0
- package/dist/utils/getHighlighterOptions.d.ts +14 -0
- package/dist/utils/getHighlighterOptions.d.ts.map +1 -0
- package/dist/utils/getHighlighterOptions.js +13 -0
- package/dist/utils/getHighlighterOptions.js.map +1 -0
- package/dist/utils/getHighlighterThemeStyles.d.ts +16 -0
- package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -0
- package/dist/utils/getHighlighterThemeStyles.js +40 -0
- package/dist/utils/getHighlighterThemeStyles.js.map +1 -0
- package/dist/utils/getHunkSeparatorSlotName.d.ts +5 -0
- package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -0
- package/dist/utils/getHunkSeparatorSlotName.js +8 -0
- package/dist/utils/getHunkSeparatorSlotName.js.map +1 -0
- package/dist/utils/getIconForType.d.ts +8 -0
- package/dist/utils/getIconForType.d.ts.map +1 -0
- package/dist/utils/getIconForType.js +15 -0
- package/dist/utils/getIconForType.js.map +1 -0
- package/dist/utils/getLineAnnotationName.d.ts +7 -0
- package/dist/utils/getLineAnnotationName.d.ts.map +1 -0
- package/dist/utils/getLineAnnotationName.js +8 -0
- package/dist/utils/getLineAnnotationName.js.map +1 -0
- package/dist/utils/getLineEndingType.d.ts +5 -0
- package/dist/utils/getLineEndingType.d.ts.map +1 -0
- package/dist/utils/getLineEndingType.js +11 -0
- package/dist/utils/getLineEndingType.js.map +1 -0
- package/dist/utils/getLineNodes.d.ts +7 -0
- package/dist/utils/getLineNodes.d.ts.map +1 -0
- package/dist/utils/getLineNodes.js +15 -0
- package/dist/utils/getLineNodes.js.map +1 -0
- package/dist/utils/getSingularPatch.d.ts +7 -0
- package/dist/utils/getSingularPatch.d.ts.map +1 -0
- package/dist/utils/getSingularPatch.js +20 -0
- package/dist/utils/getSingularPatch.js.map +1 -0
- package/dist/utils/getThemes.d.ts +7 -0
- package/dist/utils/getThemes.d.ts.map +1 -0
- package/dist/utils/getThemes.js +16 -0
- package/dist/utils/getThemes.js.map +1 -0
- package/dist/utils/getTotalLineCountFromHunks.d.ts +7 -0
- package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -0
- package/dist/utils/getTotalLineCountFromHunks.js +10 -0
- package/dist/utils/getTotalLineCountFromHunks.js.map +1 -0
- package/dist/utils/hast_utils.d.ts +31 -0
- package/dist/utils/hast_utils.d.ts.map +1 -0
- package/dist/utils/hast_utils.js +42 -0
- package/dist/utils/hast_utils.js.map +1 -0
- package/dist/utils/isWorkerContext.d.ts +5 -0
- package/dist/utils/isWorkerContext.d.ts.map +1 -0
- package/dist/utils/isWorkerContext.js +8 -0
- package/dist/utils/isWorkerContext.js.map +1 -0
- package/dist/utils/parseDiffDecorations.d.ts +31 -0
- package/dist/utils/parseDiffDecorations.d.ts.map +1 -0
- package/dist/utils/parseDiffDecorations.js +34 -0
- package/dist/utils/parseDiffDecorations.js.map +1 -0
- package/dist/utils/parseDiffFromFile.d.ts +14 -0
- package/dist/utils/parseDiffFromFile.d.ts.map +1 -0
- package/dist/utils/parseDiffFromFile.js +23 -0
- package/dist/utils/parseDiffFromFile.js.map +1 -0
- package/dist/utils/parseLineType.d.ts +11 -0
- package/dist/utils/parseLineType.d.ts.map +1 -0
- package/dist/utils/parseLineType.js +16 -0
- package/dist/utils/parseLineType.js.map +1 -0
- package/dist/utils/parsePatchFiles.d.ts +16 -0
- package/dist/utils/parsePatchFiles.d.ts.map +1 -0
- package/dist/utils/parsePatchFiles.js +204 -0
- package/dist/utils/parsePatchFiles.js.map +1 -0
- package/dist/utils/prerenderHTMLIfNecessary.d.ts +5 -0
- package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -0
- package/dist/utils/prerenderHTMLIfNecessary.js +10 -0
- package/dist/utils/prerenderHTMLIfNecessary.js.map +1 -0
- package/dist/utils/processLine.d.ts +8 -0
- package/dist/utils/processLine.d.ts.map +1 -0
- package/dist/utils/processLine.js +42 -0
- package/dist/utils/processLine.js.map +1 -0
- package/dist/utils/renderDiffWithHighlighter.d.ts +7 -0
- package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -0
- package/dist/utils/renderDiffWithHighlighter.js +323 -0
- package/dist/utils/renderDiffWithHighlighter.js.map +1 -0
- package/dist/utils/renderFileWithHighlighter.d.ts +10 -0
- package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -0
- package/dist/utils/renderFileWithHighlighter.js +52 -0
- package/dist/utils/renderFileWithHighlighter.js.map +1 -0
- package/dist/utils/setLanguageOverride.d.ts +7 -0
- package/dist/utils/setLanguageOverride.d.ts.map +1 -0
- package/dist/utils/setLanguageOverride.js +11 -0
- package/dist/utils/setLanguageOverride.js.map +1 -0
- package/dist/utils/setWrapperNodeProps.d.ts +20 -0
- package/dist/utils/setWrapperNodeProps.d.ts.map +1 -0
- package/dist/utils/setWrapperNodeProps.js +29 -0
- package/dist/utils/setWrapperNodeProps.js.map +1 -0
- package/dist/worker/WorkerPoolManager.d.ts +72 -0
- package/dist/worker/WorkerPoolManager.d.ts.map +1 -0
- package/dist/worker/WorkerPoolManager.js +421 -0
- package/dist/worker/WorkerPoolManager.js.map +1 -0
- package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts +16 -0
- package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -0
- package/dist/worker/getOrCreateWorkerPoolSingleton.js +20 -0
- package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -0
- package/dist/worker/index.d.ts +4 -0
- package/dist/worker/index.js +4 -0
- package/dist/worker/types.d.ts +140 -0
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/types.js +0 -0
- package/dist/worker/worker-portable.d.ts +1 -0
- package/dist/worker/worker-portable.js +14872 -0
- package/dist/worker/worker-portable.js.map +1 -0
- package/dist/worker/worker.d.ts +1 -0
- package/dist/worker/worker.js +1061 -0
- package/dist/worker/worker.js.map +1 -0
- package/package.json +76 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { AnnotationLineMap, AnnotationSide, AnnotationSpan, BaseCodeOptions, BaseDiffOptions, BundledLanguage, ChangeContent, ChangeHunk, ChangeTypes, CodeToHastOptions, ContextContent, DecorationItem, DiffLineAnnotation, DiffLineEventBaseProps, DiffsHighlighter, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffMetadata, GapSpan, Hunk, HunkData, HunkLineType, HunkSeparators, LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PrePropertiesConfig, RenderDiffFilesResult, RenderDiffHunksResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderMetadataCallback, RenderHeaderMetadataProps, RenderedDiffASTCache, RenderedFileASTCache, SharedRenderState, ShikiTransformer, SupportedLanguages, ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, ThemedToken, ThemesType } from "./types.js";
|
|
2
|
+
import { ALTERNATE_FILE_NAMES_GIT, COMMIT_METADATA_SPLIT, CORE_CSS_ATTRIBUTE, DEFAULT_THEMES, DIFFS_TAG_NAME, FILENAME_HEADER_REGEX, FILENAME_HEADER_REGEX_GIT, FILE_CONTEXT_BLOB, FILE_MODE_FROM_INDEX, GIT_DIFF_FILE_BREAK_REGEX, HEADER_METADATA_SLOT_ID, HUNK_HEADER, SPLIT_WITH_NEWLINES, UNIFIED_DIFF_FILE_BREAK_REGEX, UNSAFE_CSS_ATTRIBUTE } from "./constants.js";
|
|
3
|
+
import { LineSelectionManager, LineSelectionOptions, SelectedLineRange, SelectionSide, pluckLineSelectionOptions } from "./managers/LineSelectionManager.js";
|
|
4
|
+
import { GetHoveredLineResult, LogTypes, MouseEventManager, MouseEventManagerBaseOptions, MouseEventManagerMode, MouseEventManagerOptions, OnDiffLineClickProps, OnDiffLineEnterLeaveProps, OnLineClickProps, OnLineEnterLeaveProps, pluckMouseEventOptions } from "./managers/MouseEventManager.js";
|
|
5
|
+
import { File, FileHyrdateProps, FileOptions, FileRenderProps } from "./components/File.js";
|
|
6
|
+
import { FileDiff, FileDiffHydrationProps, FileDiffOptions, FileDiffRenderProps } from "./components/FileDiff.js";
|
|
7
|
+
import { CodeToTokenTransformStreamOptions, RecallToken, ShikiStreamTokenizerEnqueueResult, ShikiStreamTokenizerOptions } from "./shiki-stream/types.js";
|
|
8
|
+
import { ShikiStreamTokenizer } from "./shiki-stream/tokenizer.js";
|
|
9
|
+
import { CodeToTokenTransformStream } from "./shiki-stream/stream.js";
|
|
10
|
+
import { FileStream, FileStreamOptions } from "./components/FileStream.js";
|
|
11
|
+
import { areLanguagesAttached } from "./highlighter/languages/areLanguagesAttached.js";
|
|
12
|
+
import { attachResolvedLanguages } from "./highlighter/languages/attachResolvedLanguages.js";
|
|
13
|
+
import { cleanUpResolvedLanguages } from "./highlighter/languages/cleanUpResolvedLanguages.js";
|
|
14
|
+
import { AttachedLanguages, ResolvedLanguages, ResolvingLanguages } from "./highlighter/languages/constants.js";
|
|
15
|
+
import { getResolvedLanguages } from "./highlighter/languages/getResolvedLanguages.js";
|
|
16
|
+
import { getResolvedOrResolveLanguage } from "./highlighter/languages/getResolvedOrResolveLanguage.js";
|
|
17
|
+
import { hasResolvedLanguages } from "./highlighter/languages/hasResolvedLanguages.js";
|
|
18
|
+
import { resolveLanguage } from "./highlighter/languages/resolveLanguage.js";
|
|
19
|
+
import { resolveLanguages } from "./highlighter/languages/resolveLanguages.js";
|
|
20
|
+
import { disposeHighlighter, getHighlighterIfLoaded, getSharedHighlighter, isHighlighterLoaded, isHighlighterLoading, isHighlighterNull, preloadHighlighter } from "./highlighter/shared_highlighter.js";
|
|
21
|
+
import { areThemesAttached } from "./highlighter/themes/areThemesAttached.js";
|
|
22
|
+
import { attachResolvedThemes } from "./highlighter/themes/attachResolvedThemes.js";
|
|
23
|
+
import { cleanUpResolvedThemes } from "./highlighter/themes/cleanUpResolvedThemes.js";
|
|
24
|
+
import { AttachedThemes, RegisteredCustomThemes, ResolvedThemes, ResolvingThemes } from "./highlighter/themes/constants.js";
|
|
25
|
+
import { getResolvedOrResolveTheme } from "./highlighter/themes/getResolvedOrResolveTheme.js";
|
|
26
|
+
import { getResolvedThemes } from "./highlighter/themes/getResolvedThemes.js";
|
|
27
|
+
import { hasResolvedThemes } from "./highlighter/themes/hasResolvedThemes.js";
|
|
28
|
+
import { registerCustomTheme } from "./highlighter/themes/registerCustomTheme.js";
|
|
29
|
+
import { resolveTheme } from "./highlighter/themes/resolveTheme.js";
|
|
30
|
+
import { resolveThemes } from "./highlighter/themes/resolveThemes.js";
|
|
31
|
+
import { ResizeManager } from "./managers/ResizeManager.js";
|
|
32
|
+
import { ScrollSyncManager } from "./managers/ScrollSyncManager.js";
|
|
33
|
+
import { queueRender } from "./managers/UniversalRenderingManager.js";
|
|
34
|
+
import { DiffHunksRenderer, HunksRenderResult } from "./renderers/DiffHunksRenderer.js";
|
|
35
|
+
import { FileRenderResult, FileRenderer, FileRendererOptions } from "./renderers/FileRenderer.js";
|
|
36
|
+
import { SVGSpriteNames, SVGSpriteSheet } from "./sprite.js";
|
|
37
|
+
import { areFilesEqual } from "./utils/areFilesEqual.js";
|
|
38
|
+
import { areObjectsEqual } from "./utils/areObjectsEqual.js";
|
|
39
|
+
import { areOptionsEqual } from "./utils/areOptionsEqual.js";
|
|
40
|
+
import { areSelectionsEqual } from "./utils/areSelectionsEqual.js";
|
|
41
|
+
import { areThemesEqual } from "./utils/areThemesEqual.js";
|
|
42
|
+
import { cleanLastNewline } from "./utils/cleanLastNewline.js";
|
|
43
|
+
import { createAnnotationElement } from "./utils/createAnnotationElement.js";
|
|
44
|
+
import { createAnnotationWrapperNode } from "./utils/createAnnotationWrapperNode.js";
|
|
45
|
+
import { createCodeNode } from "./utils/createCodeNode.js";
|
|
46
|
+
import { createEmptyRowBuffer } from "./utils/createEmptyRowBuffer.js";
|
|
47
|
+
import { CreateFileHeaderElementProps, createFileHeaderElement } from "./utils/createFileHeaderElement.js";
|
|
48
|
+
import { createHoverContentNode } from "./utils/createHoverContentNode.js";
|
|
49
|
+
import { createNoNewlineElement } from "./utils/createNoNewlineElement.js";
|
|
50
|
+
import { createPreElement, createPreWrapperProperties } from "./utils/createPreElement.js";
|
|
51
|
+
import { createRowNodes } from "./utils/createRowNodes.js";
|
|
52
|
+
import { createSeparator } from "./utils/createSeparator.js";
|
|
53
|
+
import { createSpanFromToken } from "./utils/createSpanNodeFromToken.js";
|
|
54
|
+
import { createStyleElement } from "./utils/createStyleElement.js";
|
|
55
|
+
import { createTransformerWithState } from "./utils/createTransformerWithState.js";
|
|
56
|
+
import { createUnsafeCSSStyleNode } from "./utils/createUnsafeCSSStyleNode.js";
|
|
57
|
+
import { wrapCoreCSS, wrapUnsafeCSS } from "./utils/cssWrappers.js";
|
|
58
|
+
import { diffAcceptRejectHunk } from "./utils/diffAcceptRejectHunk.js";
|
|
59
|
+
import { formatCSSVariablePrefix } from "./utils/formatCSSVariablePrefix.js";
|
|
60
|
+
import { EXTENSION_TO_FILE_FORMAT, extendFileFormatMap, getFiletypeFromFileName } from "./utils/getFiletypeFromFileName.js";
|
|
61
|
+
import { getHighlighterOptions } from "./utils/getHighlighterOptions.js";
|
|
62
|
+
import { getHighlighterThemeStyles } from "./utils/getHighlighterThemeStyles.js";
|
|
63
|
+
import { getHunkSeparatorSlotName } from "./utils/getHunkSeparatorSlotName.js";
|
|
64
|
+
import { getIconForType } from "./utils/getIconForType.js";
|
|
65
|
+
import { getLineAnnotationName } from "./utils/getLineAnnotationName.js";
|
|
66
|
+
import { getLineEndingType } from "./utils/getLineEndingType.js";
|
|
67
|
+
import { getLineNodes } from "./utils/getLineNodes.js";
|
|
68
|
+
import { getSingularPatch } from "./utils/getSingularPatch.js";
|
|
69
|
+
import { getThemes } from "./utils/getThemes.js";
|
|
70
|
+
import { getTotalLineCountFromHunks } from "./utils/getTotalLineCountFromHunks.js";
|
|
71
|
+
import { createHastElement, createIconElement, createTextNodeElement, findCodeElement } from "./utils/hast_utils.js";
|
|
72
|
+
import { isWorkerContext } from "./utils/isWorkerContext.js";
|
|
73
|
+
import { createDiffSpanDecoration, pushOrJoinSpan } from "./utils/parseDiffDecorations.js";
|
|
74
|
+
import { parseDiffFromFile } from "./utils/parseDiffFromFile.js";
|
|
75
|
+
import { ParsedLine, parseLineType } from "./utils/parseLineType.js";
|
|
76
|
+
import { parsePatchFiles } from "./utils/parsePatchFiles.js";
|
|
77
|
+
import { prerenderHTMLIfNecessary } from "./utils/prerenderHTMLIfNecessary.js";
|
|
78
|
+
import { processLine } from "./utils/processLine.js";
|
|
79
|
+
import { renderDiffWithHighlighter } from "./utils/renderDiffWithHighlighter.js";
|
|
80
|
+
import { renderFileWithHighlighter } from "./utils/renderFileWithHighlighter.js";
|
|
81
|
+
import { setLanguageOverride } from "./utils/setLanguageOverride.js";
|
|
82
|
+
import { SetPreNodePropertiesProps, setPreNodeProperties } from "./utils/setWrapperNodeProps.js";
|
|
83
|
+
import { codeToHtml } from "shiki";
|
|
84
|
+
export { ALTERNATE_FILE_NAMES_GIT, AnnotationLineMap, AnnotationSide, AnnotationSpan, AttachedLanguages, AttachedThemes, BaseCodeOptions, BaseDiffOptions, BundledLanguage, COMMIT_METADATA_SPLIT, CORE_CSS_ATTRIBUTE, ChangeContent, ChangeHunk, ChangeTypes, CodeToHastOptions, CodeToTokenTransformStream, CodeToTokenTransformStreamOptions, ContextContent, CreateFileHeaderElementProps, DEFAULT_THEMES, DIFFS_TAG_NAME, DecorationItem, DiffHunksRenderer, DiffLineAnnotation, DiffLineEventBaseProps, DiffsHighlighter, DiffsThemeNames, EXTENSION_TO_FILE_FORMAT, ExpansionDirections, ExtensionFormatMap, FILENAME_HEADER_REGEX, FILENAME_HEADER_REGEX_GIT, FILE_CONTEXT_BLOB, FILE_MODE_FROM_INDEX, File, FileContents, FileDiff, FileDiffHydrationProps, FileDiffMetadata, FileDiffOptions, FileDiffRenderProps, FileHyrdateProps, FileOptions, FileRenderProps, FileRenderResult, FileRenderer, FileRendererOptions, FileStream, FileStreamOptions, GIT_DIFF_FILE_BREAK_REGEX, GapSpan, GetHoveredLineResult, HEADER_METADATA_SLOT_ID, HUNK_HEADER, Hunk, HunkData, HunkLineType, HunkSeparators, HunksRenderResult, LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSelectionManager, LineSelectionOptions, LineSpans, LineTypes, LogTypes, MouseEventManager, MouseEventManagerBaseOptions, MouseEventManagerMode, MouseEventManagerOptions, ObservedAnnotationNodes, ObservedGridNodes, OnDiffLineClickProps, OnDiffLineEnterLeaveProps, OnLineClickProps, OnLineEnterLeaveProps, ParsedLine, ParsedPatch, PrePropertiesConfig, RecallToken, RegisteredCustomThemes, RenderDiffFilesResult, RenderDiffHunksResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderMetadataCallback, RenderHeaderMetadataProps, RenderedDiffASTCache, RenderedFileASTCache, ResizeManager, ResolvedLanguages, ResolvedThemes, ResolvingLanguages, ResolvingThemes, SPLIT_WITH_NEWLINES, SVGSpriteNames, SVGSpriteSheet, ScrollSyncManager, SelectedLineRange, SelectionSide, SetPreNodePropertiesProps, SharedRenderState, ShikiStreamTokenizer, ShikiStreamTokenizerEnqueueResult, ShikiStreamTokenizerOptions, ShikiTransformer, SupportedLanguages, ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, ThemedToken, ThemesType, UNIFIED_DIFF_FILE_BREAK_REGEX, UNSAFE_CSS_ATTRIBUTE, areFilesEqual, areLanguagesAttached, areObjectsEqual, areOptionsEqual, areSelectionsEqual, areThemesAttached, areThemesEqual, attachResolvedLanguages, attachResolvedThemes, cleanLastNewline, cleanUpResolvedLanguages, cleanUpResolvedThemes, codeToHtml, createAnnotationElement, createAnnotationWrapperNode, createCodeNode, createDiffSpanDecoration, createEmptyRowBuffer, createFileHeaderElement, createHastElement, createHoverContentNode, createIconElement, createNoNewlineElement, createPreElement, createPreWrapperProperties, createRowNodes, createSeparator, createSpanFromToken, createStyleElement, createTextNodeElement, createTransformerWithState, createUnsafeCSSStyleNode, diffAcceptRejectHunk, disposeHighlighter, extendFileFormatMap, findCodeElement, formatCSSVariablePrefix, getFiletypeFromFileName, getHighlighterIfLoaded, getHighlighterOptions, getHighlighterThemeStyles, getHunkSeparatorSlotName, getIconForType, getLineAnnotationName, getLineEndingType, getLineNodes, getResolvedLanguages, getResolvedOrResolveLanguage, getResolvedOrResolveTheme, getResolvedThemes, getSharedHighlighter, getSingularPatch, getThemes, getTotalLineCountFromHunks, hasResolvedLanguages, hasResolvedThemes, isHighlighterLoaded, isHighlighterLoading, isHighlighterNull, isWorkerContext, parseDiffFromFile, parseLineType, parsePatchFiles, pluckLineSelectionOptions, pluckMouseEventOptions, preloadHighlighter, prerenderHTMLIfNecessary, processLine, pushOrJoinSpan, queueRender, registerCustomTheme, renderDiffWithHighlighter, renderFileWithHighlighter, resolveLanguage, resolveLanguages, resolveTheme, resolveThemes, setLanguageOverride, setPreNodeProperties, wrapCoreCSS, wrapUnsafeCSS };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { ALTERNATE_FILE_NAMES_GIT, COMMIT_METADATA_SPLIT, CORE_CSS_ATTRIBUTE, DEFAULT_THEMES, DIFFS_TAG_NAME, FILENAME_HEADER_REGEX, FILENAME_HEADER_REGEX_GIT, FILE_CONTEXT_BLOB, FILE_MODE_FROM_INDEX, GIT_DIFF_FILE_BREAK_REGEX, HEADER_METADATA_SLOT_ID, HUNK_HEADER, SPLIT_WITH_NEWLINES, UNIFIED_DIFF_FILE_BREAK_REGEX, UNSAFE_CSS_ATTRIBUTE } from "./constants.js";
|
|
2
|
+
import { areSelectionsEqual } from "./utils/areSelectionsEqual.js";
|
|
3
|
+
import { LineSelectionManager, pluckLineSelectionOptions } from "./managers/LineSelectionManager.js";
|
|
4
|
+
import { MouseEventManager, pluckMouseEventOptions } from "./managers/MouseEventManager.js";
|
|
5
|
+
import { ResizeManager } from "./managers/ResizeManager.js";
|
|
6
|
+
import { AttachedLanguages, ResolvedLanguages, ResolvingLanguages } from "./highlighter/languages/constants.js";
|
|
7
|
+
import { areLanguagesAttached } from "./highlighter/languages/areLanguagesAttached.js";
|
|
8
|
+
import { attachResolvedLanguages } from "./highlighter/languages/attachResolvedLanguages.js";
|
|
9
|
+
import { cleanUpResolvedLanguages } from "./highlighter/languages/cleanUpResolvedLanguages.js";
|
|
10
|
+
import { isWorkerContext } from "./utils/isWorkerContext.js";
|
|
11
|
+
import { resolveLanguage } from "./highlighter/languages/resolveLanguage.js";
|
|
12
|
+
import { getResolvedOrResolveLanguage } from "./highlighter/languages/getResolvedOrResolveLanguage.js";
|
|
13
|
+
import { AttachedThemes, RegisteredCustomThemes, ResolvedThemes, ResolvingThemes } from "./highlighter/themes/constants.js";
|
|
14
|
+
import { attachResolvedThemes } from "./highlighter/themes/attachResolvedThemes.js";
|
|
15
|
+
import { cleanUpResolvedThemes } from "./highlighter/themes/cleanUpResolvedThemes.js";
|
|
16
|
+
import { resolveTheme } from "./highlighter/themes/resolveTheme.js";
|
|
17
|
+
import { getResolvedOrResolveTheme } from "./highlighter/themes/getResolvedOrResolveTheme.js";
|
|
18
|
+
import { registerCustomTheme } from "./highlighter/themes/registerCustomTheme.js";
|
|
19
|
+
import { disposeHighlighter, getHighlighterIfLoaded, getSharedHighlighter, isHighlighterLoaded, isHighlighterLoading, isHighlighterNull, preloadHighlighter } from "./highlighter/shared_highlighter.js";
|
|
20
|
+
import { getThemes } from "./utils/getThemes.js";
|
|
21
|
+
import { areThemesAttached } from "./highlighter/themes/areThemesAttached.js";
|
|
22
|
+
import { hasResolvedThemes } from "./highlighter/themes/hasResolvedThemes.js";
|
|
23
|
+
import { areThemesEqual } from "./utils/areThemesEqual.js";
|
|
24
|
+
import { createHastElement, createIconElement, createTextNodeElement, findCodeElement } from "./utils/hast_utils.js";
|
|
25
|
+
import { createAnnotationElement } from "./utils/createAnnotationElement.js";
|
|
26
|
+
import { getIconForType } from "./utils/getIconForType.js";
|
|
27
|
+
import { createFileHeaderElement } from "./utils/createFileHeaderElement.js";
|
|
28
|
+
import { createPreElement, createPreWrapperProperties } from "./utils/createPreElement.js";
|
|
29
|
+
import { EXTENSION_TO_FILE_FORMAT, extendFileFormatMap, getFiletypeFromFileName } from "./utils/getFiletypeFromFileName.js";
|
|
30
|
+
import { getHighlighterOptions } from "./utils/getHighlighterOptions.js";
|
|
31
|
+
import { getLineAnnotationName } from "./utils/getLineAnnotationName.js";
|
|
32
|
+
import { cleanLastNewline } from "./utils/cleanLastNewline.js";
|
|
33
|
+
import { processLine } from "./utils/processLine.js";
|
|
34
|
+
import { createTransformerWithState } from "./utils/createTransformerWithState.js";
|
|
35
|
+
import { formatCSSVariablePrefix } from "./utils/formatCSSVariablePrefix.js";
|
|
36
|
+
import { getHighlighterThemeStyles } from "./utils/getHighlighterThemeStyles.js";
|
|
37
|
+
import { getLineNodes } from "./utils/getLineNodes.js";
|
|
38
|
+
import { renderFileWithHighlighter } from "./utils/renderFileWithHighlighter.js";
|
|
39
|
+
import { FileRenderer } from "./renderers/FileRenderer.js";
|
|
40
|
+
import { SVGSpriteSheet } from "./sprite.js";
|
|
41
|
+
import { areFilesEqual } from "./utils/areFilesEqual.js";
|
|
42
|
+
import { createAnnotationWrapperNode } from "./utils/createAnnotationWrapperNode.js";
|
|
43
|
+
import { createCodeNode } from "./utils/createCodeNode.js";
|
|
44
|
+
import { createHoverContentNode } from "./utils/createHoverContentNode.js";
|
|
45
|
+
import { createUnsafeCSSStyleNode } from "./utils/createUnsafeCSSStyleNode.js";
|
|
46
|
+
import { wrapCoreCSS, wrapUnsafeCSS } from "./utils/cssWrappers.js";
|
|
47
|
+
import { prerenderHTMLIfNecessary } from "./utils/prerenderHTMLIfNecessary.js";
|
|
48
|
+
import { setPreNodeProperties } from "./utils/setWrapperNodeProps.js";
|
|
49
|
+
import { File } from "./components/File.js";
|
|
50
|
+
import { ScrollSyncManager } from "./managers/ScrollSyncManager.js";
|
|
51
|
+
import { createEmptyRowBuffer } from "./utils/createEmptyRowBuffer.js";
|
|
52
|
+
import { createNoNewlineElement } from "./utils/createNoNewlineElement.js";
|
|
53
|
+
import { createSeparator } from "./utils/createSeparator.js";
|
|
54
|
+
import { getHunkSeparatorSlotName } from "./utils/getHunkSeparatorSlotName.js";
|
|
55
|
+
import { getTotalLineCountFromHunks } from "./utils/getTotalLineCountFromHunks.js";
|
|
56
|
+
import { createDiffSpanDecoration, pushOrJoinSpan } from "./utils/parseDiffDecorations.js";
|
|
57
|
+
import { renderDiffWithHighlighter } from "./utils/renderDiffWithHighlighter.js";
|
|
58
|
+
import { DiffHunksRenderer } from "./renderers/DiffHunksRenderer.js";
|
|
59
|
+
import { parseLineType } from "./utils/parseLineType.js";
|
|
60
|
+
import { parsePatchFiles } from "./utils/parsePatchFiles.js";
|
|
61
|
+
import { parseDiffFromFile } from "./utils/parseDiffFromFile.js";
|
|
62
|
+
import { FileDiff } from "./components/FileDiff.js";
|
|
63
|
+
import { queueRender } from "./managers/UniversalRenderingManager.js";
|
|
64
|
+
import { ShikiStreamTokenizer } from "./shiki-stream/tokenizer.js";
|
|
65
|
+
import { CodeToTokenTransformStream } from "./shiki-stream/stream.js";
|
|
66
|
+
import { createRowNodes } from "./utils/createRowNodes.js";
|
|
67
|
+
import { createSpanFromToken } from "./utils/createSpanNodeFromToken.js";
|
|
68
|
+
import { FileStream } from "./components/FileStream.js";
|
|
69
|
+
import { getResolvedLanguages } from "./highlighter/languages/getResolvedLanguages.js";
|
|
70
|
+
import { hasResolvedLanguages } from "./highlighter/languages/hasResolvedLanguages.js";
|
|
71
|
+
import { resolveLanguages } from "./highlighter/languages/resolveLanguages.js";
|
|
72
|
+
import { getResolvedThemes } from "./highlighter/themes/getResolvedThemes.js";
|
|
73
|
+
import { resolveThemes } from "./highlighter/themes/resolveThemes.js";
|
|
74
|
+
import { areObjectsEqual } from "./utils/areObjectsEqual.js";
|
|
75
|
+
import { areOptionsEqual } from "./utils/areOptionsEqual.js";
|
|
76
|
+
import { createStyleElement } from "./utils/createStyleElement.js";
|
|
77
|
+
import { diffAcceptRejectHunk } from "./utils/diffAcceptRejectHunk.js";
|
|
78
|
+
import { getLineEndingType } from "./utils/getLineEndingType.js";
|
|
79
|
+
import { getSingularPatch } from "./utils/getSingularPatch.js";
|
|
80
|
+
import { setLanguageOverride } from "./utils/setLanguageOverride.js";
|
|
81
|
+
import { codeToHtml } from "shiki";
|
|
82
|
+
|
|
83
|
+
export { ALTERNATE_FILE_NAMES_GIT, AttachedLanguages, AttachedThemes, COMMIT_METADATA_SPLIT, CORE_CSS_ATTRIBUTE, CodeToTokenTransformStream, DEFAULT_THEMES, DIFFS_TAG_NAME, DiffHunksRenderer, EXTENSION_TO_FILE_FORMAT, FILENAME_HEADER_REGEX, FILENAME_HEADER_REGEX_GIT, FILE_CONTEXT_BLOB, FILE_MODE_FROM_INDEX, File, FileDiff, FileRenderer, FileStream, GIT_DIFF_FILE_BREAK_REGEX, HEADER_METADATA_SLOT_ID, HUNK_HEADER, LineSelectionManager, MouseEventManager, RegisteredCustomThemes, ResizeManager, ResolvedLanguages, ResolvedThemes, ResolvingLanguages, ResolvingThemes, SPLIT_WITH_NEWLINES, SVGSpriteSheet, ScrollSyncManager, ShikiStreamTokenizer, UNIFIED_DIFF_FILE_BREAK_REGEX, UNSAFE_CSS_ATTRIBUTE, areFilesEqual, areLanguagesAttached, areObjectsEqual, areOptionsEqual, areSelectionsEqual, areThemesAttached, areThemesEqual, attachResolvedLanguages, attachResolvedThemes, cleanLastNewline, cleanUpResolvedLanguages, cleanUpResolvedThemes, codeToHtml, createAnnotationElement, createAnnotationWrapperNode, createCodeNode, createDiffSpanDecoration, createEmptyRowBuffer, createFileHeaderElement, createHastElement, createHoverContentNode, createIconElement, createNoNewlineElement, createPreElement, createPreWrapperProperties, createRowNodes, createSeparator, createSpanFromToken, createStyleElement, createTextNodeElement, createTransformerWithState, createUnsafeCSSStyleNode, diffAcceptRejectHunk, disposeHighlighter, extendFileFormatMap, findCodeElement, formatCSSVariablePrefix, getFiletypeFromFileName, getHighlighterIfLoaded, getHighlighterOptions, getHighlighterThemeStyles, getHunkSeparatorSlotName, getIconForType, getLineAnnotationName, getLineEndingType, getLineNodes, getResolvedLanguages, getResolvedOrResolveLanguage, getResolvedOrResolveTheme, getResolvedThemes, getSharedHighlighter, getSingularPatch, getThemes, getTotalLineCountFromHunks, hasResolvedLanguages, hasResolvedThemes, isHighlighterLoaded, isHighlighterLoading, isHighlighterNull, isWorkerContext, parseDiffFromFile, parseLineType, parsePatchFiles, pluckLineSelectionOptions, pluckMouseEventOptions, preloadHighlighter, prerenderHTMLIfNecessary, processLine, pushOrJoinSpan, queueRender, registerCustomTheme, renderDiffWithHighlighter, renderFileWithHighlighter, resolveLanguage, resolveLanguages, resolveTheme, resolveThemes, setLanguageOverride, setPreNodeProperties, wrapCoreCSS, wrapUnsafeCSS };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { AnnotationSide } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/managers/LineSelectionManager.d.ts
|
|
4
|
+
type SelectionSide = AnnotationSide;
|
|
5
|
+
interface SelectedLineRange {
|
|
6
|
+
start: number;
|
|
7
|
+
side?: SelectionSide;
|
|
8
|
+
end: number;
|
|
9
|
+
endSide?: SelectionSide;
|
|
10
|
+
}
|
|
11
|
+
interface LineSelectionOptions {
|
|
12
|
+
enableLineSelection?: boolean;
|
|
13
|
+
onLineSelected?: (range: SelectedLineRange | null) => void;
|
|
14
|
+
onLineSelectionStart?: (range: SelectedLineRange | null) => void;
|
|
15
|
+
onLineSelectionEnd?: (range: SelectedLineRange | null) => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Manages line selection state and interactions for code/diff viewers.
|
|
19
|
+
* Handles:
|
|
20
|
+
* - Click and drag selection
|
|
21
|
+
* - Shift-click to extend selection
|
|
22
|
+
* - DOM attribute updates (data-selected-line)
|
|
23
|
+
*/
|
|
24
|
+
declare class LineSelectionManager {
|
|
25
|
+
private options;
|
|
26
|
+
private pre;
|
|
27
|
+
private selectedRange;
|
|
28
|
+
private renderedSelectionRange;
|
|
29
|
+
private anchor;
|
|
30
|
+
private _queuedRender;
|
|
31
|
+
constructor(options?: LineSelectionOptions);
|
|
32
|
+
setOptions(options: LineSelectionOptions): void;
|
|
33
|
+
cleanUp(): void;
|
|
34
|
+
setup(pre: HTMLPreElement): void;
|
|
35
|
+
setDirty(): void;
|
|
36
|
+
isDirty(): boolean;
|
|
37
|
+
setSelection(range: SelectedLineRange | null): void;
|
|
38
|
+
getSelection(): SelectedLineRange | null;
|
|
39
|
+
private attachEventListeners;
|
|
40
|
+
private removeEventListeners;
|
|
41
|
+
private handleMouseDown;
|
|
42
|
+
private handleMouseMove;
|
|
43
|
+
private handleMouseUp;
|
|
44
|
+
private updateSelection;
|
|
45
|
+
private updateSelection;
|
|
46
|
+
private renderSelection;
|
|
47
|
+
private deriveRowRangeFromDOM;
|
|
48
|
+
private findRowIndexForLineNumber;
|
|
49
|
+
private notifySelectionChange;
|
|
50
|
+
private notifySelectionStart;
|
|
51
|
+
private notifySelectionEnd;
|
|
52
|
+
private getMouseEventDataForPath;
|
|
53
|
+
private getLineIndex;
|
|
54
|
+
private getLineSideFromElement;
|
|
55
|
+
}
|
|
56
|
+
declare function pluckLineSelectionOptions({
|
|
57
|
+
enableLineSelection,
|
|
58
|
+
onLineSelected,
|
|
59
|
+
onLineSelectionStart,
|
|
60
|
+
onLineSelectionEnd
|
|
61
|
+
}: LineSelectionOptions): LineSelectionOptions;
|
|
62
|
+
//#endregion
|
|
63
|
+
export { LineSelectionManager, LineSelectionOptions, SelectedLineRange, SelectionSide, pluckLineSelectionOptions };
|
|
64
|
+
//# sourceMappingURL=LineSelectionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LineSelectionManager.d.ts","names":["options: LineSelectionOptions"],"sources":["../../src/managers/LineSelectionManager.ts"],"sourcesContent":[],"mappings":";;;KAGY,aAAA,GAAgB;UAEX,iBAAA;EAFjB,KAAY,EAAA,MAAA;EAEZ,IAAiB,CAAA,EAER,aAFQ;EAOjB,GAAiB,EAAA,MAAA;EAEU,OAAA,CAAA,EALf,aAKe;;AAEI,UAJd,oBAAA,CAIc;EAAA,mBAAA,CAAA,EAAA,OAAA;EAgB/B,cAAa,CAAA,EAAA,CAAA,KAAA,EAlBc,iBAkBd,GAAA,IAAA,EAAA,GAAA,IAAA;EAOkB,oBAAA,CAAA,EAAA,CAAA,KAAA,EAxBE,iBAwBF,GAAA,IAAA,EAAA,GAAA,IAAA;EAET,kBAAA,CAAA,EAAA,CAAA,KAAA,EAzBS,iBAyBT,GAAA,IAAA,EAAA,GAAA,IAAA;;;;;AAuZtB;;;;AAIE,cApaW,oBAAA,CAoaX;EACC,QAAA,OAAA;EAAuB,QAAA,GAAA;EAAA,QAAA,aAAA;;;;wBA9ZK;sBAET;;aAoBT;;;sBA2BS;kBAaJ;;;;;;;;;;;;;;;;;;iBA2VF,yBAAA;;;;;GAKb,uBAAuB"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { areSelectionsEqual } from "../utils/areSelectionsEqual.js";
|
|
2
|
+
|
|
3
|
+
//#region src/managers/LineSelectionManager.ts
|
|
4
|
+
/**
|
|
5
|
+
* Manages line selection state and interactions for code/diff viewers.
|
|
6
|
+
* Handles:
|
|
7
|
+
* - Click and drag selection
|
|
8
|
+
* - Shift-click to extend selection
|
|
9
|
+
* - DOM attribute updates (data-selected-line)
|
|
10
|
+
*/
|
|
11
|
+
var LineSelectionManager = class {
|
|
12
|
+
pre;
|
|
13
|
+
selectedRange = null;
|
|
14
|
+
renderedSelectionRange;
|
|
15
|
+
anchor;
|
|
16
|
+
_queuedRender;
|
|
17
|
+
constructor(options = {}) {
|
|
18
|
+
this.options = options;
|
|
19
|
+
}
|
|
20
|
+
setOptions(options) {
|
|
21
|
+
this.options = {
|
|
22
|
+
...this.options,
|
|
23
|
+
...options
|
|
24
|
+
};
|
|
25
|
+
this.removeEventListeners();
|
|
26
|
+
if (this.options.enableLineSelection === true) this.attachEventListeners();
|
|
27
|
+
}
|
|
28
|
+
cleanUp() {
|
|
29
|
+
this.removeEventListeners();
|
|
30
|
+
if (this._queuedRender != null) {
|
|
31
|
+
cancelAnimationFrame(this._queuedRender);
|
|
32
|
+
this._queuedRender = void 0;
|
|
33
|
+
}
|
|
34
|
+
if (this.pre != null) delete this.pre.dataset.interactiveLineNumbers;
|
|
35
|
+
this.pre = void 0;
|
|
36
|
+
}
|
|
37
|
+
setup(pre) {
|
|
38
|
+
this.setDirty();
|
|
39
|
+
if (this.pre !== pre) this.cleanUp();
|
|
40
|
+
this.pre = pre;
|
|
41
|
+
const { enableLineSelection = false } = this.options;
|
|
42
|
+
if (enableLineSelection) {
|
|
43
|
+
this.pre.dataset.interactiveLineNumbers = "";
|
|
44
|
+
this.attachEventListeners();
|
|
45
|
+
} else {
|
|
46
|
+
this.removeEventListeners();
|
|
47
|
+
delete this.pre.dataset.interactiveLineNumbers;
|
|
48
|
+
}
|
|
49
|
+
this.setSelection(this.selectedRange);
|
|
50
|
+
}
|
|
51
|
+
setDirty() {
|
|
52
|
+
this.renderedSelectionRange = void 0;
|
|
53
|
+
}
|
|
54
|
+
isDirty() {
|
|
55
|
+
return this.renderedSelectionRange === void 0;
|
|
56
|
+
}
|
|
57
|
+
setSelection(range) {
|
|
58
|
+
const isRangeChange = !(range === this.selectedRange || areSelectionsEqual(range ?? void 0, this.selectedRange ?? void 0));
|
|
59
|
+
if (!this.isDirty() && !isRangeChange) return;
|
|
60
|
+
this.selectedRange = range;
|
|
61
|
+
this.renderSelection();
|
|
62
|
+
if (isRangeChange) this.notifySelectionChange();
|
|
63
|
+
}
|
|
64
|
+
getSelection() {
|
|
65
|
+
return this.selectedRange;
|
|
66
|
+
}
|
|
67
|
+
attachEventListeners() {
|
|
68
|
+
if (this.pre == null) return;
|
|
69
|
+
this.removeEventListeners();
|
|
70
|
+
this.pre.addEventListener("mousedown", this.handleMouseDown);
|
|
71
|
+
}
|
|
72
|
+
removeEventListeners() {
|
|
73
|
+
if (this.pre == null) return;
|
|
74
|
+
this.pre.removeEventListener("mousedown", this.handleMouseDown);
|
|
75
|
+
document.removeEventListener("mousemove", this.handleMouseMove);
|
|
76
|
+
document.removeEventListener("mouseup", this.handleMouseUp);
|
|
77
|
+
}
|
|
78
|
+
handleMouseDown = (event) => {
|
|
79
|
+
const mouseEventData = event.button === 0 ? this.getMouseEventDataForPath(event.composedPath(), "click") : void 0;
|
|
80
|
+
if (mouseEventData == null) return;
|
|
81
|
+
event.preventDefault();
|
|
82
|
+
const { lineNumber, eventSide, lineIndex } = mouseEventData;
|
|
83
|
+
if (event.shiftKey && this.selectedRange != null) {
|
|
84
|
+
const range = this.deriveRowRangeFromDOM(this.selectedRange);
|
|
85
|
+
if (range == null) return;
|
|
86
|
+
const useStart = range.start <= range.end ? lineIndex >= range.start : lineIndex <= range.end;
|
|
87
|
+
this.anchor = {
|
|
88
|
+
line: useStart ? this.selectedRange.start : this.selectedRange.end,
|
|
89
|
+
side: (useStart ? this.selectedRange.side : this.selectedRange.endSide ?? this.selectedRange.side) ?? "additions"
|
|
90
|
+
};
|
|
91
|
+
this.updateSelection(lineNumber, eventSide);
|
|
92
|
+
this.notifySelectionStart(this.selectedRange);
|
|
93
|
+
} else {
|
|
94
|
+
if (this.selectedRange?.start === lineNumber && this.selectedRange?.end === lineNumber) {
|
|
95
|
+
this.updateSelection(null);
|
|
96
|
+
this.notifySelectionEnd(null);
|
|
97
|
+
this.notifySelectionChange();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
this.selectedRange = null;
|
|
101
|
+
this.anchor = {
|
|
102
|
+
line: lineNumber,
|
|
103
|
+
side: eventSide
|
|
104
|
+
};
|
|
105
|
+
this.updateSelection(lineNumber, eventSide);
|
|
106
|
+
this.notifySelectionStart(this.selectedRange);
|
|
107
|
+
}
|
|
108
|
+
document.addEventListener("mousemove", this.handleMouseMove);
|
|
109
|
+
document.addEventListener("mouseup", this.handleMouseUp);
|
|
110
|
+
};
|
|
111
|
+
handleMouseMove = (event) => {
|
|
112
|
+
const mouseEventData = this.getMouseEventDataForPath(event.composedPath(), "move");
|
|
113
|
+
if (mouseEventData == null || this.anchor == null) return;
|
|
114
|
+
const { lineNumber, eventSide } = mouseEventData;
|
|
115
|
+
this.updateSelection(lineNumber, eventSide);
|
|
116
|
+
};
|
|
117
|
+
handleMouseUp = () => {
|
|
118
|
+
this.anchor = void 0;
|
|
119
|
+
document.removeEventListener("mousemove", this.handleMouseMove);
|
|
120
|
+
document.removeEventListener("mouseup", this.handleMouseUp);
|
|
121
|
+
this.notifySelectionEnd(this.selectedRange);
|
|
122
|
+
this.notifySelectionChange();
|
|
123
|
+
};
|
|
124
|
+
updateSelection(currentLine, side) {
|
|
125
|
+
if (currentLine == null) this.selectedRange = null;
|
|
126
|
+
else {
|
|
127
|
+
const anchorSide = this.anchor?.side ?? side;
|
|
128
|
+
this.selectedRange = {
|
|
129
|
+
start: this.anchor?.line ?? currentLine,
|
|
130
|
+
end: currentLine,
|
|
131
|
+
side: anchorSide,
|
|
132
|
+
endSide: anchorSide !== side ? side : void 0
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
this._queuedRender ??= requestAnimationFrame(this.renderSelection);
|
|
136
|
+
}
|
|
137
|
+
renderSelection = () => {
|
|
138
|
+
if (this._queuedRender != null) {
|
|
139
|
+
cancelAnimationFrame(this._queuedRender);
|
|
140
|
+
this._queuedRender = void 0;
|
|
141
|
+
}
|
|
142
|
+
if (this.pre == null || this.renderedSelectionRange === this.selectedRange) return;
|
|
143
|
+
const allSelected = this.pre.querySelectorAll("[data-selected-line]");
|
|
144
|
+
for (const element of allSelected) element.removeAttribute("data-selected-line");
|
|
145
|
+
this.renderedSelectionRange = this.selectedRange;
|
|
146
|
+
if (this.selectedRange == null) return;
|
|
147
|
+
const codeElements = this.pre.querySelectorAll("[data-code]");
|
|
148
|
+
if (codeElements.length === 0) return;
|
|
149
|
+
if (codeElements.length > 2) {
|
|
150
|
+
console.error(codeElements);
|
|
151
|
+
throw new Error("LineSelectionManager.applySelectionToDOM: Somehow there are more than 2 code elements...");
|
|
152
|
+
}
|
|
153
|
+
const rowRange = this.deriveRowRangeFromDOM(this.selectedRange);
|
|
154
|
+
if (rowRange == null) {
|
|
155
|
+
console.error({
|
|
156
|
+
rowRange,
|
|
157
|
+
selectedRange: this.selectedRange
|
|
158
|
+
});
|
|
159
|
+
throw new Error("LineSelectionManager.renderSelection: No valid rowRange");
|
|
160
|
+
}
|
|
161
|
+
const isSingle = rowRange.start === rowRange.end;
|
|
162
|
+
const first = Math.min(rowRange.start, rowRange.end);
|
|
163
|
+
const last = Math.max(rowRange.start, rowRange.end);
|
|
164
|
+
for (const code of codeElements) for (const element of code.children) {
|
|
165
|
+
if (!(element instanceof HTMLElement)) continue;
|
|
166
|
+
const lineIndex = this.getLineIndex(element);
|
|
167
|
+
if ((lineIndex ?? 0) > last) break;
|
|
168
|
+
if (lineIndex == null || lineIndex < first) continue;
|
|
169
|
+
let attributeValue = isSingle ? "single" : lineIndex === first ? "first" : lineIndex === last ? "last" : "";
|
|
170
|
+
element.setAttribute("data-selected-line", attributeValue);
|
|
171
|
+
if (element.nextSibling instanceof HTMLElement && element.nextSibling.hasAttribute("data-line-annotation")) {
|
|
172
|
+
if (isSingle) {
|
|
173
|
+
attributeValue = "last";
|
|
174
|
+
element.setAttribute("data-selected-line", "first");
|
|
175
|
+
} else if (lineIndex === first) attributeValue = "";
|
|
176
|
+
else if (lineIndex === last) element.setAttribute("data-selected-line", "");
|
|
177
|
+
element.nextSibling.setAttribute("data-selected-line", attributeValue);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
deriveRowRangeFromDOM(range) {
|
|
182
|
+
if (range == null) return void 0;
|
|
183
|
+
const start = this.findRowIndexForLineNumber(range.start, range.side);
|
|
184
|
+
const end = range.end === range.start && (range.endSide == null || range.endSide === range.side) ? start : this.findRowIndexForLineNumber(range.end, range.endSide ?? range.side);
|
|
185
|
+
return start != null && end != null ? {
|
|
186
|
+
start,
|
|
187
|
+
end
|
|
188
|
+
} : void 0;
|
|
189
|
+
}
|
|
190
|
+
findRowIndexForLineNumber(lineNumber, targetSide = "additions") {
|
|
191
|
+
if (this.pre == null) return void 0;
|
|
192
|
+
const elements = Array.from(this.pre.querySelectorAll(`[data-line="${lineNumber}"]`));
|
|
193
|
+
elements.push(...Array.from(this.pre.querySelectorAll(`[data-alt-line="${lineNumber}"]`)));
|
|
194
|
+
if (elements.length === 0) return void 0;
|
|
195
|
+
for (const element of elements) {
|
|
196
|
+
if (!(element instanceof HTMLElement)) continue;
|
|
197
|
+
if (this.getLineSideFromElement(element) === targetSide) return this.getLineIndex(element);
|
|
198
|
+
else if (parseInt(element.dataset.altLine ?? "") === lineNumber) return this.getLineIndex(element);
|
|
199
|
+
}
|
|
200
|
+
console.error("LineSelectionManager.findRowIndexForLineNumber: Invalid selection", lineNumber, targetSide);
|
|
201
|
+
}
|
|
202
|
+
notifySelectionChange() {
|
|
203
|
+
const { onLineSelected } = this.options;
|
|
204
|
+
if (onLineSelected == null) return;
|
|
205
|
+
onLineSelected(this.selectedRange ?? null);
|
|
206
|
+
}
|
|
207
|
+
notifySelectionStart(range) {
|
|
208
|
+
const { onLineSelectionStart } = this.options;
|
|
209
|
+
if (onLineSelectionStart == null) return;
|
|
210
|
+
onLineSelectionStart(range);
|
|
211
|
+
}
|
|
212
|
+
notifySelectionEnd(range) {
|
|
213
|
+
const { onLineSelectionEnd } = this.options;
|
|
214
|
+
if (onLineSelectionEnd == null) return;
|
|
215
|
+
onLineSelectionEnd(range);
|
|
216
|
+
}
|
|
217
|
+
getMouseEventDataForPath(path, eventType) {
|
|
218
|
+
let lineNumber;
|
|
219
|
+
let lineIndex;
|
|
220
|
+
let isNumberColumn = false;
|
|
221
|
+
let eventSide;
|
|
222
|
+
for (const element of path) {
|
|
223
|
+
if (!(element instanceof HTMLElement)) continue;
|
|
224
|
+
if (element.hasAttribute("data-column-number")) {
|
|
225
|
+
isNumberColumn = true;
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
if (element.hasAttribute("data-line")) {
|
|
229
|
+
lineNumber = parseInt(element.dataset.line ?? "", 10);
|
|
230
|
+
lineIndex = parseInt(element.dataset.lineIndex ?? "", 10);
|
|
231
|
+
if (element.dataset.lineType === "change-deletion") eventSide = "deletions";
|
|
232
|
+
else if (element.dataset.lineType === "change-additions") eventSide = "additions";
|
|
233
|
+
if (Number.isNaN(lineIndex) || Number.isNaN(lineNumber)) {
|
|
234
|
+
lineIndex = void 0;
|
|
235
|
+
lineNumber = void 0;
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
if (eventSide != null) break;
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
if (element.hasAttribute("data-code")) {
|
|
242
|
+
eventSide ??= element.hasAttribute("data-deletions") ? "deletions" : "additions";
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (eventType === "click" && !isNumberColumn || lineIndex == null || lineNumber == null) return;
|
|
247
|
+
return {
|
|
248
|
+
lineIndex,
|
|
249
|
+
lineNumber,
|
|
250
|
+
eventSide: eventSide ?? "additions"
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
getLineIndex(element) {
|
|
254
|
+
const lineIndex = parseInt(element.dataset.lineIndex ?? "", 10);
|
|
255
|
+
return !Number.isNaN(lineIndex) ? lineIndex : void 0;
|
|
256
|
+
}
|
|
257
|
+
getLineSideFromElement(element) {
|
|
258
|
+
if (element.dataset.lineType === "change-deletion") return "deletions";
|
|
259
|
+
if (element.dataset.lineType === "change-addition") return "additions";
|
|
260
|
+
const parent = element.closest("[data-code]");
|
|
261
|
+
if (!(parent instanceof HTMLElement)) return "additions";
|
|
262
|
+
return parent.hasAttribute("data-deletions") ? "deletions" : "additions";
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
function pluckLineSelectionOptions({ enableLineSelection, onLineSelected, onLineSelectionStart, onLineSelectionEnd }) {
|
|
266
|
+
return {
|
|
267
|
+
enableLineSelection,
|
|
268
|
+
onLineSelected,
|
|
269
|
+
onLineSelectionStart,
|
|
270
|
+
onLineSelectionEnd
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
//#endregion
|
|
275
|
+
export { LineSelectionManager, pluckLineSelectionOptions };
|
|
276
|
+
//# sourceMappingURL=LineSelectionManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LineSelectionManager.js","names":["options: LineSelectionOptions","lineNumber: number | undefined","lineIndex: number | undefined","eventSide: AnnotationSide | undefined"],"sources":["../../src/managers/LineSelectionManager.ts"],"sourcesContent":["import type { AnnotationSide } from '../types';\nimport { areSelectionsEqual } from '../utils/areSelectionsEqual';\n\nexport type SelectionSide = AnnotationSide;\n\nexport interface SelectedLineRange {\n start: number;\n side?: SelectionSide;\n end: number;\n endSide?: SelectionSide;\n}\n\nexport interface LineSelectionOptions {\n enableLineSelection?: boolean;\n onLineSelected?: (range: SelectedLineRange | null) => void;\n onLineSelectionStart?: (range: SelectedLineRange | null) => void;\n onLineSelectionEnd?: (range: SelectedLineRange | null) => void;\n}\n\ninterface MouseInfo {\n lineNumber: number;\n eventSide: AnnotationSide;\n lineIndex: number;\n}\n\n/**\n * Manages line selection state and interactions for code/diff viewers.\n * Handles:\n * - Click and drag selection\n * - Shift-click to extend selection\n * - DOM attribute updates (data-selected-line)\n */\nexport class LineSelectionManager {\n private pre: HTMLPreElement | undefined;\n private selectedRange: SelectedLineRange | null = null;\n private renderedSelectionRange: SelectedLineRange | null | undefined;\n private anchor: { line: number; side: SelectionSide } | undefined;\n private _queuedRender: number | undefined;\n\n constructor(private options: LineSelectionOptions = {}) {}\n\n setOptions(options: LineSelectionOptions): void {\n this.options = { ...this.options, ...options };\n this.removeEventListeners();\n if (this.options.enableLineSelection === true) {\n this.attachEventListeners();\n }\n }\n\n cleanUp(): void {\n this.removeEventListeners();\n if (this._queuedRender != null) {\n cancelAnimationFrame(this._queuedRender);\n this._queuedRender = undefined;\n }\n if (this.pre != null) {\n delete this.pre.dataset.interactiveLineNumbers;\n }\n this.pre = undefined;\n }\n\n setup(pre: HTMLPreElement): void {\n // Assume we are always dirty after a setup...\n this.setDirty();\n if (this.pre !== pre) {\n this.cleanUp();\n }\n this.pre = pre;\n const { enableLineSelection = false } = this.options;\n if (enableLineSelection) {\n this.pre.dataset.interactiveLineNumbers = '';\n this.attachEventListeners();\n } else {\n this.removeEventListeners();\n delete this.pre.dataset.interactiveLineNumbers;\n }\n\n this.setSelection(this.selectedRange);\n }\n\n setDirty(): void {\n this.renderedSelectionRange = undefined;\n }\n\n isDirty(): boolean {\n return this.renderedSelectionRange === undefined;\n }\n\n setSelection(range: SelectedLineRange | null): void {\n const isRangeChange = !(\n range === this.selectedRange ||\n areSelectionsEqual(range ?? undefined, this.selectedRange ?? undefined)\n );\n if (!this.isDirty() && !isRangeChange) return;\n this.selectedRange = range;\n this.renderSelection();\n if (isRangeChange) {\n this.notifySelectionChange();\n }\n }\n\n getSelection(): SelectedLineRange | null {\n return this.selectedRange;\n }\n\n private attachEventListeners(): void {\n if (this.pre == null) return;\n // Lets run a cleanup, just in case\n this.removeEventListeners();\n this.pre.addEventListener('mousedown', this.handleMouseDown);\n }\n\n private removeEventListeners(): void {\n if (this.pre == null) return;\n this.pre.removeEventListener('mousedown', this.handleMouseDown);\n document.removeEventListener('mousemove', this.handleMouseMove);\n document.removeEventListener('mouseup', this.handleMouseUp);\n }\n\n private handleMouseDown = (event: MouseEvent): void => {\n // Only handle left mouse button\n const mouseEventData =\n event.button === 0\n ? this.getMouseEventDataForPath(event.composedPath(), 'click')\n : undefined;\n if (mouseEventData == null) {\n return;\n }\n event.preventDefault();\n const { lineNumber, eventSide, lineIndex } = mouseEventData;\n if (event.shiftKey && this.selectedRange != null) {\n const range = this.deriveRowRangeFromDOM(this.selectedRange);\n if (range == null) return;\n const useStart =\n range.start <= range.end\n ? lineIndex >= range.start\n : lineIndex <= range.end;\n this.anchor = {\n line: useStart ? this.selectedRange.start : this.selectedRange.end,\n side:\n (useStart\n ? this.selectedRange.side\n : (this.selectedRange.endSide ?? this.selectedRange.side)) ??\n 'additions',\n };\n this.updateSelection(lineNumber, eventSide);\n this.notifySelectionStart(this.selectedRange);\n } else {\n // Check if clicking on already selected single line to unselect\n if (\n this.selectedRange?.start === lineNumber &&\n this.selectedRange?.end === lineNumber\n ) {\n this.updateSelection(null);\n this.notifySelectionEnd(null);\n this.notifySelectionChange();\n return;\n }\n this.selectedRange = null;\n this.anchor = { line: lineNumber, side: eventSide };\n this.updateSelection(lineNumber, eventSide);\n this.notifySelectionStart(this.selectedRange);\n }\n\n document.addEventListener('mousemove', this.handleMouseMove);\n document.addEventListener('mouseup', this.handleMouseUp);\n };\n\n private handleMouseMove = (event: MouseEvent): void => {\n const mouseEventData = this.getMouseEventDataForPath(\n event.composedPath(),\n 'move'\n );\n if (mouseEventData == null || this.anchor == null) return;\n const { lineNumber, eventSide } = mouseEventData;\n this.updateSelection(lineNumber, eventSide);\n };\n\n private handleMouseUp = (): void => {\n this.anchor = undefined;\n document.removeEventListener('mousemove', this.handleMouseMove);\n document.removeEventListener('mouseup', this.handleMouseUp);\n this.notifySelectionEnd(this.selectedRange);\n this.notifySelectionChange();\n };\n\n private updateSelection(currentLine: null): void;\n private updateSelection(currentLine: number, side: AnnotationSide): void;\n private updateSelection(\n currentLine: number | null,\n side?: AnnotationSide\n ): void {\n if (currentLine == null) {\n this.selectedRange = null;\n } else {\n const anchorSide = this.anchor?.side ?? side;\n const anchorLine = this.anchor?.line ?? currentLine;\n this.selectedRange = {\n start: anchorLine,\n end: currentLine,\n side: anchorSide,\n endSide: anchorSide !== side ? side : undefined,\n };\n }\n this._queuedRender ??= requestAnimationFrame(this.renderSelection);\n }\n\n private renderSelection = (): void => {\n if (this._queuedRender != null) {\n cancelAnimationFrame(this._queuedRender);\n this._queuedRender = undefined;\n }\n if (\n this.pre == null ||\n this.renderedSelectionRange === this.selectedRange\n ) {\n return;\n }\n\n // First clear existing selections, maybe we\n // can cache this to better avoid this query?\n const allSelected = this.pre.querySelectorAll('[data-selected-line]');\n for (const element of allSelected) {\n element.removeAttribute('data-selected-line');\n }\n\n this.renderedSelectionRange = this.selectedRange;\n if (this.selectedRange == null) {\n return;\n }\n\n const codeElements = this.pre.querySelectorAll('[data-code]');\n if (codeElements.length === 0) return;\n if (codeElements.length > 2) {\n console.error(codeElements);\n throw new Error(\n 'LineSelectionManager.applySelectionToDOM: Somehow there are more than 2 code elements...'\n );\n }\n const rowRange = this.deriveRowRangeFromDOM(this.selectedRange);\n if (rowRange == null) {\n console.error({ rowRange, selectedRange: this.selectedRange });\n throw new Error(\n 'LineSelectionManager.renderSelection: No valid rowRange'\n );\n }\n const isSingle = rowRange.start === rowRange.end;\n const first = Math.min(rowRange.start, rowRange.end);\n const last = Math.max(rowRange.start, rowRange.end);\n for (const code of codeElements) {\n for (const element of code.children) {\n if (!(element instanceof HTMLElement)) continue;\n const lineIndex = this.getLineIndex(element);\n if ((lineIndex ?? 0) > last) break;\n if (lineIndex == null || lineIndex < first) continue;\n let attributeValue = isSingle\n ? 'single'\n : lineIndex === first\n ? 'first'\n : lineIndex === last\n ? 'last'\n : '';\n element.setAttribute('data-selected-line', attributeValue);\n // If we have a line annotation following our selected line, we should\n // mark it as selected as well\n if (\n element.nextSibling instanceof HTMLElement &&\n element.nextSibling.hasAttribute('data-line-annotation')\n ) {\n // Depending on the line's attribute value, lets go ahead and correct\n // it when adding in the annotation row\n if (isSingle) {\n // Single technically becomes 2 selected lines\n attributeValue = 'last';\n element.setAttribute('data-selected-line', 'first');\n } else if (lineIndex === first) {\n // We don't want apply 'first' to the line annotation\n attributeValue = '';\n } else if (lineIndex === last) {\n // the annotation will become the last selected line and therefore\n // our existing line should no longer be last\n element.setAttribute('data-selected-line', '');\n }\n element.nextSibling.setAttribute(\n 'data-selected-line',\n attributeValue\n );\n }\n }\n }\n };\n\n private deriveRowRangeFromDOM(\n range: SelectedLineRange\n ): { start: number; end: number } | undefined {\n if (range == null) return undefined;\n const start = this.findRowIndexForLineNumber(range.start, range.side);\n const end =\n range.end === range.start &&\n (range.endSide == null || range.endSide === range.side)\n ? start\n : this.findRowIndexForLineNumber(\n range.end,\n range.endSide ?? range.side\n );\n return start != null && end != null ? { start, end } : undefined;\n }\n\n private findRowIndexForLineNumber(\n lineNumber: number,\n targetSide: SelectionSide = 'additions'\n ): number | undefined {\n if (this.pre == null) return undefined;\n const elements = Array.from(\n this.pre.querySelectorAll(`[data-line=\"${lineNumber}\"]`)\n );\n // Given how unified diffs can order things, we need to always process\n // `[data-line]` elements before `[data-alt-line]`\n elements.push(\n ...Array.from(\n this.pre.querySelectorAll(`[data-alt-line=\"${lineNumber}\"]`)\n )\n );\n if (elements.length === 0) return undefined;\n\n for (const element of elements) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n const side = this.getLineSideFromElement(element);\n if (side === targetSide) {\n return this.getLineIndex(element);\n } else if (parseInt(element.dataset.altLine ?? '') === lineNumber) {\n return this.getLineIndex(element);\n }\n }\n console.error(\n 'LineSelectionManager.findRowIndexForLineNumber: Invalid selection',\n lineNumber,\n targetSide\n );\n return undefined;\n }\n\n private notifySelectionChange(): void {\n const { onLineSelected } = this.options;\n if (onLineSelected == null) return;\n\n onLineSelected(this.selectedRange ?? null);\n }\n\n private notifySelectionStart(range: SelectedLineRange | null): void {\n const { onLineSelectionStart } = this.options;\n if (onLineSelectionStart == null) return;\n onLineSelectionStart(range);\n }\n\n private notifySelectionEnd(range: SelectedLineRange | null): void {\n const { onLineSelectionEnd } = this.options;\n if (onLineSelectionEnd == null) return;\n onLineSelectionEnd(range);\n }\n\n private getMouseEventDataForPath(\n path: (EventTarget | undefined)[],\n eventType: 'click' | 'move'\n ): MouseInfo | undefined {\n let lineNumber: number | undefined;\n let lineIndex: number | undefined;\n let isNumberColumn = false;\n let eventSide: AnnotationSide | undefined;\n for (const element of path) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (element.hasAttribute('data-column-number')) {\n isNumberColumn = true;\n continue;\n }\n if (element.hasAttribute('data-line')) {\n lineNumber = parseInt(element.dataset.line ?? '', 10);\n lineIndex = parseInt(element.dataset.lineIndex ?? '', 10);\n if (element.dataset.lineType === 'change-deletion') {\n eventSide = 'deletions';\n } else if (element.dataset.lineType === 'change-additions') {\n eventSide = 'additions';\n }\n // if we can't pull out an index or line number, we can't do anything.\n if (Number.isNaN(lineIndex) || Number.isNaN(lineNumber)) {\n lineIndex = undefined;\n lineNumber = undefined;\n break;\n }\n // If we already have an eventSide, we done computin\n if (eventSide != null) {\n break;\n } else {\n // context type lines will need to be discovered higher up\n // at the data-code level\n }\n continue;\n }\n if (element.hasAttribute('data-code')) {\n eventSide ??= element.hasAttribute('data-deletions')\n ? 'deletions'\n : // context in unified style are assumed to be additions based on\n // their line numbers\n 'additions';\n // If we got to the code element, we def done, son\n break;\n }\n }\n if (\n (eventType === 'click' && !isNumberColumn) ||\n lineIndex == null ||\n lineNumber == null\n ) {\n return undefined;\n }\n return {\n lineIndex,\n lineNumber,\n // Normally this shouldn't hit unless we broke early for whatever reason,\n // but for types lets ensure it's additions if undefined\n eventSide: eventSide ?? 'additions',\n };\n }\n\n private getLineIndex(element: HTMLElement): number | undefined {\n const lineIndex = parseInt(element.dataset.lineIndex ?? '', 10);\n return !Number.isNaN(lineIndex) ? lineIndex : undefined;\n }\n\n private getLineSideFromElement(element: HTMLElement): SelectionSide {\n if (element.dataset.lineType === 'change-deletion') {\n return 'deletions';\n }\n if (element.dataset.lineType === 'change-addition') {\n return 'additions';\n }\n const parent = element.closest('[data-code]');\n if (!(parent instanceof HTMLElement)) {\n return 'additions';\n }\n return parent.hasAttribute('data-deletions') ? 'deletions' : 'additions';\n }\n}\n\nexport function pluckLineSelectionOptions({\n enableLineSelection,\n onLineSelected,\n onLineSelectionStart,\n onLineSelectionEnd,\n}: LineSelectionOptions): LineSelectionOptions {\n return {\n enableLineSelection,\n onLineSelected,\n onLineSelectionStart,\n onLineSelectionEnd,\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { AnnotationSide, DiffLineEventBaseProps, ExpansionDirections, LineEventBaseProps } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/managers/MouseEventManager.d.ts
|
|
4
|
+
type LogTypes = "click" | "move" | "both" | "none";
|
|
5
|
+
type MouseEventManagerMode = "file" | "diff";
|
|
6
|
+
interface OnLineClickProps extends LineEventBaseProps {
|
|
7
|
+
event: PointerEvent;
|
|
8
|
+
}
|
|
9
|
+
interface OnLineEnterLeaveProps extends LineEventBaseProps {
|
|
10
|
+
event: MouseEvent;
|
|
11
|
+
}
|
|
12
|
+
interface OnDiffLineClickProps extends DiffLineEventBaseProps {
|
|
13
|
+
event: PointerEvent;
|
|
14
|
+
}
|
|
15
|
+
interface OnDiffLineEnterLeaveProps extends DiffLineEventBaseProps {
|
|
16
|
+
event: MouseEvent;
|
|
17
|
+
}
|
|
18
|
+
type EventClickProps<TMode extends MouseEventManagerMode> = TMode extends "file" ? OnLineClickProps : OnDiffLineClickProps;
|
|
19
|
+
type MouseEventEnterLeaveProps<TMode extends MouseEventManagerMode> = TMode extends "file" ? OnLineEnterLeaveProps : OnDiffLineEnterLeaveProps;
|
|
20
|
+
type GetHoveredLineResult<TMode extends MouseEventManagerMode> = TMode extends "file" ? {
|
|
21
|
+
lineNumber: number;
|
|
22
|
+
} : {
|
|
23
|
+
lineNumber: number;
|
|
24
|
+
side: AnnotationSide;
|
|
25
|
+
};
|
|
26
|
+
interface MouseEventManagerBaseOptions<TMode extends MouseEventManagerMode> {
|
|
27
|
+
enableHoverUtility?: boolean;
|
|
28
|
+
onLineClick?(props: EventClickProps<TMode>): unknown;
|
|
29
|
+
onLineNumberClick?(props: EventClickProps<TMode>): unknown;
|
|
30
|
+
onLineEnter?(props: MouseEventEnterLeaveProps<TMode>): unknown;
|
|
31
|
+
onLineLeave?(props: MouseEventEnterLeaveProps<TMode>): unknown;
|
|
32
|
+
__debugMouseEvents?: LogTypes;
|
|
33
|
+
}
|
|
34
|
+
interface MouseEventManagerOptions<TMode extends MouseEventManagerMode> extends MouseEventManagerBaseOptions<TMode> {
|
|
35
|
+
onHunkExpand?(hunkIndex: number, direction: ExpansionDirections): unknown;
|
|
36
|
+
}
|
|
37
|
+
declare class MouseEventManager<TMode extends MouseEventManagerMode> {
|
|
38
|
+
private mode;
|
|
39
|
+
private options;
|
|
40
|
+
private hoveredLine;
|
|
41
|
+
private pre;
|
|
42
|
+
private hoverSlot;
|
|
43
|
+
constructor(mode: TMode, options: MouseEventManagerOptions<TMode>);
|
|
44
|
+
setOptions(options: MouseEventManagerOptions<TMode>): void;
|
|
45
|
+
cleanUp(): void;
|
|
46
|
+
setup(pre: HTMLPreElement): void;
|
|
47
|
+
getHoveredLine: () => GetHoveredLineResult<TMode> | undefined;
|
|
48
|
+
handleMouseClick: (event: MouseEvent) => void;
|
|
49
|
+
handleMouseMove: (event: MouseEvent) => void;
|
|
50
|
+
handleMouseLeave: (event: MouseEvent) => void;
|
|
51
|
+
private handleMouseEvent;
|
|
52
|
+
private getLineData;
|
|
53
|
+
}
|
|
54
|
+
declare function pluckMouseEventOptions<TMode extends MouseEventManagerMode>({
|
|
55
|
+
onLineClick,
|
|
56
|
+
onLineNumberClick,
|
|
57
|
+
onLineEnter,
|
|
58
|
+
onLineLeave,
|
|
59
|
+
enableHoverUtility,
|
|
60
|
+
__debugMouseEvents
|
|
61
|
+
}: MouseEventManagerBaseOptions<TMode>, onHunkExpand?: (hunkIndex: number, direction: ExpansionDirections) => unknown): MouseEventManagerOptions<TMode>;
|
|
62
|
+
//#endregion
|
|
63
|
+
export { GetHoveredLineResult, LogTypes, MouseEventManager, MouseEventManagerBaseOptions, MouseEventManagerMode, MouseEventManagerOptions, OnDiffLineClickProps, OnDiffLineEnterLeaveProps, OnLineClickProps, OnLineEnterLeaveProps, pluckMouseEventOptions };
|
|
64
|
+
//# sourceMappingURL=MouseEventManager.d.ts.map
|