@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MouseEventManager.d.ts","names":["mode: TMode","options: MouseEventManagerOptions<TMode>"],"sources":["../../src/managers/MouseEventManager.ts"],"sourcesContent":[],"mappings":";;;KAOY,QAAA;KAEA,qBAAA;AAFA,UAIK,gBAAA,SAAyB,kBAJ9B,CAAA;EAEZ,KAAY,EAGH,YAHG;AAEZ;AAIiB,UAAA,qBAAA,SAA8B,kBAAA,CAAA;EAI/C,KAAiB,EAHR,UAGQ;AAIjB;AAQK,UAZY,oBAAA,SAA6B,sBAYzC,CAAA;EAA8B,KAAA,EAX1B,YAW0B;;AAC/B,UATa,yBAAA,SAAkC,sBAS/C,CAAA;EACA,KAAA,EATK,UASL;;AAAA,KAFC,eAIA,CAAA,cAJ8B,qBAI9B,CAAA,GAJuD,KAIvD,SAAA,MAAA,GAHD,gBAGC,GAFD,oBAEC;KAAA,yBAAwC,CAAA,cAAA,qBAAA,CAAA,GAC3C,KAD2C,SAAA,MAAA,GACpB,qBADoB,GACI,yBADJ;AAC3C,KAYU,oBAZV,CAAA,cAY6C,qBAZ7C,CAAA,GAaA,KAbA,SAAA,MAAA,GAAA;EAAuB,UAAA,EAAA,MAAA;CAAwB,GAAA;EAAA,UAAA,EAAA,MAAA;EAYjD,IAAY,EAGsB,cAHtB;CAAmC;AAC7C,UAmCe,4BAnCf,CAAA,cAoCc,qBApCd,CAAA,CAAA;EAEgC,kBAAA,CAAA,EAAA,OAAA;EAAA,WAAA,EAAA,KAAA,EAqCZ,eArCY,CAqCI,KArCJ,CAAA,CAAA,EAAA,OAAA;EAiClC,iBAAiB,EAAA,KAAA,EAKW,eALX,CAK2B,KAL3B,CAAA,CAAA,EAAA,OAAA;EACD,WAAA,EAAA,KAAA,EAKM,yBALN,CAKgC,KALhC,CAAA,CAAA,EAAA,OAAA;EAGsB,WAAA,EAAA,KAAA,EAGhB,yBAHgB,CAGU,KAHV,CAAA,CAAA,EAAA,OAAA;EAAhB,kBAAA,CAAA,EAIC,QAJD;;AACM,UAMX,wBANW,CAAA,cAM4B,qBAN5B,CAAA,SAOlB,4BAPkB,CAOW,KAPX,CAAA,CAAA;EACoB,YAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAOF,mBAPE,CAAA,EAAA,OAAA;;AACA,cASnC,iBATmC,CAAA,cASH,qBATG,CAAA,CAAA;EAA1B,QAAA,IAAA;EACC,QAAA,OAAA;EAAA,QAAA,WAAA;EAGvB,QAAiB,GAAA;EAAuC,QAAA,SAAA;EACjB,WAAA,CAAA,IAAA,EAUrB,KAVqB,EAAA,OAAA,EAWlB,wBAXkB,CAWO,KAXP,CAAA;EACO,UAAA,CAAA,OAAA,EAaxB,wBAbwB,CAaC,KAbD,CAAA,CAAA,EAAA,IAAA;EADpC,OAAA,CAAA,CAAA,EAAA,IAAA;EAAA,KAAA,CAAA,GAAA,EA2BG,cA3BH,CAAA,EAAA,IAAA;EAIV,cAAa,EAAA,GAAA,GAgGU,oBAhGV,CAgG+B,KAhG/B,CAAA,GAAA,SAAA;EAAgC,gBAAA,EAAA,CAAA,KAAA,EAiHhB,UAjHgB,EAAA,GAAA,IAAA;EAM3B,eAAA,EAAA,CAAA,KAAA,EAqHU,UArHV,EAAA,GAAA,IAAA;EAC4B,gBAAA,EAAA,CAAA,KAAA,EA8HjB,UA9HiB,EAAA,GAAA,IAAA;EAAzB,QAAA,gBAAA;EAG0B,QAAA,WAAA;;AAalC,iBAsWG,sBAtWH,CAAA,cAsWwC,qBAtWxC,CAAA,CAAA;EAAA,WAAA;EAAA,iBAAA;EAAA,WAAA;EAAA,WAAA;EAAA,kBAAA;EAAA;AAAA,CAAA,EA8WR,4BA9WQ,CA8WqB,KA9WrB,CAAA,EAAA,YAAA,CAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EA+WmC,mBA/WnC,EAAA,GAAA,OAAA,CAAA,EAgXV,wBAhXU,CAgXe,KAhXf,CAAA"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
//#region src/managers/MouseEventManager.ts
|
|
2
|
+
function isLineEventData(data, mode) {
|
|
3
|
+
if (data == null) return false;
|
|
4
|
+
if (mode === "file") return data.type === "line";
|
|
5
|
+
else return data.type === "diff-line";
|
|
6
|
+
}
|
|
7
|
+
function isExpandoEventData(data) {
|
|
8
|
+
return data?.type === "line-info";
|
|
9
|
+
}
|
|
10
|
+
var MouseEventManager = class {
|
|
11
|
+
hoveredLine;
|
|
12
|
+
pre;
|
|
13
|
+
hoverSlot;
|
|
14
|
+
constructor(mode, options) {
|
|
15
|
+
this.mode = mode;
|
|
16
|
+
this.options = options;
|
|
17
|
+
}
|
|
18
|
+
setOptions(options) {
|
|
19
|
+
this.options = options;
|
|
20
|
+
}
|
|
21
|
+
cleanUp() {
|
|
22
|
+
this.pre?.removeEventListener("click", this.handleMouseClick);
|
|
23
|
+
this.pre?.removeEventListener("mousemove", this.handleMouseMove);
|
|
24
|
+
this.pre?.removeEventListener("mouseout", this.handleMouseLeave);
|
|
25
|
+
delete this.pre?.dataset.interactiveLines;
|
|
26
|
+
delete this.pre?.dataset.interactiveLineNumbers;
|
|
27
|
+
this.pre = void 0;
|
|
28
|
+
}
|
|
29
|
+
setup(pre) {
|
|
30
|
+
const { __debugMouseEvents, onLineClick, onLineNumberClick, onLineEnter, onLineLeave, onHunkExpand, enableHoverUtility = false } = this.options;
|
|
31
|
+
this.cleanUp();
|
|
32
|
+
this.pre = pre;
|
|
33
|
+
if (enableHoverUtility && this.hoverSlot == null) {
|
|
34
|
+
this.hoverSlot = document.createElement("div");
|
|
35
|
+
this.hoverSlot.dataset.hoverSlot = "";
|
|
36
|
+
const slotElement = document.createElement("slot");
|
|
37
|
+
slotElement.name = "hover-slot";
|
|
38
|
+
this.hoverSlot.appendChild(slotElement);
|
|
39
|
+
} else if (!enableHoverUtility && this.hoverSlot != null) {
|
|
40
|
+
this.hoverSlot.parentNode?.removeChild(this.hoverSlot);
|
|
41
|
+
this.hoverSlot = void 0;
|
|
42
|
+
}
|
|
43
|
+
if (onLineClick != null || onLineNumberClick != null || onHunkExpand != null) {
|
|
44
|
+
pre.addEventListener("click", this.handleMouseClick);
|
|
45
|
+
if (onLineClick != null) pre.dataset.interactiveLines = "";
|
|
46
|
+
else if (onLineNumberClick != null) pre.dataset.interactiveLineNumbers = "";
|
|
47
|
+
debugLogIfEnabled(__debugMouseEvents, "click", "FileDiff.DEBUG.attachEventListeners: Attaching click events for:", (() => {
|
|
48
|
+
const reasons = [];
|
|
49
|
+
if (__debugMouseEvents === "both" || __debugMouseEvents === "click") {
|
|
50
|
+
if (onLineClick != null) reasons.push("onLineClick");
|
|
51
|
+
if (onLineNumberClick != null) reasons.push("onLineNumberClick");
|
|
52
|
+
if (onHunkExpand != null) reasons.push("expandable hunk separators");
|
|
53
|
+
}
|
|
54
|
+
return reasons;
|
|
55
|
+
})());
|
|
56
|
+
}
|
|
57
|
+
if (onLineEnter != null || onLineLeave != null || enableHoverUtility) {
|
|
58
|
+
pre.addEventListener("mousemove", this.handleMouseMove);
|
|
59
|
+
debugLogIfEnabled(__debugMouseEvents, "move", "FileDiff.DEBUG.attachEventListeners: Attaching mouse move event");
|
|
60
|
+
pre.addEventListener("mouseleave", this.handleMouseLeave);
|
|
61
|
+
debugLogIfEnabled(__debugMouseEvents, "move", "FileDiff.DEBUG.attachEventListeners: Attaching mouse leave event");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
getHoveredLine = () => {
|
|
65
|
+
if (this.hoveredLine != null) {
|
|
66
|
+
if (this.mode === "diff" && this.hoveredLine.type === "diff-line") return {
|
|
67
|
+
lineNumber: this.hoveredLine.lineNumber,
|
|
68
|
+
side: this.hoveredLine.annotationSide
|
|
69
|
+
};
|
|
70
|
+
if (this.mode === "file" && this.hoveredLine.type === "line") return { lineNumber: this.hoveredLine.lineNumber };
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
handleMouseClick = (event) => {
|
|
74
|
+
debugLogIfEnabled(this.options.__debugMouseEvents, "click", "FileDiff.DEBUG.handleMouseClick:", event);
|
|
75
|
+
this.handleMouseEvent({
|
|
76
|
+
eventType: "click",
|
|
77
|
+
event
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
handleMouseMove = (event) => {
|
|
81
|
+
debugLogIfEnabled(this.options.__debugMouseEvents, "move", "FileDiff.DEBUG.handleMouseMove:", event);
|
|
82
|
+
this.handleMouseEvent({
|
|
83
|
+
eventType: "move",
|
|
84
|
+
event
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
handleMouseLeave = (event) => {
|
|
88
|
+
const { __debugMouseEvents } = this.options;
|
|
89
|
+
debugLogIfEnabled(__debugMouseEvents, "move", "FileDiff.DEBUG.handleMouseLeave: no event");
|
|
90
|
+
if (this.hoveredLine == null) {
|
|
91
|
+
debugLogIfEnabled(__debugMouseEvents, "move", "FileDiff.DEBUG.handleMouseLeave: returned early, no .hoveredLine");
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
this.hoverSlot?.parentElement?.removeChild(this.hoverSlot);
|
|
95
|
+
this.options.onLineLeave?.({
|
|
96
|
+
...this.hoveredLine,
|
|
97
|
+
event
|
|
98
|
+
});
|
|
99
|
+
this.hoveredLine = void 0;
|
|
100
|
+
};
|
|
101
|
+
handleMouseEvent({ eventType, event }) {
|
|
102
|
+
const { __debugMouseEvents } = this.options;
|
|
103
|
+
const composedPath = event.composedPath();
|
|
104
|
+
debugLogIfEnabled(__debugMouseEvents, eventType, "FileDiff.DEBUG.handleMouseEvent:", {
|
|
105
|
+
eventType,
|
|
106
|
+
composedPath
|
|
107
|
+
});
|
|
108
|
+
const data = this.getLineData(composedPath);
|
|
109
|
+
debugLogIfEnabled(__debugMouseEvents, eventType, "FileDiff.DEBUG.handleMouseEvent: getLineData result:", data);
|
|
110
|
+
const { onLineClick, onLineNumberClick, onLineEnter, onLineLeave, onHunkExpand } = this.options;
|
|
111
|
+
switch (eventType) {
|
|
112
|
+
case "move":
|
|
113
|
+
if (isLineEventData(data, this.mode) && this.hoveredLine?.lineElement === data.lineElement) {
|
|
114
|
+
debugLogIfEnabled(__debugMouseEvents, "move", "FileDiff.DEBUG.handleMouseEvent: switch, 'move', returned early because same line");
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
if (this.hoveredLine != null) {
|
|
118
|
+
debugLogIfEnabled(__debugMouseEvents, "move", "FileDiff.DEBUG.handleMouseEvent: switch, 'move', clearing an existing hovered line and firing onLineLeave");
|
|
119
|
+
this.hoverSlot?.parentElement?.removeChild(this.hoverSlot);
|
|
120
|
+
onLineLeave?.({
|
|
121
|
+
...this.hoveredLine,
|
|
122
|
+
event
|
|
123
|
+
});
|
|
124
|
+
this.hoveredLine = void 0;
|
|
125
|
+
}
|
|
126
|
+
if (isLineEventData(data, this.mode)) {
|
|
127
|
+
debugLogIfEnabled(__debugMouseEvents, "move", "FileDiff.DEBUG.handleMouseEvent: switch, 'move', setting up a new hoveredLine and firing onLineEnter");
|
|
128
|
+
this.hoveredLine = data;
|
|
129
|
+
if (this.hoverSlot != null) data.numberElement?.appendChild(this.hoverSlot);
|
|
130
|
+
onLineEnter?.({
|
|
131
|
+
...this.hoveredLine,
|
|
132
|
+
event
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
break;
|
|
136
|
+
case "click":
|
|
137
|
+
debugLogIfEnabled(__debugMouseEvents, "click", "FileDiff.DEBUG.handleMouseEvent: switch, 'click', with data:", data);
|
|
138
|
+
if (data == null) break;
|
|
139
|
+
if (isExpandoEventData(data) && onHunkExpand != null) {
|
|
140
|
+
debugLogIfEnabled(__debugMouseEvents, "click", "FileDiff.DEBUG.handleMouseEvent: switch, 'click', expanding a hunk");
|
|
141
|
+
onHunkExpand(data.hunkIndex, data.direction);
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
if (isLineEventData(data, this.mode)) if (onLineNumberClick != null && data.numberColumn) {
|
|
145
|
+
debugLogIfEnabled(__debugMouseEvents, "click", "FileDiff.DEBUG.handleMouseEvent: switch, 'click', firing 'onLineNumberClick'");
|
|
146
|
+
onLineNumberClick({
|
|
147
|
+
...data,
|
|
148
|
+
event
|
|
149
|
+
});
|
|
150
|
+
} else if (onLineClick != null) {
|
|
151
|
+
debugLogIfEnabled(__debugMouseEvents, "click", "FileDiff.DEBUG.handleMouseEvent: switch, 'click', firing 'onLineClick'");
|
|
152
|
+
onLineClick({
|
|
153
|
+
...data,
|
|
154
|
+
event
|
|
155
|
+
});
|
|
156
|
+
} else debugLogIfEnabled(__debugMouseEvents, "click", "FileDiff.DEBUG.handleMouseEvent: switch, 'click', fell through, no event to fire");
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
getLineData(path) {
|
|
161
|
+
let numberColumn = false;
|
|
162
|
+
const lineElement = path.find((element) => {
|
|
163
|
+
if (!(element instanceof HTMLElement)) return false;
|
|
164
|
+
numberColumn = numberColumn || "columnNumber" in element.dataset;
|
|
165
|
+
return "line" in element.dataset || "expandIndex" in element.dataset;
|
|
166
|
+
});
|
|
167
|
+
if (!(lineElement instanceof HTMLElement)) return void 0;
|
|
168
|
+
if (lineElement.dataset.expandIndex != null) {
|
|
169
|
+
const hunkIndex = parseInt(lineElement.dataset.expandIndex);
|
|
170
|
+
if (isNaN(hunkIndex)) return;
|
|
171
|
+
let direction;
|
|
172
|
+
for (const element of path) {
|
|
173
|
+
if (element === lineElement) break;
|
|
174
|
+
if (element instanceof HTMLElement) {
|
|
175
|
+
direction = direction ?? ("expandUp" in element.dataset ? "up" : void 0) ?? ("expandDown" in element.dataset ? "down" : void 0) ?? ("expandBoth" in element.dataset ? "both" : void 0);
|
|
176
|
+
if (direction != null) break;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return direction != null ? {
|
|
180
|
+
type: "line-info",
|
|
181
|
+
hunkIndex,
|
|
182
|
+
direction
|
|
183
|
+
} : void 0;
|
|
184
|
+
}
|
|
185
|
+
const lineNumber = parseInt(lineElement.dataset.line ?? "");
|
|
186
|
+
if (isNaN(lineNumber)) return;
|
|
187
|
+
const lineType = lineElement.dataset.lineType;
|
|
188
|
+
if (lineType !== "context" && lineType !== "context-expanded" && lineType !== "change-deletion" && lineType !== "change-addition") return;
|
|
189
|
+
const numberElement = (() => {
|
|
190
|
+
const numberElement$1 = lineElement.children[0];
|
|
191
|
+
return numberElement$1 instanceof HTMLElement && numberElement$1.dataset.columnNumber != null ? numberElement$1 : void 0;
|
|
192
|
+
})();
|
|
193
|
+
if (this.mode === "file") return {
|
|
194
|
+
type: "line",
|
|
195
|
+
lineElement,
|
|
196
|
+
lineNumber,
|
|
197
|
+
numberElement,
|
|
198
|
+
numberColumn
|
|
199
|
+
};
|
|
200
|
+
return {
|
|
201
|
+
type: "diff-line",
|
|
202
|
+
annotationSide: (() => {
|
|
203
|
+
if (lineType === "change-deletion") return "deletions";
|
|
204
|
+
if (lineType === "change-addition") return "additions";
|
|
205
|
+
const parent = lineElement.closest("[data-code]");
|
|
206
|
+
if (!(parent instanceof HTMLElement)) return "additions";
|
|
207
|
+
return "deletions" in parent.dataset ? "deletions" : "additions";
|
|
208
|
+
})(),
|
|
209
|
+
lineType,
|
|
210
|
+
lineElement,
|
|
211
|
+
numberElement,
|
|
212
|
+
lineNumber,
|
|
213
|
+
numberColumn
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
function debugLogIfEnabled(debugLogType = "none", logIfType, ...args) {
|
|
218
|
+
switch (debugLogType) {
|
|
219
|
+
case "none": return;
|
|
220
|
+
case "both": break;
|
|
221
|
+
case "click":
|
|
222
|
+
if (logIfType !== "click") return;
|
|
223
|
+
break;
|
|
224
|
+
case "move":
|
|
225
|
+
if (logIfType !== "move") return;
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
console.log(...args);
|
|
229
|
+
}
|
|
230
|
+
function pluckMouseEventOptions({ onLineClick, onLineNumberClick, onLineEnter, onLineLeave, enableHoverUtility, __debugMouseEvents }, onHunkExpand) {
|
|
231
|
+
return {
|
|
232
|
+
onLineClick,
|
|
233
|
+
onLineNumberClick,
|
|
234
|
+
onLineEnter,
|
|
235
|
+
onLineLeave,
|
|
236
|
+
enableHoverUtility,
|
|
237
|
+
__debugMouseEvents,
|
|
238
|
+
onHunkExpand
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
//#endregion
|
|
243
|
+
export { MouseEventManager, pluckMouseEventOptions };
|
|
244
|
+
//# sourceMappingURL=MouseEventManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MouseEventManager.js","names":["mode: TMode","options: MouseEventManagerOptions<TMode>","reasons: string[]","direction: ExpansionDirections | undefined","numberElement"],"sources":["../../src/managers/MouseEventManager.ts"],"sourcesContent":["import type {\n AnnotationSide,\n DiffLineEventBaseProps,\n ExpansionDirections,\n LineEventBaseProps,\n} from '../types';\n\nexport type LogTypes = 'click' | 'move' | 'both' | 'none';\n\nexport type MouseEventManagerMode = 'file' | 'diff';\n\nexport interface OnLineClickProps extends LineEventBaseProps {\n event: PointerEvent;\n}\n\nexport interface OnLineEnterLeaveProps extends LineEventBaseProps {\n event: MouseEvent;\n}\n\nexport interface OnDiffLineClickProps extends DiffLineEventBaseProps {\n event: PointerEvent;\n}\n\nexport interface OnDiffLineEnterLeaveProps extends DiffLineEventBaseProps {\n event: MouseEvent;\n}\n\ntype HandleMouseEventProps =\n | { eventType: 'click'; event: MouseEvent }\n | { eventType: 'move'; event: MouseEvent };\n\ntype EventClickProps<TMode extends MouseEventManagerMode> = TMode extends 'file'\n ? OnLineClickProps\n : OnDiffLineClickProps;\n\ntype MouseEventEnterLeaveProps<TMode extends MouseEventManagerMode> =\n TMode extends 'file' ? OnLineEnterLeaveProps : OnDiffLineEnterLeaveProps;\n\ntype EventBaseProps<TMode extends MouseEventManagerMode> = TMode extends 'file'\n ? LineEventBaseProps\n : DiffLineEventBaseProps;\n\ninterface ExpandoEventProps {\n type: 'line-info';\n hunkIndex: number;\n direction: ExpansionDirections;\n}\n\nexport type GetHoveredLineResult<TMode extends MouseEventManagerMode> =\n TMode extends 'file'\n ? { lineNumber: number }\n : { lineNumber: number; side: AnnotationSide };\n\ntype GetLineDataResult<TMode extends MouseEventManagerMode> =\n TMode extends 'file'\n ? LineEventBaseProps | ExpandoEventProps | undefined\n : DiffLineEventBaseProps | ExpandoEventProps | undefined;\n\ntype LineEventData<TMode extends MouseEventManagerMode> = TMode extends 'file'\n ? LineEventBaseProps\n : DiffLineEventBaseProps;\n\nfunction isLineEventData<TMode extends MouseEventManagerMode>(\n data: GetLineDataResult<TMode>,\n mode: TMode\n): data is LineEventData<TMode> {\n if (data == null) return false;\n if (mode === 'file') {\n return data.type === 'line';\n } else {\n return data.type === 'diff-line';\n }\n}\n\nfunction isExpandoEventData(\n data:\n | LineEventBaseProps\n | DiffLineEventBaseProps\n | ExpandoEventProps\n | undefined\n): data is ExpandoEventProps {\n return data?.type === 'line-info';\n}\n\nexport interface MouseEventManagerBaseOptions<\n TMode extends MouseEventManagerMode,\n> {\n enableHoverUtility?: boolean;\n onLineClick?(props: EventClickProps<TMode>): unknown;\n onLineNumberClick?(props: EventClickProps<TMode>): unknown;\n onLineEnter?(props: MouseEventEnterLeaveProps<TMode>): unknown;\n onLineLeave?(props: MouseEventEnterLeaveProps<TMode>): unknown;\n __debugMouseEvents?: LogTypes;\n}\n\nexport interface MouseEventManagerOptions<TMode extends MouseEventManagerMode>\n extends MouseEventManagerBaseOptions<TMode> {\n onHunkExpand?(hunkIndex: number, direction: ExpansionDirections): unknown;\n}\n\nexport class MouseEventManager<TMode extends MouseEventManagerMode> {\n private hoveredLine: EventBaseProps<TMode> | undefined;\n private pre: HTMLPreElement | undefined;\n private hoverSlot: HTMLDivElement | undefined;\n\n constructor(\n private mode: TMode,\n private options: MouseEventManagerOptions<TMode>\n ) {}\n\n setOptions(options: MouseEventManagerOptions<TMode>): void {\n this.options = options;\n }\n\n cleanUp(): void {\n this.pre?.removeEventListener('click', this.handleMouseClick);\n this.pre?.removeEventListener('mousemove', this.handleMouseMove);\n this.pre?.removeEventListener('mouseout', this.handleMouseLeave);\n delete this.pre?.dataset.interactiveLines;\n delete this.pre?.dataset.interactiveLineNumbers;\n this.pre = undefined;\n }\n\n setup(pre: HTMLPreElement): void {\n const {\n __debugMouseEvents,\n onLineClick,\n onLineNumberClick,\n onLineEnter,\n onLineLeave,\n onHunkExpand,\n enableHoverUtility = false,\n } = this.options;\n\n this.cleanUp();\n this.pre = pre;\n\n if (enableHoverUtility && this.hoverSlot == null) {\n this.hoverSlot = document.createElement('div');\n this.hoverSlot.dataset.hoverSlot = '';\n const slotElement = document.createElement('slot');\n slotElement.name = 'hover-slot';\n this.hoverSlot.appendChild(slotElement);\n } else if (!enableHoverUtility && this.hoverSlot != null) {\n this.hoverSlot.parentNode?.removeChild(this.hoverSlot);\n this.hoverSlot = undefined;\n }\n\n if (\n onLineClick != null ||\n onLineNumberClick != null ||\n onHunkExpand != null\n ) {\n pre.addEventListener('click', this.handleMouseClick);\n if (onLineClick != null) {\n pre.dataset.interactiveLines = '';\n } else if (onLineNumberClick != null) {\n pre.dataset.interactiveLineNumbers = '';\n }\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n 'FileDiff.DEBUG.attachEventListeners: Attaching click events for:',\n (() => {\n const reasons: string[] = [];\n if (__debugMouseEvents === 'both' || __debugMouseEvents === 'click') {\n if (onLineClick != null) {\n reasons.push('onLineClick');\n }\n if (onLineNumberClick != null) {\n reasons.push('onLineNumberClick');\n }\n if (onHunkExpand != null) {\n reasons.push('expandable hunk separators');\n }\n }\n return reasons;\n })()\n );\n }\n if (onLineEnter != null || onLineLeave != null || enableHoverUtility) {\n pre.addEventListener('mousemove', this.handleMouseMove);\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.attachEventListeners: Attaching mouse move event'\n );\n pre.addEventListener('mouseleave', this.handleMouseLeave);\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.attachEventListeners: Attaching mouse leave event'\n );\n }\n }\n\n getHoveredLine = (): GetHoveredLineResult<TMode> | undefined => {\n if (this.hoveredLine != null) {\n if (this.mode === 'diff' && this.hoveredLine.type === 'diff-line') {\n return {\n lineNumber: this.hoveredLine.lineNumber,\n side: this.hoveredLine.annotationSide,\n } as GetHoveredLineResult<TMode>;\n }\n if (this.mode === 'file' && this.hoveredLine.type === 'line') {\n return {\n lineNumber: this.hoveredLine.lineNumber,\n } as GetHoveredLineResult<TMode>;\n }\n }\n return undefined;\n };\n\n handleMouseClick = (event: MouseEvent): void => {\n debugLogIfEnabled(\n this.options.__debugMouseEvents,\n 'click',\n 'FileDiff.DEBUG.handleMouseClick:',\n event\n );\n this.handleMouseEvent({ eventType: 'click', event });\n };\n\n handleMouseMove = (event: MouseEvent): void => {\n debugLogIfEnabled(\n this.options.__debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.handleMouseMove:',\n event\n );\n this.handleMouseEvent({ eventType: 'move', event });\n };\n\n handleMouseLeave = (event: MouseEvent): void => {\n const { __debugMouseEvents } = this.options;\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.handleMouseLeave: no event'\n );\n if (this.hoveredLine == null) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.handleMouseLeave: returned early, no .hoveredLine'\n );\n return;\n }\n this.hoverSlot?.parentElement?.removeChild(this.hoverSlot);\n this.options.onLineLeave?.({\n ...this.hoveredLine,\n event,\n } as MouseEventEnterLeaveProps<TMode>);\n this.hoveredLine = undefined;\n };\n\n private handleMouseEvent({ eventType, event }: HandleMouseEventProps) {\n const { __debugMouseEvents } = this.options;\n const composedPath = event.composedPath();\n debugLogIfEnabled(\n __debugMouseEvents,\n eventType,\n 'FileDiff.DEBUG.handleMouseEvent:',\n { eventType, composedPath }\n );\n const data = this.getLineData(composedPath);\n debugLogIfEnabled(\n __debugMouseEvents,\n eventType,\n 'FileDiff.DEBUG.handleMouseEvent: getLineData result:',\n data\n );\n const {\n onLineClick,\n onLineNumberClick,\n onLineEnter,\n onLineLeave,\n onHunkExpand,\n } = this.options;\n switch (eventType) {\n case 'move': {\n if (\n isLineEventData(data, this.mode) &&\n this.hoveredLine?.lineElement === data.lineElement\n ) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'move', returned early because same line\"\n );\n break;\n }\n if (this.hoveredLine != null) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'move', clearing an existing hovered line and firing onLineLeave\"\n );\n this.hoverSlot?.parentElement?.removeChild(this.hoverSlot);\n onLineLeave?.({\n ...this.hoveredLine,\n event,\n } as MouseEventEnterLeaveProps<TMode>);\n this.hoveredLine = undefined;\n }\n if (isLineEventData(data, this.mode)) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'move', setting up a new hoveredLine and firing onLineEnter\"\n );\n this.hoveredLine = data;\n if (this.hoverSlot != null) {\n data.numberElement?.appendChild(this.hoverSlot);\n }\n onLineEnter?.({\n ...this.hoveredLine,\n event,\n } as MouseEventEnterLeaveProps<TMode>);\n }\n break;\n }\n case 'click':\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', with data:\",\n data\n );\n if (data == null) break;\n if (isExpandoEventData(data) && onHunkExpand != null) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', expanding a hunk\"\n );\n onHunkExpand(data.hunkIndex, data.direction);\n break;\n }\n if (isLineEventData(data, this.mode)) {\n if (onLineNumberClick != null && data.numberColumn) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', firing 'onLineNumberClick'\"\n );\n onLineNumberClick({ ...data, event } as EventClickProps<TMode>);\n } else if (onLineClick != null) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', firing 'onLineClick'\"\n );\n onLineClick({ ...data, event } as EventClickProps<TMode>);\n } else {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', fell through, no event to fire\"\n );\n }\n }\n break;\n }\n }\n\n private getLineData(\n path: (EventTarget | undefined)[]\n ): GetLineDataResult<TMode> {\n let numberColumn = false;\n const lineElement = path.find((element) => {\n if (!(element instanceof HTMLElement)) {\n return false;\n }\n numberColumn = numberColumn || 'columnNumber' in element.dataset;\n return 'line' in element.dataset || 'expandIndex' in element.dataset;\n });\n if (!(lineElement instanceof HTMLElement)) return undefined;\n if (lineElement.dataset.expandIndex != null) {\n const hunkIndex = parseInt(lineElement.dataset.expandIndex);\n if (isNaN(hunkIndex)) {\n return undefined;\n }\n let direction: ExpansionDirections | undefined;\n for (const element of path) {\n if (element === lineElement) break;\n if (element instanceof HTMLElement) {\n direction =\n direction ??\n ('expandUp' in element.dataset ? 'up' : undefined) ??\n ('expandDown' in element.dataset ? 'down' : undefined) ??\n ('expandBoth' in element.dataset ? 'both' : undefined);\n if (direction != null) {\n break;\n }\n }\n }\n return direction != null\n ? { type: 'line-info', hunkIndex, direction }\n : undefined;\n }\n const lineNumber = parseInt(lineElement.dataset.line ?? '');\n if (isNaN(lineNumber)) return;\n const lineType = lineElement.dataset.lineType;\n if (\n lineType !== 'context' &&\n lineType !== 'context-expanded' &&\n lineType !== 'change-deletion' &&\n lineType !== 'change-addition'\n ) {\n return undefined;\n }\n\n const numberElement = (() => {\n const numberElement = lineElement.children[0];\n return numberElement instanceof HTMLElement &&\n numberElement.dataset.columnNumber != null\n ? numberElement\n : undefined;\n })();\n\n if (this.mode === 'file') {\n return {\n type: 'line',\n lineElement,\n lineNumber,\n numberElement,\n numberColumn,\n } as GetLineDataResult<TMode>;\n }\n\n const annotationSide: AnnotationSide = (() => {\n if (lineType === 'change-deletion') {\n return 'deletions';\n }\n if (lineType === 'change-addition') {\n return 'additions';\n }\n const parent = lineElement.closest('[data-code]');\n if (!(parent instanceof HTMLElement)) {\n return 'additions';\n }\n return 'deletions' in parent.dataset ? 'deletions' : 'additions';\n })();\n\n return {\n type: 'diff-line',\n annotationSide,\n lineType,\n lineElement,\n numberElement,\n lineNumber,\n numberColumn,\n } as GetLineDataResult<TMode>;\n }\n}\n\nfunction debugLogIfEnabled(\n debugLogType: LogTypes | undefined = 'none',\n logIfType: 'move' | 'click',\n ...args: unknown[]\n) {\n switch (debugLogType) {\n case 'none':\n return;\n case 'both':\n break;\n case 'click':\n if (logIfType !== 'click') {\n return;\n }\n break;\n case 'move':\n if (logIfType !== 'move') {\n return;\n }\n break;\n }\n console.log(...args);\n}\n\nexport function pluckMouseEventOptions<TMode extends MouseEventManagerMode>(\n {\n onLineClick,\n onLineNumberClick,\n onLineEnter,\n onLineLeave,\n enableHoverUtility,\n __debugMouseEvents,\n }: MouseEventManagerBaseOptions<TMode>,\n onHunkExpand?: (hunkIndex: number, direction: ExpansionDirections) => unknown\n): MouseEventManagerOptions<TMode> {\n return {\n onLineClick,\n onLineNumberClick,\n onLineEnter,\n onLineLeave,\n enableHoverUtility,\n __debugMouseEvents,\n onHunkExpand,\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region src/managers/ResizeManager.d.ts
|
|
2
|
+
declare class ResizeManager {
|
|
3
|
+
private observedNodes;
|
|
4
|
+
cleanUp(): void;
|
|
5
|
+
private resizeObserver;
|
|
6
|
+
setup(pre: HTMLPreElement): void;
|
|
7
|
+
private handleResizeObserver;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { ResizeManager };
|
|
11
|
+
//# sourceMappingURL=ResizeManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResizeManager.d.ts","names":[],"sources":["../../src/managers/ResizeManager.ts"],"sourcesContent":[],"mappings":";cAEa,aAAA;EAAb,QAAa,aAAA;;;aAcA"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
//#region src/managers/ResizeManager.ts
|
|
2
|
+
var ResizeManager = class {
|
|
3
|
+
observedNodes = /* @__PURE__ */ new Map();
|
|
4
|
+
cleanUp() {
|
|
5
|
+
this.resizeObserver?.disconnect();
|
|
6
|
+
this.observedNodes.clear();
|
|
7
|
+
}
|
|
8
|
+
resizeObserver;
|
|
9
|
+
setup(pre) {
|
|
10
|
+
this.cleanUp();
|
|
11
|
+
const annotationElements = pre.querySelectorAll("[data-line-annotation*=\",\"]");
|
|
12
|
+
this.resizeObserver ??= new ResizeObserver(this.handleResizeObserver);
|
|
13
|
+
const codeElements = pre.querySelectorAll("code");
|
|
14
|
+
for (const codeElement of codeElements) {
|
|
15
|
+
let numberElement = codeElement.querySelector("[data-column-number]");
|
|
16
|
+
if (!(numberElement instanceof HTMLElement)) numberElement = null;
|
|
17
|
+
const item = {
|
|
18
|
+
type: "code",
|
|
19
|
+
codeElement,
|
|
20
|
+
numberElement,
|
|
21
|
+
codeWidth: "auto",
|
|
22
|
+
numberWidth: 0
|
|
23
|
+
};
|
|
24
|
+
this.observedNodes.set(codeElement, item);
|
|
25
|
+
this.resizeObserver.observe(codeElement);
|
|
26
|
+
if (numberElement != null) {
|
|
27
|
+
this.observedNodes.set(numberElement, item);
|
|
28
|
+
this.resizeObserver.observe(numberElement);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (codeElements.length <= 1) return;
|
|
32
|
+
const elementMap = /* @__PURE__ */ new Map();
|
|
33
|
+
for (const element of annotationElements) {
|
|
34
|
+
if (!(element instanceof HTMLElement)) continue;
|
|
35
|
+
const { lineAnnotation = "" } = element.dataset;
|
|
36
|
+
if (!/^\d+,\d+$/.test(lineAnnotation)) {
|
|
37
|
+
console.error("DiffFileRenderer.setupResizeObserver: Invalid element or annotation", {
|
|
38
|
+
lineAnnotation,
|
|
39
|
+
element
|
|
40
|
+
});
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
let pairs = elementMap.get(lineAnnotation);
|
|
44
|
+
if (pairs == null) {
|
|
45
|
+
pairs = [];
|
|
46
|
+
elementMap.set(lineAnnotation, pairs);
|
|
47
|
+
}
|
|
48
|
+
pairs.push(element);
|
|
49
|
+
}
|
|
50
|
+
for (const [key, pair] of elementMap) {
|
|
51
|
+
if (pair.length !== 2) {
|
|
52
|
+
console.error("DiffFileRenderer.setupResizeObserver: Bad Pair", key, pair);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const [container1, container2] = pair;
|
|
56
|
+
const child1 = container1.firstElementChild;
|
|
57
|
+
const child2 = container2.firstElementChild;
|
|
58
|
+
if (!(container1 instanceof HTMLElement) || !(container2 instanceof HTMLElement) || !(child1 instanceof HTMLElement) || !(child2 instanceof HTMLElement)) continue;
|
|
59
|
+
const item = {
|
|
60
|
+
type: "annotations",
|
|
61
|
+
column1: {
|
|
62
|
+
container: container1,
|
|
63
|
+
child: child1,
|
|
64
|
+
childHeight: 0
|
|
65
|
+
},
|
|
66
|
+
column2: {
|
|
67
|
+
container: container2,
|
|
68
|
+
child: child2,
|
|
69
|
+
childHeight: 0
|
|
70
|
+
},
|
|
71
|
+
currentHeight: "auto"
|
|
72
|
+
};
|
|
73
|
+
this.observedNodes.set(child1, item);
|
|
74
|
+
this.observedNodes.set(child2, item);
|
|
75
|
+
this.resizeObserver.observe(child1);
|
|
76
|
+
this.resizeObserver.observe(child2);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
handleResizeObserver = (entries) => {
|
|
80
|
+
for (const entry of entries) {
|
|
81
|
+
const { target, borderBoxSize } = entry;
|
|
82
|
+
if (!(target instanceof HTMLElement)) {
|
|
83
|
+
console.error("FileDiff.handleResizeObserver: Invalid element for ResizeObserver", entry);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const item = this.observedNodes.get(target);
|
|
87
|
+
if (item == null) {
|
|
88
|
+
console.error("FileDiff.handleResizeObserver: Not a valid observed node", entry);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const specs = borderBoxSize[0];
|
|
92
|
+
if (item.type === "annotations") {
|
|
93
|
+
const column = (() => {
|
|
94
|
+
if (target === item.column1.child) return item.column1;
|
|
95
|
+
if (target === item.column2.child) return item.column2;
|
|
96
|
+
})();
|
|
97
|
+
if (column == null) {
|
|
98
|
+
console.error(`FileDiff.handleResizeObserver: Couldn't find a column for`, {
|
|
99
|
+
item,
|
|
100
|
+
target
|
|
101
|
+
});
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
column.childHeight = specs.blockSize;
|
|
105
|
+
const newHeight = Math.max(item.column1.childHeight, item.column2.childHeight);
|
|
106
|
+
if (newHeight !== item.currentHeight) {
|
|
107
|
+
item.currentHeight = Math.max(newHeight, 0);
|
|
108
|
+
item.column1.container.style.setProperty("--diffs-annotation-min-height", `${item.currentHeight}px`);
|
|
109
|
+
item.column2.container.style.setProperty("--diffs-annotation-min-height", `${item.currentHeight}px`);
|
|
110
|
+
}
|
|
111
|
+
} else if (item.type === "code") {
|
|
112
|
+
if (target === item.codeElement) {
|
|
113
|
+
if (specs.inlineSize !== item.codeWidth) {
|
|
114
|
+
item.codeWidth = specs.inlineSize;
|
|
115
|
+
item.codeElement.style.setProperty("--diffs-column-content-width", `${Math.max(item.codeWidth - item.numberWidth, 0)}px`);
|
|
116
|
+
item.codeElement.style.setProperty("--diffs-column-width", `${item.codeWidth}px`);
|
|
117
|
+
}
|
|
118
|
+
} else if (target === item.numberElement) {
|
|
119
|
+
if (specs.inlineSize !== item.numberWidth) {
|
|
120
|
+
item.numberWidth = specs.inlineSize;
|
|
121
|
+
item.codeElement.style.setProperty("--diffs-column-number-width", `${item.numberWidth}px`);
|
|
122
|
+
if (item.codeWidth !== "auto") item.codeElement.style.setProperty("--diffs-column-content-width", `${Math.max(item.codeWidth - item.numberWidth, 0)}px`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
//#endregion
|
|
131
|
+
export { ResizeManager };
|
|
132
|
+
//# sourceMappingURL=ResizeManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResizeManager.js","names":["item: ObservedGridNodes","item: ObservedAnnotationNodes"],"sources":["../../src/managers/ResizeManager.ts"],"sourcesContent":["import type { ObservedAnnotationNodes, ObservedGridNodes } from '../types';\n\nexport class ResizeManager {\n private observedNodes = new Map<\n HTMLElement,\n ObservedAnnotationNodes | ObservedGridNodes\n >();\n\n cleanUp(): void {\n // Disconnect any existing observer\n this.resizeObserver?.disconnect();\n this.observedNodes.clear();\n }\n\n private resizeObserver: ResizeObserver | undefined;\n\n setup(pre: HTMLPreElement): void {\n this.cleanUp();\n\n const annotationElements = pre.querySelectorAll(\n '[data-line-annotation*=\",\"]'\n );\n\n this.resizeObserver ??= new ResizeObserver(this.handleResizeObserver);\n const codeElements = pre.querySelectorAll('code');\n\n for (const codeElement of codeElements) {\n let numberElement = codeElement.querySelector('[data-column-number]');\n if (!(numberElement instanceof HTMLElement)) {\n numberElement = null;\n }\n const item: ObservedGridNodes = {\n type: 'code',\n codeElement,\n numberElement,\n codeWidth: 'auto',\n numberWidth: 0,\n };\n this.observedNodes.set(codeElement, item);\n this.resizeObserver.observe(codeElement);\n if (numberElement != null) {\n this.observedNodes.set(numberElement, item);\n this.resizeObserver.observe(numberElement);\n }\n }\n\n if (codeElements.length <= 1) {\n return;\n }\n\n const elementMap = new Map<string, HTMLElement[]>();\n for (const element of annotationElements) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n const { lineAnnotation = '' } = element.dataset;\n if (!/^\\d+,\\d+$/.test(lineAnnotation)) {\n console.error(\n 'DiffFileRenderer.setupResizeObserver: Invalid element or annotation',\n { lineAnnotation, element }\n );\n continue;\n }\n let pairs = elementMap.get(lineAnnotation);\n if (pairs == null) {\n pairs = [];\n elementMap.set(lineAnnotation, pairs);\n }\n pairs.push(element);\n }\n\n for (const [key, pair] of elementMap) {\n if (pair.length !== 2) {\n console.error(\n 'DiffFileRenderer.setupResizeObserver: Bad Pair',\n key,\n pair\n );\n continue;\n }\n const [container1, container2] = pair;\n const child1 = container1.firstElementChild;\n const child2 = container2.firstElementChild;\n if (\n !(container1 instanceof HTMLElement) ||\n !(container2 instanceof HTMLElement) ||\n !(child1 instanceof HTMLElement) ||\n !(child2 instanceof HTMLElement)\n ) {\n continue;\n }\n const item: ObservedAnnotationNodes = {\n type: 'annotations',\n column1: {\n container: container1,\n child: child1,\n childHeight: 0,\n },\n column2: {\n container: container2,\n child: child2,\n childHeight: 0,\n },\n currentHeight: 'auto',\n };\n this.observedNodes.set(child1, item);\n this.observedNodes.set(child2, item);\n this.resizeObserver.observe(child1);\n this.resizeObserver.observe(child2);\n }\n }\n\n private handleResizeObserver = (entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const { target, borderBoxSize } = entry;\n if (!(target instanceof HTMLElement)) {\n console.error(\n 'FileDiff.handleResizeObserver: Invalid element for ResizeObserver',\n entry\n );\n continue;\n }\n const item = this.observedNodes.get(target);\n if (item == null) {\n console.error(\n 'FileDiff.handleResizeObserver: Not a valid observed node',\n entry\n );\n continue;\n }\n const specs = borderBoxSize[0];\n if (item.type === 'annotations') {\n const column = (() => {\n if (target === item.column1.child) {\n return item.column1;\n }\n if (target === item.column2.child) {\n return item.column2;\n }\n return undefined;\n })();\n\n if (column == null) {\n console.error(\n `FileDiff.handleResizeObserver: Couldn't find a column for`,\n { item, target }\n );\n continue;\n }\n\n column.childHeight = specs.blockSize;\n const newHeight = Math.max(\n item.column1.childHeight,\n item.column2.childHeight\n );\n if (newHeight !== item.currentHeight) {\n item.currentHeight = Math.max(newHeight, 0);\n item.column1.container.style.setProperty(\n '--diffs-annotation-min-height',\n `${item.currentHeight}px`\n );\n item.column2.container.style.setProperty(\n '--diffs-annotation-min-height',\n `${item.currentHeight}px`\n );\n }\n } else if (item.type === 'code') {\n if (target === item.codeElement) {\n if (specs.inlineSize !== item.codeWidth) {\n item.codeWidth = specs.inlineSize;\n item.codeElement.style.setProperty(\n '--diffs-column-content-width',\n `${Math.max(item.codeWidth - item.numberWidth, 0)}px`\n );\n item.codeElement.style.setProperty(\n '--diffs-column-width',\n `${item.codeWidth}px`\n );\n }\n } else if (target === item.numberElement) {\n if (specs.inlineSize !== item.numberWidth) {\n item.numberWidth = specs.inlineSize;\n item.codeElement.style.setProperty(\n '--diffs-column-number-width',\n `${item.numberWidth}px`\n );\n // We probably need to update code width variable if\n // `numberWidth` changed\n if (item.codeWidth !== 'auto') {\n item.codeElement.style.setProperty(\n '--diffs-column-content-width',\n `${Math.max(item.codeWidth - item.numberWidth, 0)}px`\n );\n }\n }\n }\n }\n }\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/managers/ScrollSyncManager.d.ts
|
|
2
|
+
declare class ScrollSyncManager {
|
|
3
|
+
isDeletionsScrolling: boolean;
|
|
4
|
+
isAdditionsScrolling: boolean;
|
|
5
|
+
timeoutId: NodeJS.Timeout;
|
|
6
|
+
codeDeletions: HTMLElement | undefined;
|
|
7
|
+
codeAdditions: HTMLElement | undefined;
|
|
8
|
+
cleanUp(): void;
|
|
9
|
+
setup(pre: HTMLPreElement, codeDeletions?: HTMLElement, codeAdditions?: HTMLElement): void;
|
|
10
|
+
private handleDeletionsScroll;
|
|
11
|
+
private handleAdditionsScroll;
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { ScrollSyncManager };
|
|
15
|
+
//# sourceMappingURL=ScrollSyncManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollSyncManager.d.ts","names":[],"sources":["../../src/managers/ScrollSyncManager.ts"],"sourcesContent":[],"mappings":";cAAa,iBAAA;EAAb,oBAAa,EAAA,OAAA;EAGA,oBAAO,EAAA,OAAA;EACH,SAAA,EADJ,MAAA,CAAO,OACH;EACA,aAAA,EADA,WACA,GAAA,SAAA;EAiBR,aAAA,EAjBQ,WAiBR,GAAA,SAAA;EACW,OAAA,CAAA,CAAA,EAAA,IAAA;EACA,KAAA,CAAA,GAAA,EAFX,cAEW,EAAA,aAAA,CAAA,EADA,WACA,EAAA,aAAA,CAAA,EAAA,WAAA,CAAA,EAAA,IAAA;EAAA,QAAA,qBAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//#region src/managers/ScrollSyncManager.ts
|
|
2
|
+
var ScrollSyncManager = class {
|
|
3
|
+
isDeletionsScrolling = false;
|
|
4
|
+
isAdditionsScrolling = false;
|
|
5
|
+
timeoutId = -1;
|
|
6
|
+
codeDeletions;
|
|
7
|
+
codeAdditions;
|
|
8
|
+
cleanUp() {
|
|
9
|
+
this.codeDeletions?.removeEventListener("scroll", this.handleDeletionsScroll);
|
|
10
|
+
this.codeAdditions?.removeEventListener("scroll", this.handleAdditionsScroll);
|
|
11
|
+
clearTimeout(this.timeoutId);
|
|
12
|
+
this.codeDeletions = void 0;
|
|
13
|
+
this.codeAdditions = void 0;
|
|
14
|
+
}
|
|
15
|
+
setup(pre, codeDeletions, codeAdditions) {
|
|
16
|
+
if (codeDeletions == null || codeAdditions == null) for (const element of pre.children ?? []) {
|
|
17
|
+
if (!(element instanceof HTMLElement)) continue;
|
|
18
|
+
if ("deletions" in element.dataset) codeDeletions = element;
|
|
19
|
+
else if ("additions" in element.dataset) codeAdditions = element;
|
|
20
|
+
}
|
|
21
|
+
if (codeAdditions == null || codeDeletions == null) {
|
|
22
|
+
this.cleanUp();
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
this.codeDeletions?.removeEventListener("scroll", this.handleDeletionsScroll);
|
|
26
|
+
this.codeAdditions?.removeEventListener("scroll", this.handleAdditionsScroll);
|
|
27
|
+
this.codeDeletions = codeDeletions;
|
|
28
|
+
this.codeAdditions = codeAdditions;
|
|
29
|
+
codeDeletions.addEventListener("scroll", this.handleDeletionsScroll, { passive: true });
|
|
30
|
+
codeAdditions.addEventListener("scroll", this.handleAdditionsScroll, { passive: true });
|
|
31
|
+
}
|
|
32
|
+
handleDeletionsScroll = () => {
|
|
33
|
+
if (this.isAdditionsScrolling) return;
|
|
34
|
+
this.isDeletionsScrolling = true;
|
|
35
|
+
clearTimeout(this.timeoutId);
|
|
36
|
+
this.timeoutId = setTimeout(() => {
|
|
37
|
+
this.isDeletionsScrolling = false;
|
|
38
|
+
}, 300);
|
|
39
|
+
this.codeAdditions?.scrollTo({ left: this.codeDeletions?.scrollLeft });
|
|
40
|
+
};
|
|
41
|
+
handleAdditionsScroll = () => {
|
|
42
|
+
if (this.isDeletionsScrolling) return;
|
|
43
|
+
this.isAdditionsScrolling = true;
|
|
44
|
+
clearTimeout(this.timeoutId);
|
|
45
|
+
this.timeoutId = setTimeout(() => {
|
|
46
|
+
this.isAdditionsScrolling = false;
|
|
47
|
+
}, 300);
|
|
48
|
+
this.codeDeletions?.scrollTo({ left: this.codeAdditions?.scrollLeft });
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
export { ScrollSyncManager };
|
|
54
|
+
//# sourceMappingURL=ScrollSyncManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollSyncManager.js","names":[],"sources":["../../src/managers/ScrollSyncManager.ts"],"sourcesContent":["export class ScrollSyncManager {\n isDeletionsScrolling: boolean = false;\n isAdditionsScrolling: boolean = false;\n timeoutId: NodeJS.Timeout = -1 as unknown as NodeJS.Timeout;\n codeDeletions: HTMLElement | undefined;\n codeAdditions: HTMLElement | undefined;\n\n cleanUp(): void {\n this.codeDeletions?.removeEventListener(\n 'scroll',\n this.handleDeletionsScroll\n );\n this.codeAdditions?.removeEventListener(\n 'scroll',\n this.handleAdditionsScroll\n );\n clearTimeout(this.timeoutId);\n this.codeDeletions = undefined;\n this.codeAdditions = undefined;\n }\n\n setup(\n pre: HTMLPreElement,\n codeDeletions?: HTMLElement,\n codeAdditions?: HTMLElement\n ): void {\n // If no code elements were provided, lets try to find them in\n // the pre element\n if (codeDeletions == null || codeAdditions == null) {\n for (const element of pre.children ?? []) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if ('deletions' in element.dataset) {\n codeDeletions = element;\n } else if ('additions' in element.dataset) {\n codeAdditions = element;\n }\n }\n }\n if (codeAdditions == null || codeDeletions == null) {\n this.cleanUp();\n return;\n }\n this.codeDeletions?.removeEventListener(\n 'scroll',\n this.handleDeletionsScroll\n );\n this.codeAdditions?.removeEventListener(\n 'scroll',\n this.handleAdditionsScroll\n );\n this.codeDeletions = codeDeletions;\n this.codeAdditions = codeAdditions;\n codeDeletions.addEventListener('scroll', this.handleDeletionsScroll, {\n passive: true,\n });\n codeAdditions.addEventListener('scroll', this.handleAdditionsScroll, {\n passive: true,\n });\n }\n\n private handleDeletionsScroll = () => {\n if (this.isAdditionsScrolling) {\n return;\n }\n this.isDeletionsScrolling = true;\n clearTimeout(this.timeoutId);\n this.timeoutId = setTimeout(() => {\n this.isDeletionsScrolling = false;\n }, 300);\n this.codeAdditions?.scrollTo({\n left: this.codeDeletions?.scrollLeft,\n });\n };\n\n private handleAdditionsScroll = () => {\n if (this.isDeletionsScrolling) {\n return;\n }\n this.isAdditionsScrolling = true;\n clearTimeout(this.timeoutId);\n this.timeoutId = setTimeout(() => {\n this.isAdditionsScrolling = false;\n }, 300);\n this.codeDeletions?.scrollTo({\n left: this.codeAdditions?.scrollLeft,\n });\n };\n}\n"],"mappings":";AAAA,IAAa,oBAAb,MAA+B;CAC7B,uBAAgC;CAChC,uBAAgC;CAChC,YAA4B;CAC5B;CACA;CAEA,UAAgB;AACd,OAAK,eAAe,oBAClB,UACA,KAAK,sBACN;AACD,OAAK,eAAe,oBAClB,UACA,KAAK,sBACN;AACD,eAAa,KAAK,UAAU;AAC5B,OAAK,gBAAgB;AACrB,OAAK,gBAAgB;;CAGvB,MACE,KACA,eACA,eACM;AAGN,MAAI,iBAAiB,QAAQ,iBAAiB,KAC5C,MAAK,MAAM,WAAW,IAAI,YAAY,EAAE,EAAE;AACxC,OAAI,EAAE,mBAAmB,aACvB;AAEF,OAAI,eAAe,QAAQ,QACzB,iBAAgB;YACP,eAAe,QAAQ,QAChC,iBAAgB;;AAItB,MAAI,iBAAiB,QAAQ,iBAAiB,MAAM;AAClD,QAAK,SAAS;AACd;;AAEF,OAAK,eAAe,oBAClB,UACA,KAAK,sBACN;AACD,OAAK,eAAe,oBAClB,UACA,KAAK,sBACN;AACD,OAAK,gBAAgB;AACrB,OAAK,gBAAgB;AACrB,gBAAc,iBAAiB,UAAU,KAAK,uBAAuB,EACnE,SAAS,MACV,CAAC;AACF,gBAAc,iBAAiB,UAAU,KAAK,uBAAuB,EACnE,SAAS,MACV,CAAC;;CAGJ,AAAQ,8BAA8B;AACpC,MAAI,KAAK,qBACP;AAEF,OAAK,uBAAuB;AAC5B,eAAa,KAAK,UAAU;AAC5B,OAAK,YAAY,iBAAiB;AAChC,QAAK,uBAAuB;KAC3B,IAAI;AACP,OAAK,eAAe,SAAS,EAC3B,MAAM,KAAK,eAAe,YAC3B,CAAC;;CAGJ,AAAQ,8BAA8B;AACpC,MAAI,KAAK,qBACP;AAEF,OAAK,uBAAuB;AAC5B,eAAa,KAAK,UAAU;AAC5B,OAAK,YAAY,iBAAiB;AAChC,QAAK,uBAAuB;KAC3B,IAAI;AACP,OAAK,eAAe,SAAS,EAC3B,MAAM,KAAK,eAAe,YAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UniversalRenderingManager.d.ts","names":[],"sources":["../../src/managers/UniversalRenderingManager.ts"],"sourcesContent":[],"mappings":";KAAK,QAAA;AAAA,iBAQW,WAAA,CARX,QAAA,EAQiC,QARjC,CAAA,EAAA,IAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/managers/UniversalRenderingManager.ts
|
|
2
|
+
const queuedCallbacks = /* @__PURE__ */ new Set();
|
|
3
|
+
let callbacks = /* @__PURE__ */ new Set();
|
|
4
|
+
let frameId = null;
|
|
5
|
+
let isRendering = false;
|
|
6
|
+
function queueRender(callback) {
|
|
7
|
+
if (isRendering) {
|
|
8
|
+
queuedCallbacks.add(callback);
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
callbacks.add(callback);
|
|
12
|
+
frameId ??= requestAnimationFrame(render);
|
|
13
|
+
}
|
|
14
|
+
function render(time) {
|
|
15
|
+
isRendering = true;
|
|
16
|
+
for (const callback of callbacks) try {
|
|
17
|
+
callback(time);
|
|
18
|
+
} catch (error) {
|
|
19
|
+
console.error(error);
|
|
20
|
+
}
|
|
21
|
+
callbacks.clear();
|
|
22
|
+
if (queuedCallbacks.size > 0) {
|
|
23
|
+
callbacks = new Set(queuedCallbacks);
|
|
24
|
+
queuedCallbacks.clear();
|
|
25
|
+
frameId = requestAnimationFrame(render);
|
|
26
|
+
} else frameId = null;
|
|
27
|
+
isRendering = false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
//#endregion
|
|
31
|
+
export { queueRender };
|
|
32
|
+
//# sourceMappingURL=UniversalRenderingManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UniversalRenderingManager.js","names":["frameId: null | number"],"sources":["../../src/managers/UniversalRenderingManager.ts"],"sourcesContent":["type Callback = (time: number) => unknown;\n\nconst queuedCallbacks = new Set<Callback>();\nlet callbacks = new Set<Callback>();\nlet frameId: null | number = null;\nlet isRendering = false;\n\n// TODO(amadeus): Figure out a proper name for this module...\nexport function queueRender(callback: Callback): void {\n if (isRendering) {\n queuedCallbacks.add(callback);\n return;\n }\n callbacks.add(callback);\n frameId ??= requestAnimationFrame(render);\n}\n\nfunction render(time: number): void {\n isRendering = true;\n for (const callback of callbacks) {\n try {\n callback(time);\n } catch (error) {\n console.error(error);\n }\n }\n callbacks.clear();\n if (queuedCallbacks.size > 0) {\n callbacks = new Set(queuedCallbacks);\n queuedCallbacks.clear();\n frameId = requestAnimationFrame(render);\n } else {\n frameId = null;\n }\n isRendering = false;\n}\n"],"mappings":";AAEA,MAAM,kCAAkB,IAAI,KAAe;AAC3C,IAAI,4BAAY,IAAI,KAAe;AACnC,IAAIA,UAAyB;AAC7B,IAAI,cAAc;AAGlB,SAAgB,YAAY,UAA0B;AACpD,KAAI,aAAa;AACf,kBAAgB,IAAI,SAAS;AAC7B;;AAEF,WAAU,IAAI,SAAS;AACvB,aAAY,sBAAsB,OAAO;;AAG3C,SAAS,OAAO,MAAoB;AAClC,eAAc;AACd,MAAK,MAAM,YAAY,UACrB,KAAI;AACF,WAAS,KAAK;UACP,OAAO;AACd,UAAQ,MAAM,MAAM;;AAGxB,WAAU,OAAO;AACjB,KAAI,gBAAgB,OAAO,GAAG;AAC5B,cAAY,IAAI,IAAI,gBAAgB;AACpC,kBAAgB,OAAO;AACvB,YAAU,sBAAsB,OAAO;OAEvC,WAAU;AAEZ,eAAc"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FileOptions } from "../components/File.js";
|
|
2
|
+
import { FileProps } from "./types.js";
|
|
3
|
+
|
|
4
|
+
//#region src/react/File.d.ts
|
|
5
|
+
declare function File<LAnnotation = undefined>({
|
|
6
|
+
file,
|
|
7
|
+
lineAnnotations,
|
|
8
|
+
selectedLines,
|
|
9
|
+
options,
|
|
10
|
+
className,
|
|
11
|
+
style,
|
|
12
|
+
renderAnnotation,
|
|
13
|
+
renderHeaderMetadata,
|
|
14
|
+
prerenderedHTML,
|
|
15
|
+
renderHoverUtility
|
|
16
|
+
}: FileProps<LAnnotation>): React.JSX.Element;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { File, type FileOptions };
|
|
19
|
+
//# sourceMappingURL=File.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"File.d.ts","names":[],"sources":["../../src/react/File.tsx"],"sourcesContent":[],"mappings":";;;;iBAWgB;;;;;;;;;;;GAWb,UAAU,eAAe,KAAA,CAAM,GAAA,CAAI"}
|