@pierre/diffs 1.3.0-beta.5 → 1.3.0-beta.7
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/README.md +9 -9
- package/dist/components/CodeView.d.ts +13 -11
- package/dist/components/CodeView.d.ts.map +1 -1
- package/dist/components/CodeView.js +53 -14
- package/dist/components/CodeView.js.map +1 -1
- package/dist/components/File.d.ts +4 -5
- package/dist/components/File.d.ts.map +1 -1
- package/dist/components/File.js +37 -19
- package/dist/components/File.js.map +1 -1
- package/dist/components/FileDiff.d.ts +49 -36
- package/dist/components/FileDiff.d.ts.map +1 -1
- package/dist/components/FileDiff.js +173 -75
- package/dist/components/FileDiff.js.map +1 -1
- package/dist/components/FileStream.d.ts +0 -1
- package/dist/components/FileStream.d.ts.map +1 -1
- package/dist/components/FileStream.js +4 -4
- package/dist/components/FileStream.js.map +1 -1
- package/dist/components/UnresolvedFile.d.ts +3 -3
- package/dist/components/UnresolvedFile.d.ts.map +1 -1
- package/dist/components/UnresolvedFile.js +7 -5
- package/dist/components/UnresolvedFile.js.map +1 -1
- package/dist/components/VirtualizedFile.d.ts +0 -1
- package/dist/components/VirtualizedFile.d.ts.map +1 -1
- package/dist/components/VirtualizedFile.js +22 -25
- package/dist/components/VirtualizedFile.js.map +1 -1
- package/dist/components/VirtualizedFileDiff.d.ts +12 -7
- package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
- package/dist/components/VirtualizedFileDiff.js +192 -64
- package/dist/components/VirtualizedFileDiff.js.map +1 -1
- package/dist/components/Virtualizer.d.ts +1 -1
- package/dist/components/Virtualizer.d.ts.map +1 -1
- package/dist/components/Virtualizer.js +23 -24
- package/dist/components/Virtualizer.js.map +1 -1
- package/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
- package/dist/components/web-components.d.ts.map +1 -1
- package/dist/components/web-components.js +2 -3
- package/dist/components/web-components.js.map +1 -1
- package/dist/constants.d.ts +3 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -2
- package/dist/constants.js.map +1 -1
- package/dist/editor/command.d.ts +2 -1
- package/dist/editor/command.d.ts.map +1 -1
- package/dist/editor/command.js +7 -3
- package/dist/editor/command.js.map +1 -1
- package/dist/editor/editStack.d.ts +7 -1
- package/dist/editor/editStack.d.ts.map +1 -1
- package/dist/editor/editStack.js +3 -3
- package/dist/editor/editStack.js.map +1 -1
- package/dist/editor/editor.d.ts +28 -4
- package/dist/editor/editor.d.ts.map +1 -1
- package/dist/editor/editor.js +669 -313
- package/dist/editor/editor.js.map +1 -1
- package/dist/editor/editor2.js +3 -3
- package/dist/editor/editor2.js.map +1 -1
- package/dist/editor/index.js +1 -2
- package/dist/editor/lineAnnotations.d.ts.map +1 -1
- package/dist/editor/lineAnnotations.js +2 -3
- package/dist/editor/lineAnnotations.js.map +1 -1
- package/dist/editor/marker.d.ts +2 -1
- package/dist/editor/marker.d.ts.map +1 -1
- package/dist/editor/marker.js +28 -11
- package/dist/editor/marker.js.map +1 -1
- package/dist/editor/pieceTable.d.ts +4 -2
- package/dist/editor/pieceTable.d.ts.map +1 -1
- package/dist/editor/pieceTable.js +138 -128
- package/dist/editor/pieceTable.js.map +1 -1
- package/dist/editor/platform.d.ts +8 -1
- package/dist/editor/platform.d.ts.map +1 -1
- package/dist/editor/platform.js +16 -5
- package/dist/editor/platform.js.map +1 -1
- package/dist/editor/searchPanel.d.ts +1 -0
- package/dist/editor/searchPanel.d.ts.map +1 -1
- package/dist/editor/searchPanel.js +75 -62
- package/dist/editor/searchPanel.js.map +1 -1
- package/dist/editor/selection.d.ts +42 -5
- package/dist/editor/selection.d.ts.map +1 -1
- package/dist/editor/selection.js +504 -114
- package/dist/editor/selection.js.map +1 -1
- package/dist/editor/selectionAction.d.ts +4 -5
- package/dist/editor/selectionAction.d.ts.map +1 -1
- package/dist/editor/selectionAction.js +14 -64
- package/dist/editor/selectionAction.js.map +1 -1
- package/dist/editor/sprite.d.ts +2 -2
- package/dist/editor/sprite.d.ts.map +1 -1
- package/dist/editor/sprite.js +7 -14
- package/dist/editor/sprite.js.map +1 -1
- package/dist/editor/textDocument.d.ts +5 -4
- package/dist/editor/textDocument.d.ts.map +1 -1
- package/dist/editor/textDocument.js +26 -15
- package/dist/editor/textDocument.js.map +1 -1
- package/dist/editor/textMeasure.d.ts +36 -3
- package/dist/editor/textMeasure.d.ts.map +1 -1
- package/dist/editor/textMeasure.js +104 -17
- package/dist/editor/textMeasure.js.map +1 -1
- package/dist/editor/tokenzier.d.ts +3 -0
- package/dist/editor/tokenzier.d.ts.map +1 -1
- package/dist/editor/tokenzier.js +27 -16
- package/dist/editor/tokenzier.js.map +1 -1
- package/dist/editor/utils.d.ts +4 -1
- package/dist/editor/utils.d.ts.map +1 -1
- package/dist/editor/utils.js +19 -3
- package/dist/editor/utils.js.map +1 -1
- package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
- package/dist/highlighter/languages/areLanguagesAttached.js +1 -2
- package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -1
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts +0 -2
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/attachResolvedLanguages.js +1 -2
- package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
- package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/cleanUpResolvedLanguages.js +1 -2
- package/dist/highlighter/languages/cleanUpResolvedLanguages.js.map +1 -1
- package/dist/highlighter/languages/constants.d.ts +0 -1
- package/dist/highlighter/languages/constants.d.ts.map +1 -1
- package/dist/highlighter/languages/constants.js +1 -1
- package/dist/highlighter/languages/constants.js.map +1 -1
- package/dist/highlighter/languages/getResolvedLanguages.d.ts +0 -2
- package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/getResolvedLanguages.js +1 -2
- package/dist/highlighter/languages/getResolvedLanguages.js.map +1 -1
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +0 -2
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.js +1 -2
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.js.map +1 -1
- package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/hasResolvedLanguages.js +1 -2
- package/dist/highlighter/languages/hasResolvedLanguages.js.map +1 -1
- package/dist/highlighter/languages/registerCustomLanguage.d.ts +0 -1
- package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
- package/dist/highlighter/languages/registerCustomLanguage.js +1 -2
- package/dist/highlighter/languages/registerCustomLanguage.js.map +1 -1
- package/dist/highlighter/languages/resolveLanguage.d.ts +0 -2
- package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
- package/dist/highlighter/languages/resolveLanguage.js +4 -5
- package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
- package/dist/highlighter/languages/resolveLanguages.d.ts +0 -2
- package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/resolveLanguages.js +1 -2
- package/dist/highlighter/languages/resolveLanguages.js.map +1 -1
- package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
- package/dist/highlighter/shared_highlighter.js +3 -4
- package/dist/highlighter/shared_highlighter.js.map +1 -1
- package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
- package/dist/highlighter/themes/areThemesAttached.js +1 -2
- package/dist/highlighter/themes/areThemesAttached.js.map +1 -1
- package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/attachResolvedThemes.js +1 -2
- package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/cleanUpResolvedThemes.js +1 -2
- package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/constants.d.ts.map +1 -1
- package/dist/highlighter/themes/constants.js +1 -1
- package/dist/highlighter/themes/constants.js.map +1 -1
- package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/getResolvedOrResolveTheme.js +1 -2
- package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -1
- package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/getResolvedThemes.js +1 -2
- package/dist/highlighter/themes/getResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/hasResolvedThemes.js +1 -2
- package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.js +1 -2
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.js.map +1 -1
- package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/registerCustomTheme.js +1 -2
- package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
- package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/resolveTheme.js +1 -2
- package/dist/highlighter/themes/resolveTheme.js.map +1 -1
- package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/resolveThemes.js +1 -2
- package/dist/highlighter/themes/resolveThemes.js.map +1 -1
- package/dist/highlighter/themes/themeResolution.d.ts.map +1 -1
- package/dist/highlighter/themes/themeResolution.js +1 -2
- package/dist/highlighter/themes/themeResolution.js.map +1 -1
- package/dist/highlighter/themes/themeResolver.d.ts +2 -2
- package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
- package/dist/highlighter/themes/themeResolver.js +1 -2
- package/dist/highlighter/themes/themeResolver.js.map +1 -1
- package/dist/index.d.ts +12 -10
- package/dist/index.js +4 -3
- package/dist/managers/InteractionManager.d.ts +7 -0
- package/dist/managers/InteractionManager.d.ts.map +1 -1
- package/dist/managers/InteractionManager.js +25 -4
- package/dist/managers/InteractionManager.js.map +1 -1
- package/dist/managers/ResizeManager.d.ts.map +1 -1
- package/dist/managers/ResizeManager.js +1 -1
- package/dist/managers/ResizeManager.js.map +1 -1
- package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
- package/dist/managers/ScrollSyncManager.js +1 -1
- package/dist/managers/ScrollSyncManager.js.map +1 -1
- package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
- package/dist/managers/UniversalRenderingManager.js +2 -2
- package/dist/managers/UniversalRenderingManager.js.map +1 -1
- package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +228 -0
- package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -0
- package/dist/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts +84 -0
- package/dist/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts.map +1 -0
- package/dist/react/CodeView.d.ts +1 -1
- package/dist/react/CodeView.d.ts.map +1 -1
- package/dist/react/CodeView.js +17 -16
- package/dist/react/CodeView.js.map +1 -1
- package/dist/react/EditorContext.d.ts +0 -1
- package/dist/react/EditorContext.d.ts.map +1 -1
- package/dist/react/EditorContext.js +2 -5
- package/dist/react/EditorContext.js.map +1 -1
- package/dist/react/File.d.ts +1 -0
- package/dist/react/File.d.ts.map +1 -1
- package/dist/react/File.js +4 -6
- package/dist/react/File.js.map +1 -1
- package/dist/react/FileDiff.d.ts +1 -0
- package/dist/react/FileDiff.d.ts.map +1 -1
- package/dist/react/FileDiff.js +4 -6
- package/dist/react/FileDiff.js.map +1 -1
- package/dist/react/MultiFileDiff.d.ts +4 -4
- package/dist/react/MultiFileDiff.d.ts.map +1 -1
- package/dist/react/MultiFileDiff.js +4 -6
- package/dist/react/MultiFileDiff.js.map +1 -1
- package/dist/react/PatchDiff.d.ts +1 -0
- package/dist/react/PatchDiff.d.ts.map +1 -1
- package/dist/react/PatchDiff.js +4 -6
- package/dist/react/PatchDiff.js.map +1 -1
- package/dist/react/UnresolvedFile.d.ts +2 -1
- package/dist/react/UnresolvedFile.d.ts.map +1 -1
- package/dist/react/UnresolvedFile.js +4 -6
- package/dist/react/UnresolvedFile.js.map +1 -1
- package/dist/react/Virtualizer.d.ts.map +1 -1
- package/dist/react/Virtualizer.js +2 -5
- package/dist/react/Virtualizer.js.map +1 -1
- package/dist/react/WorkerPoolContext.d.ts +0 -1
- package/dist/react/WorkerPoolContext.d.ts.map +1 -1
- package/dist/react/WorkerPoolContext.js +2 -5
- package/dist/react/WorkerPoolContext.js.map +1 -1
- package/dist/react/constants.d.ts.map +1 -1
- package/dist/react/constants.js +1 -1
- package/dist/react/constants.js.map +1 -1
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +1 -2
- package/dist/react/jsx.d.ts +0 -2
- package/dist/react/jsx.d.ts.map +1 -1
- package/dist/react/types.d.ts +2 -0
- package/dist/react/types.d.ts.map +1 -1
- package/dist/react/utils/renderDiffChildren.d.ts +2 -0
- package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
- package/dist/react/utils/renderDiffChildren.js +18 -11
- package/dist/react/utils/renderDiffChildren.js.map +1 -1
- package/dist/react/utils/renderFileChildren.d.ts +2 -0
- package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
- package/dist/react/utils/renderFileChildren.js +18 -11
- package/dist/react/utils/renderFileChildren.js.map +1 -1
- package/dist/react/utils/templateRender.d.ts.map +1 -1
- package/dist/react/utils/templateRender.js +1 -2
- package/dist/react/utils/templateRender.js.map +1 -1
- package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileDiffInstance.js +15 -18
- package/dist/react/utils/useFileDiffInstance.js.map +1 -1
- package/dist/react/utils/useFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileInstance.js +1 -2
- package/dist/react/utils/useFileInstance.js.map +1 -1
- package/dist/react/utils/useStableCallback.d.ts.map +1 -1
- package/dist/react/utils/useStableCallback.js +1 -2
- package/dist/react/utils/useStableCallback.js.map +1 -1
- package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useUnresolvedFileInstance.js +10 -11
- package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
- package/dist/renderers/DiffHunksRenderer.d.ts +2 -3
- package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/DiffHunksRenderer.js +52 -33
- package/dist/renderers/DiffHunksRenderer.js.map +1 -1
- package/dist/renderers/FileRenderer.d.ts +1 -3
- package/dist/renderers/FileRenderer.d.ts.map +1 -1
- package/dist/renderers/FileRenderer.js +14 -11
- package/dist/renderers/FileRenderer.js.map +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.d.ts +1 -2
- package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.js +1 -2
- package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
- package/dist/shiki-stream/index.js +1 -2
- package/dist/shiki-stream/stream.d.ts +0 -1
- package/dist/shiki-stream/stream.d.ts.map +1 -1
- package/dist/shiki-stream/stream.js +1 -2
- package/dist/shiki-stream/stream.js.map +1 -1
- package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
- package/dist/shiki-stream/tokenizer.js +1 -1
- package/dist/shiki-stream/tokenizer.js.map +1 -1
- package/dist/shiki-stream/types.d.ts +0 -1
- package/dist/shiki-stream/types.d.ts.map +1 -1
- package/dist/sprite.d.ts.map +1 -1
- package/dist/sprite.js +1 -1
- package/dist/ssr/FileDiffReact.d.ts.map +1 -1
- package/dist/ssr/FileDiffReact.js +5 -8
- package/dist/ssr/FileDiffReact.js.map +1 -1
- package/dist/ssr/index.d.ts +2 -2
- package/dist/ssr/index.js +1 -2
- package/dist/ssr/preloadDiffs.d.ts +12 -11
- package/dist/ssr/preloadDiffs.d.ts.map +1 -1
- package/dist/ssr/preloadDiffs.js +15 -8
- package/dist/ssr/preloadDiffs.js.map +1 -1
- package/dist/ssr/preloadFile.d.ts.map +1 -1
- package/dist/ssr/preloadFile.js +1 -2
- package/dist/ssr/preloadFile.js.map +1 -1
- package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
- package/dist/ssr/preloadPatchFile.js +2 -3
- package/dist/ssr/preloadPatchFile.js.map +1 -1
- package/dist/ssr/renderHTML.d.ts +1 -1
- package/dist/ssr/renderHTML.d.ts.map +1 -1
- package/dist/ssr/renderHTML.js +1 -2
- package/dist/ssr/renderHTML.js.map +1 -1
- package/dist/string-import.d.ts +4 -0
- package/dist/string-import.d.ts.map +1 -1
- package/dist/style.js +3 -3
- package/dist/style.js.map +1 -1
- package/dist/types.d.ts +67 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
- package/dist/utils/areDiffLineAnnotationsEqual.js +1 -1
- package/dist/utils/areDiffLineAnnotationsEqual.js.map +1 -1
- package/dist/utils/areDiffRenderOptionsEqual.d.ts.map +1 -1
- package/dist/utils/areDiffRenderOptionsEqual.js +1 -2
- package/dist/utils/areDiffRenderOptionsEqual.js.map +1 -1
- package/dist/utils/areDiffTargetsEqual.d.ts.map +1 -1
- package/dist/utils/areDiffTargetsEqual.js +1 -1
- package/dist/utils/areDiffTargetsEqual.js.map +1 -1
- package/dist/utils/areFileRenderOptionsEqual.d.ts.map +1 -1
- package/dist/utils/areFileRenderOptionsEqual.js +1 -2
- package/dist/utils/areFileRenderOptionsEqual.js.map +1 -1
- package/dist/utils/areFilesEqual.d.ts.map +1 -1
- package/dist/utils/areFilesEqual.js +1 -1
- package/dist/utils/areFilesEqual.js.map +1 -1
- package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
- package/dist/utils/areHunkDataEqual.js +2 -2
- package/dist/utils/areHunkDataEqual.js.map +1 -1
- package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
- package/dist/utils/areLineAnnotationsEqual.js +1 -1
- package/dist/utils/areLineAnnotationsEqual.js.map +1 -1
- package/dist/utils/areManagedSnapshotsEqual.d.ts.map +1 -1
- package/dist/utils/areManagedSnapshotsEqual.js +1 -1
- package/dist/utils/areManagedSnapshotsEqual.js.map +1 -1
- package/dist/utils/areMergeConflictActionsEqual.d.ts.map +1 -1
- package/dist/utils/areMergeConflictActionsEqual.js +1 -1
- package/dist/utils/areMergeConflictActionsEqual.js.map +1 -1
- package/dist/utils/areObjectsEqual.d.ts.map +1 -1
- package/dist/utils/areObjectsEqual.js +1 -1
- package/dist/utils/areObjectsEqual.js.map +1 -1
- package/dist/utils/areOptionsEqual.d.ts +0 -2
- package/dist/utils/areOptionsEqual.d.ts.map +1 -1
- package/dist/utils/areOptionsEqual.js +1 -2
- package/dist/utils/areOptionsEqual.js.map +1 -1
- package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
- package/dist/utils/arePrePropertiesEqual.js +1 -1
- package/dist/utils/arePrePropertiesEqual.js.map +1 -1
- package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
- package/dist/utils/areRenderRangesEqual.js +1 -1
- package/dist/utils/areRenderRangesEqual.js.map +1 -1
- package/dist/utils/areSelectionPointsEqual.d.ts.map +1 -1
- package/dist/utils/areSelectionPointsEqual.js +1 -1
- package/dist/utils/areSelectionPointsEqual.js.map +1 -1
- package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
- package/dist/utils/areSelectionsEqual.js +1 -1
- package/dist/utils/areSelectionsEqual.js.map +1 -1
- package/dist/utils/areThemesEqual.d.ts.map +1 -1
- package/dist/utils/areThemesEqual.js +1 -1
- package/dist/utils/areThemesEqual.js.map +1 -1
- package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
- package/dist/utils/areVirtualWindowSpecsEqual.js +1 -1
- package/dist/utils/areVirtualWindowSpecsEqual.js.map +1 -1
- package/dist/utils/areWorkerStatsEqual.d.ts +0 -2
- package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
- package/dist/utils/areWorkerStatsEqual.js +1 -1
- package/dist/utils/areWorkerStatsEqual.js.map +1 -1
- package/dist/utils/awaitWithTimeout.d.ts +5 -0
- package/dist/utils/awaitWithTimeout.d.ts.map +1 -0
- package/dist/utils/awaitWithTimeout.js +15 -0
- package/dist/utils/awaitWithTimeout.js.map +1 -0
- package/dist/utils/cleanLastNewline.d.ts.map +1 -1
- package/dist/utils/cleanLastNewline.js +1 -1
- package/dist/utils/cleanLastNewline.js.map +1 -1
- package/dist/utils/cloneFileDiffMetadata.d.ts +7 -0
- package/dist/utils/cloneFileDiffMetadata.d.ts.map +1 -0
- package/dist/utils/cloneFileDiffMetadata.js +16 -0
- package/dist/utils/cloneFileDiffMetadata.js.map +1 -0
- package/dist/utils/computeEstimatedDiffHeights.d.ts +3 -1
- package/dist/utils/computeEstimatedDiffHeights.d.ts.map +1 -1
- package/dist/utils/computeEstimatedDiffHeights.js +9 -3
- package/dist/utils/computeEstimatedDiffHeights.js.map +1 -1
- package/dist/utils/computeFileOffsets.d.ts +9 -1
- package/dist/utils/computeFileOffsets.d.ts.map +1 -1
- package/dist/utils/computeFileOffsets.js +20 -2
- package/dist/utils/computeFileOffsets.js.map +1 -1
- package/dist/utils/computeVirtualFileMetrics.d.ts.map +1 -1
- package/dist/utils/computeVirtualFileMetrics.js +1 -2
- package/dist/utils/computeVirtualFileMetrics.js.map +1 -1
- package/dist/utils/createAnnotationElement.d.ts +1 -1
- package/dist/utils/createAnnotationElement.d.ts.map +1 -1
- package/dist/utils/createAnnotationElement.js +1 -2
- package/dist/utils/createAnnotationElement.js.map +1 -1
- package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
- package/dist/utils/createAnnotationWrapperNode.js +1 -1
- package/dist/utils/createAnnotationWrapperNode.js.map +1 -1
- package/dist/utils/createContentColumn.d.ts +1 -1
- package/dist/utils/createContentColumn.d.ts.map +1 -1
- package/dist/utils/createContentColumn.js +1 -2
- package/dist/utils/createContentColumn.js.map +1 -1
- package/dist/utils/createEmptyRowBuffer.d.ts +1 -1
- package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
- package/dist/utils/createEmptyRowBuffer.js +1 -2
- package/dist/utils/createEmptyRowBuffer.js.map +1 -1
- package/dist/utils/createFileHeaderElement.d.ts +1 -1
- package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
- package/dist/utils/createFileHeaderElement.js +6 -3
- package/dist/utils/createFileHeaderElement.js.map +1 -1
- package/dist/utils/createGutterUtilityContentNode.d.ts.map +1 -1
- package/dist/utils/createGutterUtilityContentNode.js +1 -1
- package/dist/utils/createGutterUtilityContentNode.js.map +1 -1
- package/dist/utils/createGutterUtilityElement.d.ts +1 -1
- package/dist/utils/createGutterUtilityElement.d.ts.map +1 -1
- package/dist/utils/createGutterUtilityElement.js +1 -2
- package/dist/utils/createGutterUtilityElement.js.map +1 -1
- package/dist/utils/createNoNewlineElement.d.ts +1 -1
- package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
- package/dist/utils/createNoNewlineElement.js +1 -2
- package/dist/utils/createNoNewlineElement.js.map +1 -1
- package/dist/utils/createPreElement.d.ts +1 -1
- package/dist/utils/createPreElement.d.ts.map +1 -1
- package/dist/utils/createPreElement.js +1 -3
- package/dist/utils/createPreElement.js.map +1 -1
- package/dist/utils/createRowNodes.d.ts.map +1 -1
- package/dist/utils/createRowNodes.js +1 -1
- package/dist/utils/createRowNodes.js.map +1 -1
- package/dist/utils/createSeparator.d.ts +1 -1
- package/dist/utils/createSeparator.d.ts.map +1 -1
- package/dist/utils/createSeparator.js +1 -2
- package/dist/utils/createSeparator.js.map +1 -1
- package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
- package/dist/utils/createSpanNodeFromToken.js +1 -2
- package/dist/utils/createSpanNodeFromToken.js.map +1 -1
- package/dist/utils/createStyleElement.d.ts +1 -1
- package/dist/utils/createStyleElement.d.ts.map +1 -1
- package/dist/utils/createStyleElement.js +1 -2
- package/dist/utils/createStyleElement.js.map +1 -1
- package/dist/utils/createTransformerWithState.d.ts.map +1 -1
- package/dist/utils/createTransformerWithState.js +1 -2
- package/dist/utils/createTransformerWithState.js.map +1 -1
- package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
- package/dist/utils/createUnsafeCSSStyleNode.js +1 -2
- package/dist/utils/createUnsafeCSSStyleNode.js.map +1 -1
- package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
- package/dist/utils/createWindowFromScrollPosition.js +5 -5
- package/dist/utils/createWindowFromScrollPosition.js.map +1 -1
- package/dist/utils/cssWrappers.d.ts.map +1 -1
- package/dist/utils/cssWrappers.js +2 -3
- package/dist/utils/cssWrappers.js.map +1 -1
- package/dist/utils/detachString.d.ts.map +1 -1
- package/dist/utils/detachString.js +1 -1
- package/dist/utils/detachString.js.map +1 -1
- package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
- package/dist/utils/diffAcceptRejectHunk.js +1 -2
- package/dist/utils/diffAcceptRejectHunk.js.map +1 -1
- package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
- package/dist/utils/formatCSSVariablePrefix.js +1 -1
- package/dist/utils/formatCSSVariablePrefix.js.map +1 -1
- package/dist/utils/getDiffFileInput.d.ts +14 -0
- package/dist/utils/getDiffFileInput.d.ts.map +1 -0
- package/dist/utils/getDiffFileInput.js +24 -0
- package/dist/utils/getDiffFileInput.js.map +1 -0
- package/dist/utils/getDiffHunksRendererOptions.d.ts.map +1 -1
- package/dist/utils/getDiffHunksRendererOptions.js +2 -1
- package/dist/utils/getDiffHunksRendererOptions.js.map +1 -1
- package/dist/utils/getFileRendererOptions.d.ts.map +1 -1
- package/dist/utils/getFileRendererOptions.js +1 -1
- package/dist/utils/getFileRendererOptions.js.map +1 -1
- package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
- package/dist/utils/getFiletypeFromFileName.js +3 -1
- package/dist/utils/getFiletypeFromFileName.js.map +1 -1
- package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
- package/dist/utils/getHighlighterOptions.js +1 -2
- package/dist/utils/getHighlighterOptions.js.map +1 -1
- package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
- package/dist/utils/getHighlighterThemeStyles.js +1 -2
- package/dist/utils/getHighlighterThemeStyles.js.map +1 -1
- package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
- package/dist/utils/getHunkSeparatorSlotName.js +1 -1
- package/dist/utils/getHunkSeparatorSlotName.js.map +1 -1
- package/dist/utils/getIconForType.d.ts.map +1 -1
- package/dist/utils/getIconForType.js +1 -1
- package/dist/utils/getIconForType.js.map +1 -1
- package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
- package/dist/utils/getLineAnnotationName.js +1 -1
- package/dist/utils/getLineAnnotationName.js.map +1 -1
- package/dist/utils/getLineEndingType.d.ts.map +1 -1
- package/dist/utils/getLineEndingType.js +1 -1
- package/dist/utils/getLineEndingType.js.map +1 -1
- package/dist/utils/getLineNodes.d.ts +1 -1
- package/dist/utils/getLineNodes.d.ts.map +1 -1
- package/dist/utils/getLineNodes.js +1 -1
- package/dist/utils/getLineNodes.js.map +1 -1
- package/dist/utils/getMergeConflictActionSlotName.d.ts.map +1 -1
- package/dist/utils/getMergeConflictActionSlotName.js +1 -1
- package/dist/utils/getMergeConflictActionSlotName.js.map +1 -1
- package/dist/utils/getMergeConflictLineTypes.d.ts.map +1 -1
- package/dist/utils/getMergeConflictLineTypes.js +1 -2
- package/dist/utils/getMergeConflictLineTypes.js.map +1 -1
- package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
- package/dist/utils/getOrCreateCodeNode.js +1 -1
- package/dist/utils/getOrCreateCodeNode.js.map +1 -1
- package/dist/utils/getSingularPatch.d.ts.map +1 -1
- package/dist/utils/getSingularPatch.js +1 -2
- package/dist/utils/getSingularPatch.js.map +1 -1
- package/dist/utils/getThemes.d.ts.map +1 -1
- package/dist/utils/getThemes.js +1 -2
- package/dist/utils/getThemes.js.map +1 -1
- package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
- package/dist/utils/getTotalLineCountFromHunks.js +1 -1
- package/dist/utils/getTotalLineCountFromHunks.js.map +1 -1
- package/dist/utils/hast_utils.d.ts +1 -1
- package/dist/utils/hast_utils.d.ts.map +1 -1
- package/dist/utils/hast_utils.js +1 -1
- package/dist/utils/hast_utils.js.map +1 -1
- package/dist/utils/hostTheme.d.ts.map +1 -1
- package/dist/utils/hostTheme.js +1 -2
- package/dist/utils/hostTheme.js.map +1 -1
- package/dist/utils/hydratePartialDiff.d.ts +10 -0
- package/dist/utils/hydratePartialDiff.d.ts.map +1 -0
- package/dist/utils/hydratePartialDiff.js +140 -0
- package/dist/utils/hydratePartialDiff.js.map +1 -0
- package/dist/utils/includesFileAnnotations.d.ts.map +1 -1
- package/dist/utils/includesFileAnnotations.js +5 -5
- package/dist/utils/includesFileAnnotations.js.map +1 -1
- package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
- package/dist/utils/isDefaultRenderRange.js +1 -1
- package/dist/utils/isDefaultRenderRange.js.map +1 -1
- package/dist/utils/isDiffPlainText.d.ts.map +1 -1
- package/dist/utils/isDiffPlainText.js +1 -2
- package/dist/utils/isDiffPlainText.js.map +1 -1
- package/dist/utils/isFilePlainText.d.ts.map +1 -1
- package/dist/utils/isFilePlainText.js +1 -2
- package/dist/utils/isFilePlainText.js.map +1 -1
- package/dist/utils/isStyleNode.d.ts.map +1 -1
- package/dist/utils/isStyleNode.js +1 -1
- package/dist/utils/isStyleNode.js.map +1 -1
- package/dist/utils/isWorkerContext.d.ts.map +1 -1
- package/dist/utils/isWorkerContext.js +1 -1
- package/dist/utils/isWorkerContext.js.map +1 -1
- package/dist/utils/iterateOverDiff.d.ts.map +1 -1
- package/dist/utils/iterateOverDiff.js +47 -48
- package/dist/utils/iterateOverDiff.js.map +1 -1
- package/dist/utils/normalizeDiffResolution.d.ts.map +1 -1
- package/dist/utils/normalizeDiffResolution.js +1 -1
- package/dist/utils/normalizeDiffResolution.js.map +1 -1
- package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
- package/dist/utils/parseDiffDecorations.js +1 -2
- package/dist/utils/parseDiffDecorations.js.map +1 -1
- package/dist/utils/parseDiffFromFile.d.ts +1 -2
- package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
- package/dist/utils/parseDiffFromFile.js +27 -7
- package/dist/utils/parseDiffFromFile.js.map +1 -1
- package/dist/utils/parseLineType.d.ts.map +1 -1
- package/dist/utils/parseLineType.js +1 -1
- package/dist/utils/parseLineType.js.map +1 -1
- package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
- package/dist/utils/parseMergeConflictDiffFromFile.js +5 -5
- package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
- package/dist/utils/parsePatchFiles.d.ts.map +1 -1
- package/dist/utils/parsePatchFiles.js +6 -7
- package/dist/utils/parsePatchFiles.js.map +1 -1
- package/dist/utils/prefersReducedMotion.d.ts.map +1 -1
- package/dist/utils/prefersReducedMotion.js +1 -1
- package/dist/utils/prefersReducedMotion.js.map +1 -1
- package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
- package/dist/utils/prerenderHTMLIfNecessary.js +1 -1
- package/dist/utils/prerenderHTMLIfNecessary.js.map +1 -1
- package/dist/utils/processLine.d.ts +1 -1
- package/dist/utils/processLine.d.ts.map +1 -1
- package/dist/utils/processLine.js +1 -2
- package/dist/utils/processLine.js.map +1 -1
- package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
- package/dist/utils/renderDiffWithHighlighter.js +4 -5
- package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
- package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
- package/dist/utils/renderFileWithHighlighter.js +1 -2
- package/dist/utils/renderFileWithHighlighter.js.map +1 -1
- package/dist/utils/resolveConflict.d.ts.map +1 -1
- package/dist/utils/resolveConflict.js +1 -2
- package/dist/utils/resolveConflict.js.map +1 -1
- package/dist/utils/resolveRegion.d.ts.map +1 -1
- package/dist/utils/resolveRegion.js +1 -1
- package/dist/utils/resolveRegion.js.map +1 -1
- package/dist/utils/roundToDevicePixel.d.ts.map +1 -1
- package/dist/utils/roundToDevicePixel.js +1 -1
- package/dist/utils/roundToDevicePixel.js.map +1 -1
- package/dist/utils/scrollbarGutter.d.ts.map +1 -1
- package/dist/utils/scrollbarGutter.js +1 -2
- package/dist/utils/scrollbarGutter.js.map +1 -1
- package/dist/utils/setLanguageOverride.d.ts.map +1 -1
- package/dist/utils/setLanguageOverride.js +1 -1
- package/dist/utils/setLanguageOverride.js.map +1 -1
- package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
- package/dist/utils/setWrapperNodeProps.js +1 -2
- package/dist/utils/setWrapperNodeProps.js.map +1 -1
- package/dist/utils/shouldUseTokenTransformer.d.ts.map +1 -1
- package/dist/utils/shouldUseTokenTransformer.js +1 -1
- package/dist/utils/shouldUseTokenTransformer.js.map +1 -1
- package/dist/utils/splitFileContents.d.ts.map +1 -1
- package/dist/utils/splitFileContents.js +1 -2
- package/dist/utils/splitFileContents.js.map +1 -1
- package/dist/utils/trimPatchContext.d.ts.map +1 -1
- package/dist/utils/trimPatchContext.js +1 -2
- package/dist/utils/trimPatchContext.js.map +1 -1
- package/dist/utils/updateDiffHunks.d.ts +6 -1
- package/dist/utils/updateDiffHunks.d.ts.map +1 -1
- package/dist/utils/updateDiffHunks.js +44 -3
- package/dist/utils/updateDiffHunks.js.map +1 -1
- package/dist/utils/virtualDiffLayout.d.ts.map +1 -1
- package/dist/utils/virtualDiffLayout.js +1 -2
- package/dist/utils/virtualDiffLayout.js.map +1 -1
- package/dist/utils/wrapTokenFragments.d.ts +1 -1
- package/dist/utils/wrapTokenFragments.d.ts.map +1 -1
- package/dist/utils/wrapTokenFragments.js +1 -2
- package/dist/utils/wrapTokenFragments.js.map +1 -1
- package/dist/worker/WorkerPoolManager.d.ts +7 -2
- package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
- package/dist/worker/WorkerPoolManager.js +83 -20
- package/dist/worker/WorkerPoolManager.js.map +1 -1
- package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
- package/dist/worker/getOrCreateWorkerPoolSingleton.js +1 -2
- package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -1
- package/dist/worker/index.d.ts +2 -2
- package/dist/worker/index.js +1 -2
- package/dist/worker/types.d.ts +7 -1
- package/dist/worker/types.d.ts.map +1 -1
- package/dist/worker/wasm-B9ZqxnKj.js +8 -0
- package/dist/worker/wasm-B9ZqxnKj.js.map +1 -0
- package/dist/worker/worker-portable.js +2784 -6406
- package/dist/worker/worker-portable.js.map +1 -1
- package/dist/worker/worker.js +94 -126
- package/dist/worker/worker.js.map +1 -1
- package/package.json +13 -14
- package/dist/worker/wasm-qE0LgnY3.js +0 -10
- package/dist/worker/wasm-qE0LgnY3.js.map +0 -1
package/dist/editor/selection.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { createSegmenter, endsWithLineBreak, getGraphemeSegmenter } from "./utils.js";
|
|
1
2
|
import { applyDocumentChangeToLineAnnotations } from "./lineAnnotations.js";
|
|
2
|
-
|
|
3
3
|
//#region src/editor/selection.ts
|
|
4
4
|
const DirectionBackward = -1;
|
|
5
5
|
const DirectionNone = 0;
|
|
@@ -7,7 +7,7 @@ const DirectionForward = 1;
|
|
|
7
7
|
/**
|
|
8
8
|
* Converts a selection from a web selection to an editor selection.
|
|
9
9
|
*/
|
|
10
|
-
function convertSelection(range, direction =
|
|
10
|
+
function convertSelection(range, direction = 0) {
|
|
11
11
|
const start = boundaryToPosition(range.startContainer, range.startOffset);
|
|
12
12
|
const end = boundaryToPosition(range.endContainer, range.endOffset);
|
|
13
13
|
if (start === null || end === null) return;
|
|
@@ -81,31 +81,28 @@ function mapCursorMove(textDocument, selections, shortcut) {
|
|
|
81
81
|
return selections.map((selection) => {
|
|
82
82
|
let { line, character } = shortcut === "up" || shortcut === "left" ? selection.start : selection.end;
|
|
83
83
|
if (shortcut === "textStart" || shortcut === "start" || shortcut === "end") {
|
|
84
|
+
const caret = getCaretPosition(selection);
|
|
85
|
+
line = caret.line;
|
|
86
|
+
character = caret.character;
|
|
84
87
|
if (shortcut === "textStart") {
|
|
85
88
|
const indent = getLeadingSpaces(textDocument.getLineText(line));
|
|
86
89
|
character = character === indent ? 0 : indent;
|
|
87
90
|
} else character = shortcut === "start" ? 0 : textDocument.getLineLength(line);
|
|
88
|
-
if (selection.direction === DirectionBackward) line = selection.start.line;
|
|
89
|
-
else line = selection.end.line;
|
|
90
91
|
} else if (shortcut === "up") line = Math.max(0, line - 1);
|
|
91
92
|
else if (shortcut === "down") line = Math.min(Math.max(lineCount - 1, 0), line + 1);
|
|
92
93
|
else if (isCollapsedSelection(selection)) {
|
|
93
94
|
const lineLength = textDocument.getLineLength(line);
|
|
94
95
|
character = Math.min(character, lineLength);
|
|
95
96
|
if (shortcut === "left") {
|
|
96
|
-
character
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
line = Math.max(0, line - 1);
|
|
97
|
+
if (character > 0) character = stepCharacterByGrapheme(textDocument, line, character, false);
|
|
98
|
+
else if (line > 0) {
|
|
99
|
+
line = line - 1;
|
|
100
100
|
character = textDocument.getLineLength(line);
|
|
101
101
|
}
|
|
102
|
-
} else
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
line = Math.min(Math.max(lineCount - 1, 0), line + 1);
|
|
107
|
-
character = 0;
|
|
108
|
-
}
|
|
102
|
+
} else if (character < lineLength) character = stepCharacterByGrapheme(textDocument, line, character, true);
|
|
103
|
+
else if (line < lineCount - 1) {
|
|
104
|
+
line = line + 1;
|
|
105
|
+
character = 0;
|
|
109
106
|
}
|
|
110
107
|
}
|
|
111
108
|
const pos = {
|
|
@@ -115,7 +112,7 @@ function mapCursorMove(textDocument, selections, shortcut) {
|
|
|
115
112
|
return {
|
|
116
113
|
start: pos,
|
|
117
114
|
end: pos,
|
|
118
|
-
direction:
|
|
115
|
+
direction: 0
|
|
119
116
|
};
|
|
120
117
|
});
|
|
121
118
|
}
|
|
@@ -124,20 +121,19 @@ function mapCursorMove(textDocument, selections, shortcut) {
|
|
|
124
121
|
*/
|
|
125
122
|
function mapSelectionShift(textDocument, selections, shortcut) {
|
|
126
123
|
return selections.map((selection) => {
|
|
127
|
-
const
|
|
128
|
-
const focusPosition = textDocument.positionAt(focusOffset);
|
|
124
|
+
const focusPosition = selection.direction === -1 ? selection.start : selection.end;
|
|
129
125
|
const [movedFocusSelection] = mapCursorMove(textDocument, [{
|
|
130
126
|
start: focusPosition,
|
|
131
127
|
end: focusPosition,
|
|
132
|
-
direction:
|
|
128
|
+
direction: 0
|
|
133
129
|
}], shortcut);
|
|
134
|
-
return
|
|
130
|
+
return createSelectionFrom(selection, movedFocusSelection);
|
|
135
131
|
});
|
|
136
132
|
}
|
|
137
133
|
/**
|
|
138
134
|
* Applies a text change to the given text document
|
|
139
135
|
*/
|
|
140
|
-
function applyTextChangeToSelections(textDocument, selections, edit, lineAnnotations, tabSize = 2) {
|
|
136
|
+
function applyTextChangeToSelections(textDocument, selections, edit, lineAnnotations, tabSize = 2, undoBoundary = false) {
|
|
141
137
|
if (selections[selections.length - 1] === void 0) return { nextSelections: [] };
|
|
142
138
|
const selectionPositions = [];
|
|
143
139
|
for (const selection of selections) selectionPositions.push(selection.start, selection.end);
|
|
@@ -202,7 +198,7 @@ function applyTextChangeToSelections(textDocument, selections, edit, lineAnnotat
|
|
|
202
198
|
};
|
|
203
199
|
}
|
|
204
200
|
finalizeMergedGroup();
|
|
205
|
-
const change = textDocument.applyResolvedEdits(edits, true, selections);
|
|
201
|
+
const change = textDocument.applyResolvedEdits(edits, true, selections, void 0, undoBoundary);
|
|
206
202
|
const nextSelections = createSelectionsFromOffsetPairs(textDocument, nextSelectionOffsets.map((offsets) => {
|
|
207
203
|
if (offsets === void 0) throw new Error("Missing next selection offsets");
|
|
208
204
|
return offsets;
|
|
@@ -218,9 +214,27 @@ function applyTextChangeToSelections(textDocument, selections, edit, lineAnnotat
|
|
|
218
214
|
};
|
|
219
215
|
}
|
|
220
216
|
/**
|
|
217
|
+
* Returns the next anchor/focus offsets after replacing a selection range.
|
|
218
|
+
* When the inserted text still contains the original selection (auto-surround),
|
|
219
|
+
* the inner range is reselected to match VS Code/CodeMirror behavior.
|
|
220
|
+
*/
|
|
221
|
+
function getNextSelectionOffsetPairAfterReplace(textDocument, entry, offsetDelta, newText) {
|
|
222
|
+
const insertStart = entry.start + offsetDelta;
|
|
223
|
+
const insertEnd = insertStart + newText.length;
|
|
224
|
+
if (entry.end - entry.start > 0) {
|
|
225
|
+
const originalText = textDocument.getText().slice(entry.start, entry.end);
|
|
226
|
+
const preservedOffset = newText.indexOf(originalText);
|
|
227
|
+
if (preservedOffset !== -1 && preservedOffset + originalText.length <= newText.length) {
|
|
228
|
+
const rangeStart = insertStart + preservedOffset;
|
|
229
|
+
return [rangeStart, rangeStart + originalText.length];
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return [insertEnd, insertEnd];
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
221
235
|
* Applies a text replace to multiple selections.
|
|
222
236
|
*/
|
|
223
|
-
function applyTextReplaceToSelections(textDocument, selections, texts, lineAnnotations) {
|
|
237
|
+
function applyTextReplaceToSelections(textDocument, selections, texts, lineAnnotations, undoBoundary = false) {
|
|
224
238
|
if (selections.length !== texts.length) throw new Error("Selection text replacements must match the selection count");
|
|
225
239
|
const selectionPositions = [];
|
|
226
240
|
for (const selection of selections) selectionPositions.push(selection.start, selection.end);
|
|
@@ -247,12 +261,12 @@ function applyTextReplaceToSelections(textDocument, selections, texts, lineAnnot
|
|
|
247
261
|
});
|
|
248
262
|
const allDeletes = texts.every((text) => text === "");
|
|
249
263
|
let edits;
|
|
250
|
-
const
|
|
264
|
+
const nextSelectionOffsetPairs = Array.from({ length: selections.length });
|
|
251
265
|
if (allDeletes) {
|
|
252
266
|
edits = [];
|
|
253
267
|
let hasEffect = false;
|
|
254
268
|
for (const entry of ordered) {
|
|
255
|
-
|
|
269
|
+
nextSelectionOffsetPairs[entry.index] = [entry.end, entry.end];
|
|
256
270
|
if (entry.start >= entry.end) continue;
|
|
257
271
|
hasEffect = true;
|
|
258
272
|
const last = edits[edits.length - 1];
|
|
@@ -282,7 +296,7 @@ function applyTextReplaceToSelections(textDocument, selections, texts, lineAnnot
|
|
|
282
296
|
break;
|
|
283
297
|
}
|
|
284
298
|
if (next === caret) next += delta;
|
|
285
|
-
|
|
299
|
+
nextSelectionOffsetPairs[entry.index] = [next, next];
|
|
286
300
|
}
|
|
287
301
|
} else {
|
|
288
302
|
edits = [];
|
|
@@ -297,12 +311,15 @@ function applyTextReplaceToSelections(textDocument, selections, texts, lineAnnot
|
|
|
297
311
|
end: entry.end,
|
|
298
312
|
text: newText
|
|
299
313
|
});
|
|
300
|
-
|
|
314
|
+
nextSelectionOffsetPairs[entry.index] = getNextSelectionOffsetPairAfterReplace(textDocument, entry, offsetDelta, newText);
|
|
301
315
|
offsetDelta += newText.length - (entry.end - entry.start);
|
|
302
316
|
}
|
|
303
317
|
}
|
|
304
|
-
const change = textDocument.applyResolvedEdits(edits, true, selections);
|
|
305
|
-
const nextSelections = createSelectionsFromOffsetPairs(textDocument,
|
|
318
|
+
const change = textDocument.applyResolvedEdits(edits, true, selections, void 0, undoBoundary);
|
|
319
|
+
const nextSelections = createSelectionsFromOffsetPairs(textDocument, nextSelectionOffsetPairs.map((offsets) => {
|
|
320
|
+
if (offsets === void 0) throw new Error("Missing next selection offsets");
|
|
321
|
+
return offsets;
|
|
322
|
+
}));
|
|
306
323
|
textDocument.setLastUndoSelectionsAfter(nextSelections);
|
|
307
324
|
if (change !== void 0 && lineAnnotations !== void 0) {
|
|
308
325
|
const nextLineAnnotations = applyDocumentChangeToLineAnnotations(change, lineAnnotations);
|
|
@@ -313,6 +330,47 @@ function applyTextReplaceToSelections(textDocument, selections, texts, lineAnnot
|
|
|
313
330
|
change
|
|
314
331
|
};
|
|
315
332
|
}
|
|
333
|
+
const AUTO_SURROUND_CLOSE_CHARS = /* @__PURE__ */ new Map([
|
|
334
|
+
["'", "'"],
|
|
335
|
+
["\"", "\""],
|
|
336
|
+
["`", "`"],
|
|
337
|
+
["{", "}"],
|
|
338
|
+
["[", "]"],
|
|
339
|
+
["<", ">"],
|
|
340
|
+
["(", ")"]
|
|
341
|
+
]);
|
|
342
|
+
const AUTO_SURROUND_QUOTE_CHARS = /* @__PURE__ */ new Set([
|
|
343
|
+
"'",
|
|
344
|
+
"\"",
|
|
345
|
+
"`"
|
|
346
|
+
]);
|
|
347
|
+
const AUTO_SURROUND_BRACKET_CHARS = /* @__PURE__ */ new Set([
|
|
348
|
+
"{",
|
|
349
|
+
"[",
|
|
350
|
+
"(",
|
|
351
|
+
"<"
|
|
352
|
+
]);
|
|
353
|
+
function shouldAutoSurroundChar(autoSurround, char) {
|
|
354
|
+
if (autoSurround === "never") return false;
|
|
355
|
+
if (autoSurround === "brackets") return AUTO_SURROUND_BRACKET_CHARS.has(char);
|
|
356
|
+
if (autoSurround === "quotes") return AUTO_SURROUND_QUOTE_CHARS.has(char);
|
|
357
|
+
return true;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Returns per-selection replacement text when typing a surround character over
|
|
361
|
+
* non-collapsed selections, matching VS Code auto-surround behavior.
|
|
362
|
+
*/
|
|
363
|
+
function getAutoSurroundReplacementTexts(textDocument, selections, char, autoSurround) {
|
|
364
|
+
if (char.length !== 1 || selections.length === 0) return;
|
|
365
|
+
const closeChar = AUTO_SURROUND_CLOSE_CHARS.get(char);
|
|
366
|
+
if (closeChar === void 0 || !shouldAutoSurroundChar(autoSurround, char)) return;
|
|
367
|
+
const replacements = [];
|
|
368
|
+
for (const selection of selections) {
|
|
369
|
+
if (isCollapsedSelection(selection)) return;
|
|
370
|
+
replacements.push(char + textDocument.getText(selection) + closeChar);
|
|
371
|
+
}
|
|
372
|
+
return replacements;
|
|
373
|
+
}
|
|
316
374
|
/**
|
|
317
375
|
* Swaps the two characters adjacent to a collapsed selection, matching browser
|
|
318
376
|
* insertTranspose (Ctrl+T) behavior.
|
|
@@ -329,36 +387,48 @@ function applyTransposeToSelections(textDocument, selections, lineAnnotations) {
|
|
|
329
387
|
}
|
|
330
388
|
const { line, character } = selection.start;
|
|
331
389
|
const offset = anchor;
|
|
332
|
-
const
|
|
390
|
+
const lineText = textDocument.getLineText(line);
|
|
391
|
+
const lineLength = lineText.length;
|
|
392
|
+
const lineStart = offset - character;
|
|
393
|
+
const graphemeStarts = getLineGraphemeStarts(lineText);
|
|
333
394
|
let edit;
|
|
334
395
|
if (character > 0 && character < lineLength) {
|
|
396
|
+
const before = findClusterBreak(lineText, character, false, graphemeStarts);
|
|
397
|
+
const after = findClusterBreak(lineText, character, true, graphemeStarts);
|
|
335
398
|
edit = {
|
|
336
|
-
start:
|
|
337
|
-
end:
|
|
338
|
-
text:
|
|
399
|
+
start: lineStart + before,
|
|
400
|
+
end: lineStart + after,
|
|
401
|
+
text: lineText.slice(character, after) + lineText.slice(before, character)
|
|
339
402
|
};
|
|
340
|
-
nextOffsetPairs.push([
|
|
341
|
-
} else if (character === lineLength &&
|
|
403
|
+
nextOffsetPairs.push([lineStart + after, lineStart + after]);
|
|
404
|
+
} else if (character === lineLength && graphemeStarts.length >= 2) {
|
|
405
|
+
const lastStart = graphemeStarts[graphemeStarts.length - 1];
|
|
406
|
+
const secondLastStart = graphemeStarts[graphemeStarts.length - 2];
|
|
342
407
|
edit = {
|
|
343
|
-
start:
|
|
408
|
+
start: lineStart + secondLastStart,
|
|
344
409
|
end: offset,
|
|
345
|
-
text:
|
|
410
|
+
text: lineText.slice(lastStart, lineLength) + lineText.slice(secondLastStart, lastStart)
|
|
346
411
|
};
|
|
347
412
|
nextOffsetPairs.push([offset, offset]);
|
|
348
413
|
} else if (character === 0 && line > 0 && lineLength > 0) {
|
|
349
414
|
const prevLine = line - 1;
|
|
350
|
-
const
|
|
415
|
+
const prevLineText = textDocument.getLineText(prevLine);
|
|
416
|
+
const prevLength = prevLineText.length;
|
|
351
417
|
const prevEnd = textDocument.offsetAt({
|
|
352
418
|
line: prevLine,
|
|
353
419
|
character: prevLength
|
|
354
420
|
});
|
|
355
|
-
const
|
|
421
|
+
const prevGraphemeStart = prevLength > 0 ? findClusterBreak(prevLineText, prevLength, false, getLineGraphemeStarts(prevLineText)) : prevLength;
|
|
422
|
+
const firstEnd = findClusterBreak(lineText, 0, true, graphemeStarts);
|
|
423
|
+
const prevStart = prevEnd - (prevLength - prevGraphemeStart);
|
|
424
|
+
const newText = lineText.slice(0, firstEnd) + text.slice(prevEnd, offset) + prevLineText.slice(prevGraphemeStart, prevLength);
|
|
356
425
|
edit = {
|
|
357
426
|
start: prevStart,
|
|
358
|
-
end: offset +
|
|
359
|
-
text:
|
|
427
|
+
end: offset + firstEnd,
|
|
428
|
+
text: newText
|
|
360
429
|
};
|
|
361
|
-
|
|
430
|
+
const caret = prevStart + newText.length;
|
|
431
|
+
nextOffsetPairs.push([caret, caret]);
|
|
362
432
|
} else {
|
|
363
433
|
nextOffsetPairs.push([anchor, focus]);
|
|
364
434
|
continue;
|
|
@@ -391,7 +461,7 @@ function applyDeleteHardLineForwardToSelections(textDocument, selections, lineAn
|
|
|
391
461
|
return {
|
|
392
462
|
start: range.start,
|
|
393
463
|
end: range.end,
|
|
394
|
-
direction:
|
|
464
|
+
direction: 0
|
|
395
465
|
};
|
|
396
466
|
});
|
|
397
467
|
return applyTextReplaceToSelections(textDocument, deleteSelections, deleteSelections.map(() => ""), lineAnnotations);
|
|
@@ -405,7 +475,7 @@ function applyDeleteSoftLineBackwardToSelections(textDocument, selections, getSo
|
|
|
405
475
|
if (!isCollapsedSelection(selection)) return {
|
|
406
476
|
start: selection.start,
|
|
407
477
|
end: selection.end,
|
|
408
|
-
direction:
|
|
478
|
+
direction: 0
|
|
409
479
|
};
|
|
410
480
|
const caret = getCaretPosition(selection);
|
|
411
481
|
const { line, character } = caret;
|
|
@@ -419,12 +489,12 @@ function applyDeleteSoftLineBackwardToSelections(textDocument, selections, getSo
|
|
|
419
489
|
line,
|
|
420
490
|
character
|
|
421
491
|
},
|
|
422
|
-
direction:
|
|
492
|
+
direction: 0
|
|
423
493
|
};
|
|
424
494
|
if (line === 0) return {
|
|
425
495
|
start: caret,
|
|
426
496
|
end: caret,
|
|
427
|
-
direction:
|
|
497
|
+
direction: 0
|
|
428
498
|
};
|
|
429
499
|
const prevLineLength = textDocument.getLineLength(line - 1);
|
|
430
500
|
return {
|
|
@@ -436,7 +506,7 @@ function applyDeleteSoftLineBackwardToSelections(textDocument, selections, getSo
|
|
|
436
506
|
line,
|
|
437
507
|
character: 0
|
|
438
508
|
},
|
|
439
|
-
direction:
|
|
509
|
+
direction: 0
|
|
440
510
|
};
|
|
441
511
|
});
|
|
442
512
|
return applyTextReplaceToSelections(textDocument, deleteSelections, deleteSelections.map(() => ""), lineAnnotations);
|
|
@@ -451,7 +521,77 @@ function applyDeleteWordBackwardToSelections(textDocument, selections, lineAnnot
|
|
|
451
521
|
return {
|
|
452
522
|
start,
|
|
453
523
|
end,
|
|
454
|
-
direction:
|
|
524
|
+
direction: 0
|
|
525
|
+
};
|
|
526
|
+
});
|
|
527
|
+
return applyTextReplaceToSelections(textDocument, deleteSelections, deleteSelections.map(() => ""), lineAnnotations);
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Resolves the document range deleted by Backspace or Delete at a collapsed
|
|
531
|
+
* caret. Non-collapsed selections delete their selected text instead.
|
|
532
|
+
*/
|
|
533
|
+
function resolveDeleteCharacterRange(textDocument, selection, forward) {
|
|
534
|
+
if (!isCollapsedSelection(selection)) return [selection.start, selection.end];
|
|
535
|
+
const caret = getCaretPosition(selection);
|
|
536
|
+
let { line, character } = caret;
|
|
537
|
+
const lineLength = textDocument.getLineLength(line);
|
|
538
|
+
const lineCount = textDocument.lineCount;
|
|
539
|
+
character = Math.min(character, lineLength);
|
|
540
|
+
if (forward) {
|
|
541
|
+
if (character < lineLength) return [{
|
|
542
|
+
line,
|
|
543
|
+
character
|
|
544
|
+
}, {
|
|
545
|
+
line,
|
|
546
|
+
character: stepCharacterByGrapheme(textDocument, line, character, true)
|
|
547
|
+
}];
|
|
548
|
+
if (line < lineCount - 1) return [{
|
|
549
|
+
line,
|
|
550
|
+
character: lineLength
|
|
551
|
+
}, {
|
|
552
|
+
line: line + 1,
|
|
553
|
+
character: 0
|
|
554
|
+
}];
|
|
555
|
+
return [caret, caret];
|
|
556
|
+
}
|
|
557
|
+
if (character > 0) return [{
|
|
558
|
+
line,
|
|
559
|
+
character: stepCharacterByGrapheme(textDocument, line, character, false)
|
|
560
|
+
}, {
|
|
561
|
+
line,
|
|
562
|
+
character
|
|
563
|
+
}];
|
|
564
|
+
if (line > 0) {
|
|
565
|
+
const prevLineLength = textDocument.getLineLength(line - 1);
|
|
566
|
+
return [{
|
|
567
|
+
line: line - 1,
|
|
568
|
+
character: prevLineLength
|
|
569
|
+
}, {
|
|
570
|
+
line,
|
|
571
|
+
character: 0
|
|
572
|
+
}];
|
|
573
|
+
}
|
|
574
|
+
return [caret, caret];
|
|
575
|
+
}
|
|
576
|
+
/**
|
|
577
|
+
* Deletes one grapheme (or selected text) at each selection.
|
|
578
|
+
*/
|
|
579
|
+
function applyDeleteCharacterToSelections(textDocument, selections, forward, lineAnnotations, tabSize = 2) {
|
|
580
|
+
const deleteSelections = selections.map((selection) => {
|
|
581
|
+
let [start, end] = resolveDeleteCharacterRange(textDocument, selection, forward);
|
|
582
|
+
if (!forward && isCollapsedSelection(selection)) {
|
|
583
|
+
const normalized = normalizeLeadingIndentForChange(textDocument, {
|
|
584
|
+
start: textDocument.offsetAt(start),
|
|
585
|
+
end: textDocument.offsetAt(end),
|
|
586
|
+
text: ""
|
|
587
|
+
}, tabSize);
|
|
588
|
+
start = textDocument.positionAt(normalized.start);
|
|
589
|
+
end = textDocument.positionAt(normalized.end);
|
|
590
|
+
}
|
|
591
|
+
return {
|
|
592
|
+
start,
|
|
593
|
+
end,
|
|
594
|
+
direction: 0
|
|
455
595
|
};
|
|
456
596
|
});
|
|
457
597
|
return applyTextReplaceToSelections(textDocument, deleteSelections, deleteSelections.map(() => ""), lineAnnotations);
|
|
@@ -467,7 +607,7 @@ function isCollapsedSelection(selection) {
|
|
|
467
607
|
*/
|
|
468
608
|
function getCaretPosition(selection) {
|
|
469
609
|
const { start, end, direction } = selection;
|
|
470
|
-
return direction ===
|
|
610
|
+
return direction === -1 ? start : end;
|
|
471
611
|
}
|
|
472
612
|
/**
|
|
473
613
|
* Checks if a line is editable.
|
|
@@ -497,7 +637,7 @@ function comparePosition(a, b) {
|
|
|
497
637
|
* Creates a selection from anchor and focus offsets.
|
|
498
638
|
*/
|
|
499
639
|
function createSelectionFromAnchorAndFocusOffsets(textDocument, anchorOffset, focusOffset) {
|
|
500
|
-
const direction = anchorOffset === focusOffset ?
|
|
640
|
+
const direction = anchorOffset === focusOffset ? 0 : anchorOffset < focusOffset ? 1 : -1;
|
|
501
641
|
const start = Math.min(anchorOffset, focusOffset);
|
|
502
642
|
const end = Math.max(anchorOffset, focusOffset);
|
|
503
643
|
return {
|
|
@@ -507,10 +647,44 @@ function createSelectionFromAnchorAndFocusOffsets(textDocument, anchorOffset, fo
|
|
|
507
647
|
};
|
|
508
648
|
}
|
|
509
649
|
/**
|
|
650
|
+
* Maps a single offset from the pre-edit document into the post-edit document.
|
|
651
|
+
* `edits` are resolved edits in pre-edit offsets, sorted ascending and
|
|
652
|
+
* non-overlapping. An offset at or after an edit's start shifts to the end of
|
|
653
|
+
* that edit's replacement (right gravity), so text inserted at the caret pushes
|
|
654
|
+
* the caret past it; an offset strictly before an edit is only shifted by the
|
|
655
|
+
* net length change of the edits that precede it.
|
|
656
|
+
*/
|
|
657
|
+
function remapOffsetThroughEdits(offset, edits) {
|
|
658
|
+
let delta = 0;
|
|
659
|
+
for (const edit of edits) {
|
|
660
|
+
if (offset < edit.start) break;
|
|
661
|
+
if (offset >= edit.end) delta += edit.text.length - (edit.end - edit.start);
|
|
662
|
+
else return edit.start + delta + edit.text.length;
|
|
663
|
+
}
|
|
664
|
+
return offset + delta;
|
|
665
|
+
}
|
|
666
|
+
/**
|
|
667
|
+
* Re-anchors selections after a batch of text edits has been applied, so the
|
|
668
|
+
* caret keeps pointing at the same logical location in the changed buffer.
|
|
669
|
+
*
|
|
670
|
+
* `selectionOffsets` (one `[start, end]` pair per selection) and `edits` are
|
|
671
|
+
* measured in the PRE-edit document; the returned selections are built from
|
|
672
|
+
* `textDocument`, which must already reflect the applied edits. Selection
|
|
673
|
+
* direction is preserved by remapping each edge and re-deriving anchor/focus.
|
|
674
|
+
*/
|
|
675
|
+
function remapSelectionsAfterEdits(textDocument, selections, selectionOffsets, edits) {
|
|
676
|
+
return selections.map((selection, index) => {
|
|
677
|
+
const [startOffset, endOffset] = selectionOffsets[index];
|
|
678
|
+
const nextStart = remapOffsetThroughEdits(startOffset, edits);
|
|
679
|
+
const nextEnd = remapOffsetThroughEdits(endOffset, edits);
|
|
680
|
+
return createSelectionFromAnchorAndFocusOffsets(textDocument, selection.direction === -1 ? nextEnd : nextStart, selection.direction === -1 ? nextStart : nextEnd);
|
|
681
|
+
});
|
|
682
|
+
}
|
|
683
|
+
/**
|
|
510
684
|
* Creates a selection from a anchor and focus selection.
|
|
511
685
|
*/
|
|
512
686
|
function createSelectionFrom(anchorSelection, focusSelection) {
|
|
513
|
-
const anchor = anchorSelection.direction ===
|
|
687
|
+
const anchor = anchorSelection.direction === -1 ? anchorSelection.end : anchorSelection.start;
|
|
514
688
|
const currentStartOrder = comparePosition(anchor, focusSelection.start);
|
|
515
689
|
const currentEndOrder = comparePosition(anchor, focusSelection.end);
|
|
516
690
|
let focus = focusSelection.end;
|
|
@@ -521,7 +695,7 @@ function createSelectionFrom(anchorSelection, focusSelection) {
|
|
|
521
695
|
return {
|
|
522
696
|
start: anchorVsFocus <= 0 ? anchor : focus,
|
|
523
697
|
end: anchorVsFocus <= 0 ? focus : anchor,
|
|
524
|
-
direction: anchorVsFocus === 0 ?
|
|
698
|
+
direction: anchorVsFocus === 0 ? 0 : anchorVsFocus < 0 ? 1 : -1
|
|
525
699
|
};
|
|
526
700
|
}
|
|
527
701
|
/**
|
|
@@ -534,22 +708,22 @@ function extendSelection(original, target) {
|
|
|
534
708
|
if (leftExtended && !rightExtended) return {
|
|
535
709
|
start: target.start,
|
|
536
710
|
end: original.end,
|
|
537
|
-
direction:
|
|
711
|
+
direction: -1
|
|
538
712
|
};
|
|
539
713
|
if (rightExtended && !leftExtended) return {
|
|
540
714
|
start: original.start,
|
|
541
715
|
end: target.end,
|
|
542
|
-
direction:
|
|
716
|
+
direction: 1
|
|
543
717
|
};
|
|
544
|
-
if (original.direction ===
|
|
718
|
+
if (original.direction === -1) return {
|
|
545
719
|
start: target.start,
|
|
546
720
|
end: original.end,
|
|
547
|
-
direction: comparePosition(target.start, original.end) === 0 ?
|
|
721
|
+
direction: comparePosition(target.start, original.end) === 0 ? 0 : -1
|
|
548
722
|
};
|
|
549
723
|
return {
|
|
550
724
|
start: original.start,
|
|
551
725
|
end: target.end,
|
|
552
|
-
direction: comparePosition(original.start, target.end) === 0 ?
|
|
726
|
+
direction: comparePosition(original.start, target.end) === 0 ? 0 : 1
|
|
553
727
|
};
|
|
554
728
|
}
|
|
555
729
|
/**
|
|
@@ -565,30 +739,39 @@ function extendSelections(selections, target) {
|
|
|
565
739
|
*/
|
|
566
740
|
function mergeOverlappingSelections(selections) {
|
|
567
741
|
if (selections.length <= 1) return selections;
|
|
568
|
-
const
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
742
|
+
const ordered = selections.map((selection, index) => ({
|
|
743
|
+
index,
|
|
744
|
+
selection
|
|
745
|
+
})).sort((a, b) => {
|
|
746
|
+
const startOrder = comparePosition(a.selection.start, b.selection.start);
|
|
747
|
+
if (startOrder !== 0) return startOrder;
|
|
748
|
+
const endOrder = comparePosition(a.selection.end, b.selection.end);
|
|
749
|
+
return endOrder !== 0 ? endOrder : a.index - b.index;
|
|
750
|
+
});
|
|
751
|
+
const merged = [];
|
|
752
|
+
let current = ordered[0];
|
|
753
|
+
for (const entry of ordered.slice(1)) {
|
|
754
|
+
if (selectionIntersects(current.selection, entry.selection)) {
|
|
755
|
+
const latest = entry.index > current.index ? entry : current;
|
|
756
|
+
const start = comparePosition(entry.selection.start, current.selection.start) < 0 ? entry.selection.start : current.selection.start;
|
|
757
|
+
const end = comparePosition(entry.selection.end, current.selection.end) > 0 ? entry.selection.end : current.selection.end;
|
|
758
|
+
let direction = latest.selection.direction;
|
|
759
|
+
if (direction === 0 && comparePosition(start, end) !== 0) direction = comparePosition(latest.selection.start, start) === 0 ? -1 : 1;
|
|
760
|
+
current = {
|
|
761
|
+
index: latest.index,
|
|
762
|
+
selection: {
|
|
763
|
+
direction,
|
|
764
|
+
end,
|
|
765
|
+
start
|
|
766
|
+
}
|
|
767
|
+
};
|
|
768
|
+
continue;
|
|
581
769
|
}
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
if (previous !== void 0 && selectionIntersects(previous, selection) || next !== void 0 && selectionIntersects(next, selection)) continue;
|
|
585
|
-
accepted.splice(left, 0, {
|
|
586
|
-
index: i,
|
|
587
|
-
selection
|
|
588
|
-
});
|
|
589
|
-
selected.add(i);
|
|
770
|
+
merged.push(current);
|
|
771
|
+
current = entry;
|
|
590
772
|
}
|
|
591
|
-
|
|
773
|
+
merged.push(current);
|
|
774
|
+
return merged.sort((a, b) => a.index - b.index).map(({ selection }) => selection);
|
|
592
775
|
}
|
|
593
776
|
/**
|
|
594
777
|
* Finds the next matching word and updates the selections.
|
|
@@ -622,36 +805,182 @@ function getDocumentFullSelection(textDocument) {
|
|
|
622
805
|
line: lastLine,
|
|
623
806
|
character: textDocument.getLineLength(lastLine)
|
|
624
807
|
},
|
|
625
|
-
direction:
|
|
808
|
+
direction: 1
|
|
626
809
|
};
|
|
627
810
|
}
|
|
628
811
|
/**
|
|
629
812
|
* Get the boundary selection of the document.
|
|
630
813
|
*/
|
|
631
|
-
function getDocumentBoundarySelection(textDocument, atEnd) {
|
|
632
|
-
|
|
814
|
+
function getDocumentBoundarySelection(textDocument, atEnd, trimmedEndNewLine) {
|
|
815
|
+
let line = 0;
|
|
816
|
+
if (atEnd) {
|
|
817
|
+
const lastLine = textDocument.lineCount - 1;
|
|
818
|
+
line = trimmedEndNewLine === true && lastLine > 0 && textDocument.getLineLength(lastLine) === 0 ? lastLine - 1 : lastLine;
|
|
819
|
+
}
|
|
820
|
+
const character = atEnd ? textDocument.getLineLength(line) : 0;
|
|
633
821
|
const start = {
|
|
634
822
|
line,
|
|
635
|
-
character
|
|
823
|
+
character
|
|
636
824
|
};
|
|
637
825
|
return {
|
|
638
826
|
start,
|
|
639
827
|
end: start,
|
|
640
|
-
direction:
|
|
828
|
+
direction: 1
|
|
641
829
|
};
|
|
642
830
|
}
|
|
643
831
|
/**
|
|
644
|
-
*
|
|
832
|
+
* Resolves the document offset range each selection contributes to the
|
|
833
|
+
* clipboard, ordered by position. A collapsed selection contributes its whole
|
|
834
|
+
* logical line including the trailing line break; the final line has no
|
|
835
|
+
* trailing break to include. A ranged selection contributes the selected text.
|
|
836
|
+
*/
|
|
837
|
+
function resolveClipboardRegions(textDocument, selections) {
|
|
838
|
+
return selections.map((selection) => {
|
|
839
|
+
if (isCollapsedSelection(selection)) {
|
|
840
|
+
const line = selection.start.line;
|
|
841
|
+
return {
|
|
842
|
+
start: textDocument.offsetAt({
|
|
843
|
+
line,
|
|
844
|
+
character: 0
|
|
845
|
+
}),
|
|
846
|
+
end: line < textDocument.lineCount - 1 ? textDocument.offsetAt({
|
|
847
|
+
line: line + 1,
|
|
848
|
+
character: 0
|
|
849
|
+
}) : textDocument.offsetAt({
|
|
850
|
+
line,
|
|
851
|
+
character: textDocument.getLineLength(line)
|
|
852
|
+
})
|
|
853
|
+
};
|
|
854
|
+
}
|
|
855
|
+
const start = textDocument.offsetAt(selection.start);
|
|
856
|
+
const end = textDocument.offsetAt(selection.end);
|
|
857
|
+
return start <= end ? {
|
|
858
|
+
start,
|
|
859
|
+
end
|
|
860
|
+
} : {
|
|
861
|
+
start: end,
|
|
862
|
+
end: start
|
|
863
|
+
};
|
|
864
|
+
}).sort((a, b) => {
|
|
865
|
+
const startOrder = a.start - b.start;
|
|
866
|
+
return startOrder !== 0 ? startOrder : a.end - b.end;
|
|
867
|
+
});
|
|
868
|
+
}
|
|
869
|
+
/**
|
|
870
|
+
* Get the clipboard text of the selections for the given text document. Used by
|
|
871
|
+
* both copy and cut so the two stay in sync. Overlapping regions (e.g. several
|
|
872
|
+
* carets on one line) are merged so the same text is never emitted twice, and a
|
|
873
|
+
* line-ending separator is inserted only between regions that aren't already
|
|
874
|
+
* contiguous in the document.
|
|
645
875
|
*/
|
|
646
876
|
function getSelectionText(textDocument, selections) {
|
|
647
|
-
|
|
648
|
-
|
|
877
|
+
const regions = resolveClipboardRegions(textDocument, selections);
|
|
878
|
+
const eol = textDocument.eol;
|
|
879
|
+
let result = "";
|
|
880
|
+
let prevEnd = -1;
|
|
881
|
+
for (const region of regions) {
|
|
882
|
+
if (region.end <= region.start) continue;
|
|
883
|
+
if (region.start <= prevEnd) {
|
|
884
|
+
if (region.end > prevEnd) {
|
|
885
|
+
result += textDocument.getTextSlice(prevEnd, region.end);
|
|
886
|
+
prevEnd = region.end;
|
|
887
|
+
}
|
|
888
|
+
continue;
|
|
889
|
+
}
|
|
890
|
+
if (result.length > 0 && !endsWithLineBreak(result)) result += eol;
|
|
891
|
+
result += textDocument.getTextSlice(region.start, region.end);
|
|
892
|
+
prevEnd = region.end;
|
|
893
|
+
}
|
|
894
|
+
return result;
|
|
895
|
+
}
|
|
896
|
+
function resolveSelectionCutEdit(textDocument, selection) {
|
|
897
|
+
if (isCollapsedSelection(selection)) return resolveCollapsedSelectionCutEdit(textDocument, selection);
|
|
898
|
+
const [start, end] = comparePosition(selection.start, selection.end) <= 0 ? [selection.start, selection.end] : [selection.end, selection.start];
|
|
899
|
+
return {
|
|
900
|
+
start: textDocument.offsetAt(start),
|
|
901
|
+
end: textDocument.offsetAt(end),
|
|
902
|
+
text: ""
|
|
903
|
+
};
|
|
904
|
+
}
|
|
905
|
+
function resolveCollapsedSelectionCutEdit(textDocument, selection) {
|
|
906
|
+
const line = selection.start.line;
|
|
907
|
+
const lineStart = textDocument.offsetAt({
|
|
908
|
+
line,
|
|
909
|
+
character: 0
|
|
910
|
+
});
|
|
911
|
+
const lineEnd = textDocument.offsetAt({
|
|
912
|
+
line,
|
|
913
|
+
character: textDocument.getLineLength(line)
|
|
914
|
+
});
|
|
915
|
+
if (line < textDocument.lineCount - 1) return {
|
|
916
|
+
start: lineStart,
|
|
917
|
+
end: textDocument.offsetAt({
|
|
918
|
+
line: line + 1,
|
|
919
|
+
character: 0
|
|
920
|
+
}),
|
|
921
|
+
text: ""
|
|
922
|
+
};
|
|
923
|
+
if (line > 0) return {
|
|
924
|
+
start: textDocument.offsetAt({
|
|
925
|
+
line: line - 1,
|
|
926
|
+
character: textDocument.getLineLength(line - 1)
|
|
927
|
+
}),
|
|
928
|
+
end: lineEnd,
|
|
929
|
+
text: ""
|
|
930
|
+
};
|
|
931
|
+
return {
|
|
932
|
+
start: lineStart,
|
|
933
|
+
end: lineEnd,
|
|
934
|
+
text: ""
|
|
935
|
+
};
|
|
936
|
+
}
|
|
937
|
+
function mergeCutEdits(orderedCuts) {
|
|
938
|
+
const edits = [];
|
|
939
|
+
for (const { edit } of orderedCuts) {
|
|
940
|
+
if (edit.start >= edit.end) continue;
|
|
941
|
+
const last = edits.at(-1);
|
|
942
|
+
if (last !== void 0 && edit.start <= last.end) edits[edits.length - 1] = {
|
|
943
|
+
start: last.start,
|
|
944
|
+
end: Math.max(last.end, edit.end),
|
|
945
|
+
text: ""
|
|
946
|
+
};
|
|
947
|
+
else edits.push(edit);
|
|
948
|
+
}
|
|
949
|
+
return edits;
|
|
950
|
+
}
|
|
951
|
+
function mapCutSelectionOffsets(orderedCuts, edits) {
|
|
952
|
+
const nextOffsets = Array.from({ length: orderedCuts.length });
|
|
953
|
+
let editIndex = 0;
|
|
954
|
+
let offsetDelta = 0;
|
|
955
|
+
for (const cut of orderedCuts) {
|
|
956
|
+
while (editIndex < edits.length && cut.edit.start > edits[editIndex].end) {
|
|
957
|
+
const edit = edits[editIndex];
|
|
958
|
+
offsetDelta -= edit.end - edit.start;
|
|
959
|
+
editIndex++;
|
|
960
|
+
}
|
|
961
|
+
const edit = edits[editIndex];
|
|
962
|
+
if (edit !== void 0 && cut.edit.start >= edit.start && cut.edit.start <= edit.end) nextOffsets[cut.index] = edit.start + offsetDelta;
|
|
963
|
+
else nextOffsets[cut.index] = cut.edit.start + offsetDelta;
|
|
964
|
+
}
|
|
965
|
+
return nextOffsets;
|
|
966
|
+
}
|
|
967
|
+
function resolveSelectionCut(textDocument, selections) {
|
|
968
|
+
const orderedCuts = [...selections.map((selection, index) => ({
|
|
969
|
+
index,
|
|
970
|
+
edit: resolveSelectionCutEdit(textDocument, selection)
|
|
971
|
+
}))].sort((a, b) => {
|
|
972
|
+
const startOrder = a.edit.start - b.edit.start;
|
|
649
973
|
if (startOrder !== 0) return startOrder;
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
974
|
+
const endOrder = a.edit.end - b.edit.end;
|
|
975
|
+
if (endOrder !== 0) return endOrder;
|
|
976
|
+
return a.index - b.index;
|
|
977
|
+
});
|
|
978
|
+
const edits = mergeCutEdits(orderedCuts);
|
|
979
|
+
return {
|
|
980
|
+
text: getSelectionText(textDocument, selections),
|
|
981
|
+
edits,
|
|
982
|
+
nextSelectionOffsets: mapCutSelectionOffsets(orderedCuts, edits)
|
|
983
|
+
};
|
|
655
984
|
}
|
|
656
985
|
/**
|
|
657
986
|
* Get the anchor node and offset for a selection.
|
|
@@ -703,15 +1032,28 @@ function expandCollapsedSelectionToWord(textDocument, selection) {
|
|
|
703
1032
|
line,
|
|
704
1033
|
character: span.end
|
|
705
1034
|
},
|
|
706
|
-
direction:
|
|
1035
|
+
direction: 1
|
|
707
1036
|
};
|
|
708
1037
|
}
|
|
709
1038
|
function expandCollapsedLineWord(lineText, character) {
|
|
710
|
-
const segmenter =
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
1039
|
+
const segmenter = createSegmenter({ granularity: "word" });
|
|
1040
|
+
if (segmenter !== void 0) {
|
|
1041
|
+
for (const seg of segmenter.segment(lineText)) {
|
|
1042
|
+
if (seg.isWordLike !== true) continue;
|
|
1043
|
+
const lo = seg.index;
|
|
1044
|
+
const hi = lo + seg.segment.length;
|
|
1045
|
+
if (character >= lo && character <= hi) return {
|
|
1046
|
+
start: lo,
|
|
1047
|
+
end: hi
|
|
1048
|
+
};
|
|
1049
|
+
}
|
|
1050
|
+
return;
|
|
1051
|
+
}
|
|
1052
|
+
const wordRe = /[\p{Alphabetic}\p{Number}_]+/gu;
|
|
1053
|
+
let match;
|
|
1054
|
+
while ((match = wordRe.exec(lineText)) !== null) {
|
|
1055
|
+
const lo = match.index;
|
|
1056
|
+
const hi = lo + match[0].length;
|
|
715
1057
|
if (character >= lo && character <= hi) return {
|
|
716
1058
|
start: lo,
|
|
717
1059
|
end: hi
|
|
@@ -734,9 +1076,7 @@ function resolveDeleteWordBackwardRange(textDocument, selection) {
|
|
|
734
1076
|
}];
|
|
735
1077
|
}
|
|
736
1078
|
const lineText = textDocument.getLineText(line);
|
|
737
|
-
const graphemeStarts =
|
|
738
|
-
const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
|
|
739
|
-
for (const segment of segmenter.segment(lineText)) if (segment.index > 0) graphemeStarts.push(segment.index);
|
|
1079
|
+
const graphemeStarts = getLineGraphemeStarts(lineText);
|
|
740
1080
|
let pos = head;
|
|
741
1081
|
let match;
|
|
742
1082
|
while (pos > 0) {
|
|
@@ -766,8 +1106,58 @@ function findClusterBreak(text, pos, forward, graphemeStarts) {
|
|
|
766
1106
|
}
|
|
767
1107
|
return 0;
|
|
768
1108
|
}
|
|
1109
|
+
function getLineGraphemeStarts(lineText) {
|
|
1110
|
+
const graphemeStarts = [0];
|
|
1111
|
+
const segmenter = getGraphemeSegmenter();
|
|
1112
|
+
if (segmenter !== void 0) {
|
|
1113
|
+
for (const segment of segmenter.segment(lineText)) if (segment.index > 0) graphemeStarts.push(segment.index);
|
|
1114
|
+
return graphemeStarts;
|
|
1115
|
+
}
|
|
1116
|
+
let index = 0;
|
|
1117
|
+
for (const codePoint of lineText) {
|
|
1118
|
+
if (index > 0) graphemeStarts.push(index);
|
|
1119
|
+
index += codePoint.length;
|
|
1120
|
+
}
|
|
1121
|
+
return graphemeStarts;
|
|
1122
|
+
}
|
|
1123
|
+
function stepCharacterByGrapheme(textDocument, line, character, forward) {
|
|
1124
|
+
const lineLength = textDocument.getLineLength(line);
|
|
1125
|
+
if (forward) {
|
|
1126
|
+
if (character >= lineLength) return lineLength;
|
|
1127
|
+
const lineStart = textDocument.offsetAt({
|
|
1128
|
+
line,
|
|
1129
|
+
character: 0
|
|
1130
|
+
});
|
|
1131
|
+
const suffix = textDocument.getTextSlice(lineStart + character, lineStart + lineLength);
|
|
1132
|
+
const segmenter = getGraphemeSegmenter();
|
|
1133
|
+
if (segmenter !== void 0) {
|
|
1134
|
+
for (const segment of segmenter.segment(suffix)) return character + segment.segment.length;
|
|
1135
|
+
return lineLength;
|
|
1136
|
+
}
|
|
1137
|
+
for (const codePoint of suffix) return character + codePoint.length;
|
|
1138
|
+
return lineLength;
|
|
1139
|
+
}
|
|
1140
|
+
if (character <= 0) return 0;
|
|
1141
|
+
const lineStart = textDocument.offsetAt({
|
|
1142
|
+
line,
|
|
1143
|
+
character: 0
|
|
1144
|
+
});
|
|
1145
|
+
const prefix = textDocument.getTextSlice(lineStart, lineStart + character);
|
|
1146
|
+
let prevStart = 0;
|
|
1147
|
+
const segmenter = getGraphemeSegmenter();
|
|
1148
|
+
if (segmenter !== void 0) {
|
|
1149
|
+
for (const segment of segmenter.segment(prefix)) prevStart = segment.index;
|
|
1150
|
+
return prevStart;
|
|
1151
|
+
}
|
|
1152
|
+
let index = 0;
|
|
1153
|
+
for (const codePoint of prefix) {
|
|
1154
|
+
prevStart = index;
|
|
1155
|
+
index += codePoint.length;
|
|
1156
|
+
}
|
|
1157
|
+
return prevStart;
|
|
1158
|
+
}
|
|
769
1159
|
function getSelectionAnchorAndFocusOffsets(textDocument, selection) {
|
|
770
|
-
const isBackward = selection.direction ===
|
|
1160
|
+
const isBackward = selection.direction === -1;
|
|
771
1161
|
return [textDocument.offsetAt(isBackward ? selection.end : selection.start), textDocument.offsetAt(getCaretPosition(selection))];
|
|
772
1162
|
}
|
|
773
1163
|
function resolveDeleteHardLineForwardRange(textDocument, selection) {
|
|
@@ -809,7 +1199,7 @@ function resolveDeleteHardLineForwardRange(textDocument, selection) {
|
|
|
809
1199
|
};
|
|
810
1200
|
}
|
|
811
1201
|
function expandSingleNewlineInsert(textDocument, insertText, insertStartOffset) {
|
|
812
|
-
if (insertText !== "\n" && insertText !== "\r\n") return insertText;
|
|
1202
|
+
if (insertText !== "\n" && insertText !== "\r" && insertText !== "\r\n") return insertText;
|
|
813
1203
|
const line = textDocument.positionAt(insertStartOffset).line;
|
|
814
1204
|
const lineText = textDocument.getLineText(line);
|
|
815
1205
|
const indentLen = getLeadingSpaces(lineText);
|
|
@@ -829,7 +1219,7 @@ function createSelectionsFromOffsetPairs(textDocument, offsetPairs) {
|
|
|
829
1219
|
for (const [anchorOffset, focusOffset] of offsetPairs) normalizedOffsets.push(Math.min(anchorOffset, focusOffset), Math.max(anchorOffset, focusOffset));
|
|
830
1220
|
const positions = textDocument.positionsAt(normalizedOffsets);
|
|
831
1221
|
return offsetPairs.map(([anchorOffset, focusOffset], index) => {
|
|
832
|
-
const direction = anchorOffset === focusOffset ?
|
|
1222
|
+
const direction = anchorOffset === focusOffset ? 0 : anchorOffset < focusOffset ? 1 : -1;
|
|
833
1223
|
return {
|
|
834
1224
|
start: positions[index * 2],
|
|
835
1225
|
end: positions[index * 2 + 1],
|
|
@@ -985,10 +1375,10 @@ function isInside(token, node) {
|
|
|
985
1375
|
}
|
|
986
1376
|
function offsetBefore(line, node) {
|
|
987
1377
|
if (node.parentElement === line) {
|
|
988
|
-
let offset
|
|
1378
|
+
let offset = 0;
|
|
989
1379
|
const index = Array.prototype.indexOf.call(line.childNodes, node);
|
|
990
|
-
for (let i = 0; i < index; i++) offset
|
|
991
|
-
return offset
|
|
1380
|
+
for (let i = 0; i < index; i++) offset = getLineChildEnd(line.childNodes[i]);
|
|
1381
|
+
return offset;
|
|
992
1382
|
}
|
|
993
1383
|
for (const token of collectTokens(line)) if (isInside(token, node)) return getCharacterIndex(token) + (node.nodeType === 3 ? textLengthBefore(token, node) : 0);
|
|
994
1384
|
let offset = 0;
|
|
@@ -1018,10 +1408,10 @@ function getLineChildEnd(child, textOffsetInChild) {
|
|
|
1018
1408
|
if (parent === null) return 0;
|
|
1019
1409
|
const token = findTokenSpan(parent);
|
|
1020
1410
|
if (token === null) return 0;
|
|
1021
|
-
const base
|
|
1022
|
-
if (base
|
|
1411
|
+
const base = getCharacterIndex(token);
|
|
1412
|
+
if (base === void 0) return 0;
|
|
1023
1413
|
const length = textOffsetInChild === void 0 ? getTextOffset(child.textContent, child.textContent?.length ?? 0) : getTextOffset(child.textContent, textOffsetInChild);
|
|
1024
|
-
return base
|
|
1414
|
+
return base + textLengthBefore(token, child) + length;
|
|
1025
1415
|
}
|
|
1026
1416
|
if (child.nodeType !== 1) return 0;
|
|
1027
1417
|
const el = child;
|
|
@@ -1033,8 +1423,8 @@ function getLineChildEnd(child, textOffsetInChild) {
|
|
|
1033
1423
|
return end;
|
|
1034
1424
|
}
|
|
1035
1425
|
function getLineIndex(el) {
|
|
1036
|
-
const { line } = el.dataset;
|
|
1037
|
-
if (line !== void 0) {
|
|
1426
|
+
const { line, lineType } = el.dataset;
|
|
1427
|
+
if (line !== void 0 && lineType !== "change-deletion") {
|
|
1038
1428
|
const lineNumber = parseInt(line, 10);
|
|
1039
1429
|
if (!Number.isNaN(lineNumber)) return lineNumber - 1;
|
|
1040
1430
|
}
|
|
@@ -1051,7 +1441,7 @@ function getTextOffset(text, offset) {
|
|
|
1051
1441
|
const lineBreakIndex = value.search(/[\r\n]/);
|
|
1052
1442
|
return Math.min(offset, lineBreakIndex === -1 ? value.length : lineBreakIndex);
|
|
1053
1443
|
}
|
|
1054
|
-
|
|
1055
1444
|
//#endregion
|
|
1056
|
-
export { DirectionBackward, DirectionForward, DirectionNone, applyDeleteHardLineForwardToSelections, applyDeleteSoftLineBackwardToSelections, applyDeleteWordBackwardToSelections, applyTextChangeToSelections, applyTextReplaceToSelections, applyTransposeToSelections, comparePosition, convertSelection, createSelectionFrom, createSelectionFromAnchorAndFocusOffsets, expandCollapsedSelectionToWord, extendSelection, extendSelections, findNexMatch, getCaretPosition, getDocumentBoundarySelection, getDocumentFullSelection, getSelectionAnchor, getSelectionText, isCollapsedSelection, isLineEditable, mapCursorMove, mapSelectionShift, mergeOverlappingSelections, resolveIndentEdits, selectionIntersects };
|
|
1445
|
+
export { DirectionBackward, DirectionForward, DirectionNone, applyDeleteCharacterToSelections, applyDeleteHardLineForwardToSelections, applyDeleteSoftLineBackwardToSelections, applyDeleteWordBackwardToSelections, applyTextChangeToSelections, applyTextReplaceToSelections, applyTransposeToSelections, comparePosition, convertSelection, createSelectionFrom, createSelectionFromAnchorAndFocusOffsets, expandCollapsedSelectionToWord, extendSelection, extendSelections, findNexMatch, getAutoSurroundReplacementTexts, getCaretPosition, getDocumentBoundarySelection, getDocumentFullSelection, getSelectionAnchor, getSelectionText, isCollapsedSelection, isLineEditable, mapCursorMove, mapSelectionShift, mergeOverlappingSelections, remapSelectionsAfterEdits, resolveDeleteCharacterRange, resolveIndentEdits, resolveSelectionCut, selectionIntersects };
|
|
1446
|
+
|
|
1057
1447
|
//# sourceMappingURL=selection.js.map
|