@pierre/diffs 1.5.2 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/components/CodeView.d.ts +3 -2
- package/dist/components/CodeView.d.ts.map +1 -1
- package/dist/components/CodeView.js +24 -19
- package/dist/components/CodeView.js.map +1 -1
- package/dist/components/File.d.ts +31 -9
- package/dist/components/File.d.ts.map +1 -1
- package/dist/components/File.js +176 -90
- package/dist/components/File.js.map +1 -1
- package/dist/components/FileDiff.d.ts +32 -9
- package/dist/components/FileDiff.d.ts.map +1 -1
- package/dist/components/FileDiff.js +225 -131
- package/dist/components/FileDiff.js.map +1 -1
- package/dist/components/FileStream.d.ts +6 -4
- package/dist/components/FileStream.d.ts.map +1 -1
- package/dist/components/FileStream.js +49 -36
- package/dist/components/FileStream.js.map +1 -1
- package/dist/components/UnresolvedFile.d.ts +14 -4
- package/dist/components/UnresolvedFile.d.ts.map +1 -1
- package/dist/components/UnresolvedFile.js +35 -16
- package/dist/components/UnresolvedFile.js.map +1 -1
- package/dist/components/VirtualizedFile.d.ts +3 -2
- package/dist/components/VirtualizedFile.d.ts.map +1 -1
- package/dist/components/VirtualizedFile.js +28 -20
- package/dist/components/VirtualizedFile.js.map +1 -1
- package/dist/components/VirtualizedFileDiff.d.ts +3 -2
- package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
- package/dist/components/VirtualizedFileDiff.js +31 -24
- package/dist/components/VirtualizedFileDiff.js.map +1 -1
- package/dist/constants.d.ts +4 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/editor/editor.d.ts +2 -1
- package/dist/editor/editor.d.ts.map +1 -1
- package/dist/editor/editor.js +5 -1
- package/dist/editor/editor.js.map +1 -1
- package/dist/editor/platform.d.ts +1 -1
- package/dist/editor/platform.js +5 -4
- package/dist/editor/platform.js.map +1 -1
- package/dist/editor/selection.d.ts +2 -2
- package/dist/editor/selection.d.ts.map +1 -1
- package/dist/editor/selection.js +31 -6
- package/dist/editor/selection.js.map +1 -1
- package/dist/editor/tokenizer.d.ts +6 -4
- package/dist/editor/tokenizer.d.ts.map +1 -1
- package/dist/editor/tokenizer.js +25 -470
- package/dist/editor/tokenizer.js.map +1 -1
- package/dist/highlighter/DiffsEditorTokenizer.d.ts +16 -0
- package/dist/highlighter/DiffsEditorTokenizer.d.ts.map +1 -0
- package/dist/highlighter/DiffsEditorTokenizer.js +0 -0
- package/dist/highlighter/DiffsHighlighter.d.ts +41 -0
- package/dist/highlighter/DiffsHighlighter.d.ts.map +1 -0
- package/dist/highlighter/DiffsHighlighter.js +39 -0
- package/dist/highlighter/DiffsHighlighter.js.map +1 -0
- package/dist/highlighter/backends/highlights.d.ts +26 -0
- package/dist/highlighter/backends/highlights.d.ts.map +1 -0
- package/dist/highlighter/backends/highlights.js +71 -0
- package/dist/highlighter/backends/highlights.js.map +1 -0
- package/dist/highlighter/backends/shiki.d.ts +27 -0
- package/dist/highlighter/backends/shiki.d.ts.map +1 -0
- package/dist/highlighter/backends/shiki.js +107 -0
- package/dist/highlighter/backends/shiki.js.map +1 -0
- package/dist/highlighter/highlighterType.d.ts +13 -0
- package/dist/highlighter/highlighterType.d.ts.map +1 -0
- package/dist/highlighter/highlighterType.js +32 -0
- package/dist/highlighter/highlighterType.js.map +1 -0
- package/dist/highlighter/highlights-editor.d.ts +24 -0
- package/dist/highlighter/highlights-editor.d.ts.map +1 -0
- package/dist/highlighter/highlights-editor.js +166 -0
- package/dist/highlighter/highlights-editor.js.map +1 -0
- package/dist/highlighter/highlights-stream.d.ts +20 -0
- package/dist/highlighter/highlights-stream.d.ts.map +1 -0
- package/dist/highlighter/highlights-stream.js +93 -0
- package/dist/highlighter/highlights-stream.js.map +1 -0
- package/dist/highlighter/languages/areLanguagesAttached.d.ts +2 -1
- package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
- package/dist/highlighter/languages/areLanguagesAttached.js +4 -6
- package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -1
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts +6 -1
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/attachResolvedLanguages.js +6 -11
- package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
- package/dist/highlighter/languages/constants.d.ts +1 -1
- package/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -1
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
- package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
- package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
- package/dist/highlighter/languages/resolveLanguage.js +19 -16
- package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
- package/dist/highlighter/languages/resolveLanguages.d.ts +1 -1
- package/dist/highlighter/shared_highlighter.d.ts +24 -9
- package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
- package/dist/highlighter/shared_highlighter.js +59 -47
- package/dist/highlighter/shared_highlighter.js.map +1 -1
- package/dist/highlighter/shiki-editor.d.ts +25 -0
- package/dist/highlighter/shiki-editor.d.ts.map +1 -0
- package/dist/highlighter/shiki-editor.js +483 -0
- package/dist/highlighter/shiki-editor.js.map +1 -0
- package/dist/highlighter/shiki-stream.d.ts +20 -0
- package/dist/highlighter/shiki-stream.d.ts.map +1 -0
- package/dist/highlighter/shiki-stream.js +60 -0
- package/dist/highlighter/shiki-stream.js.map +1 -0
- package/dist/highlighter/stream-tokenizer.d.ts +40 -0
- package/dist/highlighter/stream-tokenizer.d.ts.map +1 -0
- package/dist/highlighter/stream-tokenizer.js +70 -0
- package/dist/highlighter/stream-tokenizer.js.map +1 -0
- package/dist/highlighter/themes/areThemesAttached.d.ts +3 -2
- package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
- package/dist/highlighter/themes/areThemesAttached.js +5 -4
- package/dist/highlighter/themes/areThemesAttached.js.map +1 -1
- package/dist/highlighter/themes/attachResolvedThemes.d.ts +5 -2
- package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/attachResolvedThemes.js +4 -16
- package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts +3 -1
- package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/cleanUpResolvedThemes.js +8 -5
- package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/createCSSVariablesTheme.d.ts +7 -0
- package/dist/highlighter/themes/createCSSVariablesTheme.d.ts.map +1 -0
- package/dist/highlighter/themes/createCSSVariablesTheme.js +89 -0
- package/dist/highlighter/themes/createCSSVariablesTheme.js.map +1 -0
- package/dist/highlighter/themes/createCachedLoader.d.ts +5 -0
- package/dist/highlighter/themes/createCachedLoader.d.ts.map +1 -0
- package/dist/highlighter/themes/createCachedLoader.js +15 -0
- package/dist/highlighter/themes/createCachedLoader.js.map +1 -0
- package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +3 -2
- package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/getResolvedOrResolveTheme.js +4 -4
- package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -1
- package/dist/highlighter/themes/getResolvedThemes.d.ts +3 -2
- package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/getResolvedThemes.js +4 -3
- package/dist/highlighter/themes/getResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/hasResolvedThemes.d.ts +2 -2
- package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/hasResolvedThemes.js +4 -3
- 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 +3 -3
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.js.map +1 -1
- package/dist/highlighter/themes/registerCustomTheme.d.ts +9 -4
- package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/registerCustomTheme.js +8 -16
- package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
- package/dist/highlighter/themes/resolveTheme.d.ts +3 -2
- package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/resolveTheme.js +4 -7
- package/dist/highlighter/themes/resolveTheme.js.map +1 -1
- package/dist/highlighter/themes/resolveThemes.d.ts +3 -2
- package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/resolveThemes.js +4 -7
- package/dist/highlighter/themes/resolveThemes.js.map +1 -1
- package/dist/highlighter/themes/themeResolver.d.ts +10 -4
- package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
- package/dist/highlighter/themes/themeResolver.js +141 -2
- package/dist/highlighter/themes/themeResolver.js.map +1 -1
- package/dist/highlighter/themes/types.d.ts +23 -0
- package/dist/highlighter/themes/types.d.ts.map +1 -0
- package/dist/highlighter/themes/types.js +0 -0
- package/dist/highlighter/tokenizer-types.d.ts +35 -0
- package/dist/highlighter/tokenizer-types.d.ts.map +1 -0
- package/dist/highlighter/tokenizer-types.js +0 -0
- package/dist/highlighter/types.d.ts +55 -0
- package/dist/highlighter/types.d.ts.map +1 -0
- package/dist/highlighter/types.js +0 -0
- package/dist/index.d.ts +22 -13
- package/dist/index.js +21 -18
- package/dist/managers/InteractionManager.d.ts.map +1 -1
- package/dist/managers/InteractionManager.js +2 -2
- package/dist/managers/InteractionManager.js.map +1 -1
- package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +9 -1
- package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -1
- package/dist/react/CodeView.d.ts +4 -3
- package/dist/react/CodeView.d.ts.map +1 -1
- package/dist/react/CodeView.js +47 -38
- package/dist/react/CodeView.js.map +1 -1
- package/dist/react/File.js +3 -3
- package/dist/react/File.js.map +1 -1
- package/dist/react/FileDiff.js +3 -3
- package/dist/react/FileDiff.js.map +1 -1
- package/dist/react/MultiFileDiff.js +2 -2
- package/dist/react/MultiFileDiff.js.map +1 -1
- package/dist/react/PatchDiff.js +3 -3
- package/dist/react/PatchDiff.js.map +1 -1
- package/dist/react/UnresolvedFile.js +2 -2
- package/dist/react/UnresolvedFile.js.map +1 -1
- package/dist/react/index.d.ts +9 -4
- package/dist/react/types.d.ts +4 -2
- package/dist/react/types.d.ts.map +1 -1
- package/dist/react/utils/renderDiffChildren.js +1 -1
- package/dist/react/utils/renderDiffChildren.js.map +1 -1
- package/dist/react/utils/renderFileChildren.js +1 -1
- package/dist/react/utils/renderFileChildren.js.map +1 -1
- package/dist/react/utils/useFileDiffInstance.d.ts +1 -0
- package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileDiffInstance.js +29 -24
- package/dist/react/utils/useFileDiffInstance.js.map +1 -1
- package/dist/react/utils/useFileInstance.d.ts +2 -0
- package/dist/react/utils/useFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileInstance.js +38 -28
- package/dist/react/utils/useFileInstance.js.map +1 -1
- package/dist/react/utils/useForceUpdate.d.ts +5 -0
- package/dist/react/utils/useForceUpdate.d.ts.map +1 -0
- package/dist/react/utils/useForceUpdate.js +27 -0
- package/dist/react/utils/useForceUpdate.js.map +1 -0
- package/dist/react/utils/useNextRenderData.d.ts +9 -0
- package/dist/react/utils/useNextRenderData.d.ts.map +1 -0
- package/dist/react/utils/useNextRenderData.js +9 -0
- package/dist/react/utils/useNextRenderData.js.map +1 -0
- package/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -0
- package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useUnresolvedFileInstance.js +26 -11
- package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
- package/dist/renderers/DiffHunksRenderer.d.ts +4 -2
- package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/DiffHunksRenderer.js +82 -43
- package/dist/renderers/DiffHunksRenderer.js.map +1 -1
- package/dist/renderers/FileRenderer.d.ts +6 -2
- package/dist/renderers/FileRenderer.d.ts.map +1 -1
- package/dist/renderers/FileRenderer.js +77 -43
- package/dist/renderers/FileRenderer.js.map +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.js +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
- package/dist/shiki-stream/index.d.ts +3 -3
- package/dist/shiki-stream/index.js +1 -2
- package/dist/shiki-stream/stream.d.ts +4 -4
- package/dist/shiki-stream/stream.d.ts.map +1 -1
- package/dist/shiki-stream/stream.js +20 -9
- package/dist/shiki-stream/stream.js.map +1 -1
- package/dist/shiki-stream/types.d.ts +7 -38
- package/dist/shiki-stream/types.d.ts.map +1 -1
- package/dist/ssr/index.d.ts +7 -2
- package/dist/ssr/renderHTML.js +2 -2
- package/dist/ssr/renderHTML.js.map +1 -1
- package/dist/style.js +1 -1
- package/dist/style.js.map +1 -1
- package/dist/types.d.ts +20 -11
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/canUseWASM.d.ts +13 -0
- package/dist/utils/canUseWASM.d.ts.map +1 -0
- package/dist/utils/canUseWASM.js +59 -0
- package/dist/utils/canUseWASM.js.map +1 -0
- package/dist/utils/createSpanNodeFromToken.d.ts +3 -2
- package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
- package/dist/utils/createSpanNodeFromToken.js +4 -5
- package/dist/utils/createSpanNodeFromToken.js.map +1 -1
- package/dist/utils/cssWrappers.d.ts.map +1 -1
- package/dist/utils/cssWrappers.js +12 -0
- package/dist/utils/cssWrappers.js.map +1 -1
- package/dist/utils/getCodeViewItemRenderData.d.ts +10 -0
- package/dist/utils/getCodeViewItemRenderData.d.ts.map +1 -0
- package/dist/utils/getCodeViewItemRenderData.js +19 -0
- package/dist/utils/getCodeViewItemRenderData.js.map +1 -0
- package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
- package/dist/utils/getHighlighterOptions.js +3 -2
- package/dist/utils/getHighlighterOptions.js.map +1 -1
- package/dist/utils/getHighlighterThemeStyles.d.ts +2 -1
- package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
- package/dist/utils/getHighlighterThemeStyles.js +13 -3
- package/dist/utils/getHighlighterThemeStyles.js.map +1 -1
- package/dist/utils/getTokenOptions.d.ts +7 -0
- package/dist/utils/getTokenOptions.d.ts.map +1 -0
- package/dist/utils/getTokenOptions.js +16 -0
- package/dist/utils/getTokenOptions.js.map +1 -0
- package/dist/utils/hastToHtml.d.ts +10 -0
- package/dist/utils/hastToHtml.d.ts.map +1 -0
- package/dist/utils/hastToHtml.js +125 -0
- package/dist/utils/hastToHtml.js.map +1 -0
- package/dist/utils/hydratePartialDiff.js +4 -0
- package/dist/utils/hydratePartialDiff.js.map +1 -1
- package/dist/utils/parseDiffDecorations.d.ts +2 -1
- package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
- package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
- package/dist/utils/parseMergeConflictDiffFromFile.js +2 -0
- package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
- package/dist/utils/parsePatchFiles.d.ts.map +1 -1
- package/dist/utils/parsePatchFiles.js +24 -4
- package/dist/utils/parsePatchFiles.js.map +1 -1
- package/dist/utils/renderDiffWithHighlighter.d.ts +3 -2
- package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
- package/dist/utils/renderDiffWithHighlighter.js +33 -48
- package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
- package/dist/utils/renderFileWithHighlighter.d.ts +3 -2
- package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
- package/dist/utils/renderFileWithHighlighter.js +10 -26
- package/dist/utils/renderFileWithHighlighter.js.map +1 -1
- package/dist/utils/renderTokenLines.d.ts +22 -0
- package/dist/utils/renderTokenLines.d.ts.map +1 -0
- package/dist/utils/renderTokenLines.js +250 -0
- package/dist/utils/renderTokenLines.js.map +1 -0
- package/dist/utils/resolvePreferredHighlighter.d.ts +13 -0
- package/dist/utils/resolvePreferredHighlighter.d.ts.map +1 -0
- package/dist/utils/resolvePreferredHighlighter.js +11 -0
- package/dist/utils/resolvePreferredHighlighter.js.map +1 -0
- package/dist/utils/resolveRegion.js +20 -10
- package/dist/utils/resolveRegion.js.map +1 -1
- package/dist/utils/setDeferredArrayItem.d.ts +5 -0
- package/dist/utils/setDeferredArrayItem.d.ts.map +1 -0
- package/dist/utils/setDeferredArrayItem.js +39 -0
- package/dist/utils/setDeferredArrayItem.js.map +1 -0
- package/dist/utils/tokenStyle.d.ts +11 -0
- package/dist/utils/tokenStyle.d.ts.map +1 -0
- package/dist/utils/tokenStyle.js +32 -0
- package/dist/utils/tokenStyle.js.map +1 -0
- package/dist/utils/tokensToHtml.d.ts +11 -0
- package/dist/utils/tokensToHtml.d.ts.map +1 -0
- package/dist/utils/tokensToHtml.js +48 -0
- package/dist/utils/tokensToHtml.js.map +1 -0
- package/dist/utils/updateDiffHunks.d.ts +2 -2
- package/dist/utils/updateDiffHunks.d.ts.map +1 -1
- package/dist/utils/updateDiffHunks.js +7 -3
- package/dist/utils/updateDiffHunks.js.map +1 -1
- package/dist/utils/wrapTokenFragments.js.map +1 -1
- package/dist/worker/WorkerPoolManager.d.ts +14 -2
- package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
- package/dist/worker/WorkerPoolManager.js +155 -67
- package/dist/worker/WorkerPoolManager.js.map +1 -1
- package/dist/worker/hastLinesTransport.d.ts +14 -0
- package/dist/worker/hastLinesTransport.d.ts.map +1 -0
- package/dist/worker/hastLinesTransport.js +156 -0
- package/dist/worker/hastLinesTransport.js.map +1 -0
- package/dist/worker/highlights-CpZm9DAR.js +317 -0
- package/dist/worker/highlights-CpZm9DAR.js.map +1 -0
- package/dist/worker/index.d.ts +1 -1
- package/dist/worker/shiki-Ci4cdHsM.js +697 -0
- package/dist/worker/shiki-Ci4cdHsM.js.map +1 -0
- package/dist/worker/stream-tokenizer-DK9xp5M5.js +427 -0
- package/dist/worker/stream-tokenizer-DK9xp5M5.js.map +1 -0
- package/dist/worker/types.d.ts +16 -3
- package/dist/worker/types.d.ts.map +1 -1
- package/dist/worker/worker-portable.js +41 -13337
- package/dist/worker/worker-portable.js.map +1 -1
- package/dist/worker/worker.js +681 -349
- package/dist/worker/worker.js.map +1 -1
- package/dist/worker/workerMessage.d.ts +24 -0
- package/dist/worker/workerMessage.d.ts.map +1 -0
- package/dist/worker/workerMessage.js +0 -0
- package/package.json +5 -3
- package/dist/highlighter/themes/constants.d.ts +0 -5
- package/dist/highlighter/themes/constants.d.ts.map +0 -1
- package/dist/highlighter/themes/constants.js +0 -6
- package/dist/highlighter/themes/constants.js.map +0 -1
- package/dist/highlighter/themes/themeResolution.d.ts +0 -7
- package/dist/highlighter/themes/themeResolution.d.ts.map +0 -1
- package/dist/highlighter/themes/themeResolution.js +0 -21
- package/dist/highlighter/themes/themeResolution.js.map +0 -1
- package/dist/shiki-stream/tokenizer.d.ts +0 -23
- package/dist/shiki-stream/tokenizer.d.ts.map +0 -1
- package/dist/shiki-stream/tokenizer.js +0 -72
- package/dist/shiki-stream/tokenizer.js.map +0 -1
- package/dist/utils/createTransformerWithState.d.ts +0 -12
- package/dist/utils/createTransformerWithState.d.ts.map +0 -1
- package/dist/utils/createTransformerWithState.js +0 -89
- package/dist/utils/createTransformerWithState.js.map +0 -1
- package/dist/worker/wasm-B9ZqxnKj.js +0 -8
- package/dist/worker/wasm-B9ZqxnKj.js.map +0 -1
|
@@ -44,7 +44,8 @@ interface FileOptions<LAnnotation, Caret> extends BaseCodeOptions, InteractionMa
|
|
|
44
44
|
* errors yourself.
|
|
45
45
|
*/
|
|
46
46
|
disableErrorHandling?: boolean;
|
|
47
|
-
|
|
47
|
+
/** Receives the matching file, including any editor changes. */
|
|
48
|
+
renderAnnotation?(annotation: LineAnnotation<LAnnotation>, file: FileContents): HTMLElement | undefined;
|
|
48
49
|
renderGutterUtility?(getHoveredRow: () => GetHoveredLineResult<'file'> | undefined): HTMLElement | null | undefined;
|
|
49
50
|
onPostRender?(node: HTMLElement, instance: File<LAnnotation, Caret>, phase: PostRenderPhase): unknown;
|
|
50
51
|
/**
|
|
@@ -65,15 +66,24 @@ interface FileOptions<LAnnotation, Caret> extends BaseCodeOptions, InteractionMa
|
|
|
65
66
|
interface AnnotationElementCache<LAnnotation> {
|
|
66
67
|
element: HTMLElement;
|
|
67
68
|
annotation: LineAnnotation<LAnnotation>;
|
|
69
|
+
file: FileContents;
|
|
68
70
|
}
|
|
69
71
|
interface HydrationSetup<LAnnotation> {
|
|
70
72
|
file: FileContents;
|
|
71
73
|
lineAnnotations: LineAnnotation<LAnnotation>[] | undefined;
|
|
72
74
|
}
|
|
75
|
+
interface FileRenderData<LAnnotation> {
|
|
76
|
+
file: FileContents;
|
|
77
|
+
lineAnnotations: LineAnnotation<LAnnotation>[];
|
|
78
|
+
}
|
|
79
|
+
interface FileRenderInput<LAnnotation> {
|
|
80
|
+
file: FileContents;
|
|
81
|
+
lineAnnotations: LineAnnotation<LAnnotation>[] | undefined;
|
|
82
|
+
}
|
|
73
83
|
declare class File<LAnnotation = undefined, Caret = undefined> {
|
|
74
84
|
options: FileOptions<LAnnotation, Caret>;
|
|
75
85
|
private workerManager?;
|
|
76
|
-
private
|
|
86
|
+
private requestOwnerRender?;
|
|
77
87
|
static LoadedCustomComponent: boolean;
|
|
78
88
|
readonly __id: string;
|
|
79
89
|
readonly type = "file";
|
|
@@ -105,24 +115,36 @@ declare class File<LAnnotation = undefined, Caret = undefined> {
|
|
|
105
115
|
protected resizeManager: ResizeManager;
|
|
106
116
|
protected interactionManager: InteractionManager<'file'>;
|
|
107
117
|
protected annotationCache: Map<string, AnnotationElementCache<LAnnotation>>;
|
|
108
|
-
protected lineAnnotations: LineAnnotation<LAnnotation>[];
|
|
118
|
+
protected get lineAnnotations(): LineAnnotation<LAnnotation>[];
|
|
109
119
|
protected managersDirty: boolean;
|
|
110
120
|
file: FileContents | undefined;
|
|
111
121
|
private editSession;
|
|
112
|
-
|
|
122
|
+
private renderedData;
|
|
123
|
+
private pendingData;
|
|
124
|
+
protected forceRenderOverride: true | undefined;
|
|
113
125
|
protected renderRange: RenderRange | undefined;
|
|
114
126
|
protected enabled: boolean;
|
|
115
127
|
protected editor: Editor<'file', LAnnotation, Caret> | undefined;
|
|
116
|
-
constructor(options?: FileOptions<LAnnotation, Caret>, workerManager?: WorkerPoolManager | undefined,
|
|
128
|
+
constructor(options?: FileOptions<LAnnotation, Caret>, workerManager?: WorkerPoolManager | undefined, requestOwnerRender?: (() => void) | undefined);
|
|
117
129
|
getAnnotationSlotName: (annotation: LineAnnotation<LAnnotation> | DiffLineAnnotation<LAnnotation>) => string;
|
|
118
130
|
private handleHighlightRender;
|
|
119
131
|
rerender(): void;
|
|
132
|
+
protected requestRender(): boolean;
|
|
133
|
+
protected get isComponentManaged(): boolean;
|
|
120
134
|
private getTheme;
|
|
121
|
-
protected
|
|
135
|
+
protected getInputFile(): FileContents | undefined;
|
|
136
|
+
protected getWorkingFile(fallbackFile?: FileContents | undefined): FileContents | undefined;
|
|
122
137
|
protected getRenderedFile(): FileContents | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* @internal Data the next render() with this input will display. While a
|
|
140
|
+
* replacement file is being highlighted, this is still the displayed data.
|
|
141
|
+
*/
|
|
142
|
+
__getNextRenderData({ file, lineAnnotations }: FileRenderInput<LAnnotation>): FileRenderData<LAnnotation>;
|
|
123
143
|
protected getLatestAnnotations(): LineAnnotation<LAnnotation>[];
|
|
144
|
+
protected getAnnotationsForFile(file: FileContents): LineAnnotation<LAnnotation>[];
|
|
145
|
+
private adoptRenderData;
|
|
124
146
|
protected isNewAnnotations(lineAnnotations: LineAnnotation<LAnnotation>[]): boolean;
|
|
125
|
-
protected
|
|
147
|
+
protected updateInputFile(incomingFile: FileContents, lineAnnotations?: LineAnnotation<LAnnotation>[]): boolean;
|
|
126
148
|
private installEditSession;
|
|
127
149
|
onThemeChange(): void;
|
|
128
150
|
setOptions(options: FileOptions<LAnnotation, Caret> | undefined): void;
|
|
@@ -168,7 +190,7 @@ declare class File<LAnnotation = undefined, Caret = undefined> {
|
|
|
168
190
|
* Requires the editor to be detached first. Does nothing when no session
|
|
169
191
|
* exists, so callers can invoke it again safely after it has settled.
|
|
170
192
|
*
|
|
171
|
-
* `onEditComplete` receives the completed file, current
|
|
193
|
+
* `onEditComplete` receives the completed file, current input file, and
|
|
172
194
|
* both annotation collections even when the final text is unchanged. In
|
|
173
195
|
* `install` mode, accepting installs the completed file and its annotations;
|
|
174
196
|
* rejecting or having no handler restores the external values. `discard`
|
|
@@ -222,5 +244,5 @@ declare class File<LAnnotation = undefined, Caret = undefined> {
|
|
|
222
244
|
private cleanupErrorWrapper;
|
|
223
245
|
}
|
|
224
246
|
//#endregion
|
|
225
|
-
export { File, FileEditChangeHandler, type FileEditCompleteEvent, FileEditCompleteHandler, FileHydrateProps, FileOptions, FileRenderProps };
|
|
247
|
+
export { File, FileEditChangeHandler, type FileEditCompleteEvent, FileEditCompleteHandler, FileHydrateProps, FileOptions, FileRenderData, FileRenderInput, FileRenderProps };
|
|
226
248
|
//# sourceMappingURL=File.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"File.d.ts","names":[],"sources":["../../src/components/File.ts"],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"File.d.ts","names":[],"sources":["../../src/components/File.ts"],"mappings":";;;;;;;;;;UA8FiB,gBAAgB;EAC/B,MAAM;EACN,gBAAgB;EAChB,mBAAmB;EACnB;EACA;EACA;EACA,kBAAkB,eAAe;EACjC,cAAc;;UAGC,iBAAiB,qBAAqB,KACrD,gBAAgB;EAGhB,eAAe;EACf;;KAGU,sBAAsB,aAAa,UAC7C,OAAO,0BAA0B,aAAa;;;;;;;;;KAWpC,wBAAwB,aAAa,UAC/C,OAAO,sBAAsB,aAAa,WACvC;UAEY,YAAY,aAAa,eAChC,iBAAiB;EACzB;EACA,qBAAqB;EACrB,6BAA6B;EAC7B,uBAAuB;EACvB,qBAAqB;;;;;;EAMrB;;EAEA,kBACE,YAAY,eAAe,cAC3B,MAAM,eACL;EACH,qBACE,qBAAqB,2CACpB;EAEH,cACE,MAAM,aACN,UAAU,KAAK,aAAa,QAC5B,OAAO;;;;;;;EAST,eAAe,sBAAsB,aAAa;;;;;;;EAQlD,iBAAiB,wBAAwB,aAAa;;UAG9C,uBAAuB;EAC/B,SAAS;EACT,YAAY,eAAe;EAC3B,MAAM;;UAQE,eAAe;EACvB,MAAM;EACN,iBAAiB,eAAe;;UAGjB,eAAe;EAC9B,MAAM;EACN,iBAAiB,eAAe;;UAGjB,gBAAgB;EAC/B,MAAM;EACN,iBAAiB,eAAe;;cA2BrB,KAAK,yBAAyB;EA4DhC,SAAS,YAAY,aAAa;UAGjC;UAGA;SAjEH;WAEE;WACA;YAEC,eAAe;YACf,WAAW;YACX,KAAK;YACL,MAAM;YACN,cAAc;YACd,aAAa;YACb,eAAe;YACf,iBAAiB;YACjB;YACA,gBAAgB;YAChB;YACA,sBAAsB;YACtB,cAAc;YACd,aAAa;YACb;YACA;YACA,sBAAsB;YACtB;UACF;YAEE,eAAe;YACf,cAAc;YACd,cAAc;YACd,sBAAsB;YACtB,gBAAgB;YAEhB,cAAc,aAAa;YAC3B,eAAe;YACf,oBAAoB;YAEpB,iBAAiB,YAAY,uBAAuB;gBAGhD,mBAAmB,eAAe;YAGtC;EAGH,MAAM;UACL;UAEA;UAEA;YAGE;YACA,aAAa;YACb;YAEA,QAAQ,eAAe,aAAa;EAE9C,YACS,UAAS,YAAY,aAAa,QAGjC,gBAAgB,+BAGhB;EAgBH,wBAAqB,YACd,eAAe,eAAe,mBAAmB;UASvD;EAID;YAaG;gBAUI;UAIN;YAUE,gBAAgB;YAMhB,eACR,eAAc,2BACb;YAMO,mBAAmB;;;;;EAQtB,sBACL,MACA,mBACC,gBAAgB,eAAe,eAAe;YA0BvC,wBAAwB,eAAe;YASvC,sBACR,MAAM,eACL,eAAe;UAUV;YAiBE,iBACR,iBAAiB,eAAe;YAiBxB,gBACR,cAAc,cACd,kBAAkB,eAAe;UAgD3B;EAmCD;EAKA,WACL,SAAS,YAAY,aAAa;YAQ1B;UAIF;EAMD,aAAa,WAAW;UAQvB;UAqBA;EAOD,sBAAqB;EAIrB,mBACL,iBAAiB,eAAe;YAkCxB,qCACR,iBAAiB,eAAe;EAgB3B,iBACL,OAAO,0BACP,UAAU;EAKL,oBACL,2BACA,UAAU;EAQL;EAIA,kBAAkB;EAMlB,6BAA6B;EAI7B;YAiBG,2BAA2B;EAI9B,QAAQ;EAkER;EAKA,QAAQ,OAAO,iBAAiB;YA+C7B,gBACR,eAAe,aACf;YAkDQ,iBACR,MACA,mBACC,eAAe;EAoBX,qBACL,OAAM;YAOE,cAAc,aAAa;UAM7B;;EAuDD;;EAOA,qBACL,OAAO,0BAA0B,aAAa;EAQzC,eACL,OAAO,0BAA0B,aAAa;;EAOzC;;EAKA,eACL,QAAQ,eAAe,aAAa;;EAoB/B,eAAe,QAAQ,eAAe,aAAa;UAOlD;;;;;;;;;;;;;;;EAiDD,sBACL,QAAQ,eAAe,aAAa,QACpC;UAKM;EAwFD,oBACL,cAAc,qBAAqB,cACnC,qBAAqB,eAAe;;EAgB/B,6BACL,cAAc,qBAAqB,cACnC,qBAAqB,eAAe;EAS/B,kBACL,YAAY,YAAY,MAAM,oBAC9B,6BACA;IACE;;EAiBG,SACL,MACA,eACA,aACA,aACA,kBACA,eACA,iBACA,eACC,gBAAgB;YAwMT;UAEF;UA2BA;UAmBA;UAUA;EAWD,kBAAkB;YAkBf,qBAAqB;EAQlB,oBACX,OAAM,2BACL;UA4BK;UA0CA;UA+CA;UAqBA;UAkCA;UAqDA;YAeE;UAIF;UA6BA;UA6GA;UAcA;UA2BA;UA8CA;UASA;YAiDE;UAIF;UA4EA;UAYA;UAkBA;UAYA;YAME,6BACR,gBAAgB,aAChB,aAAa,cACZ;UAmCK;UAyBA;UAgBA;UAwBA;UAaA;UAqBA;UAqBA"}
|
package/dist/components/File.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { CUSTOM_HEADER_SLOT_ID, DEFAULT_THEMES, EMPTY_RENDER_RANGE, HEADER_FILENAME_SUFFIX_SLOT_ID, HEADER_METADATA_SLOT_ID, HEADER_PREFIX_SLOT_ID } from "../constants.js";
|
|
1
|
+
import { CUSTOM_HEADER_SLOT_ID, DEFAULT_THEMES, EMPTY_LINE_ANNOTATIONS, EMPTY_RENDER_RANGE, HEADER_FILENAME_SUFFIX_SLOT_ID, HEADER_METADATA_SLOT_ID, HEADER_PREFIX_SLOT_ID } from "../constants.js";
|
|
2
|
+
import { HighlighterDisposedError } from "../highlighter/highlighterType.js";
|
|
2
3
|
import { getThemes } from "../utils/getThemes.js";
|
|
3
4
|
import { getHighlighterIfLoaded, getSharedHighlighter } from "../highlighter/shared_highlighter.js";
|
|
4
5
|
import { areThemesEqual } from "../utils/areThemesEqual.js";
|
|
5
6
|
import { isStyleNode } from "../utils/isStyleNode.js";
|
|
6
7
|
import { isSafari } from "../utils/platform.js";
|
|
8
|
+
import { resolvePreferredHighlighter } from "../utils/resolvePreferredHighlighter.js";
|
|
7
9
|
import { areFileTargetsEqual } from "../utils/areFileTargetsEqual.js";
|
|
10
|
+
import { hastToHtml } from "../utils/hastToHtml.js";
|
|
8
11
|
import { InteractionManager, pluckInteractionOptions } from "../managers/InteractionManager.js";
|
|
9
12
|
import { ResizeManager } from "../managers/ResizeManager.js";
|
|
10
13
|
import { areRenderRangesEqual } from "../utils/areRenderRangesEqual.js";
|
|
@@ -29,7 +32,6 @@ import { prerenderHTMLIfNecessary } from "../utils/prerenderHTMLIfNecessary.js";
|
|
|
29
32
|
import { setPreNodeProperties } from "../utils/setWrapperNodeProps.js";
|
|
30
33
|
import { isHandledWorkerPoolError } from "../worker/errors.js";
|
|
31
34
|
import "./web-components.js";
|
|
32
|
-
import { toHtml } from "hast-util-to-html";
|
|
33
35
|
//#region src/components/File.ts
|
|
34
36
|
const EMPTY_STRINGS = [""];
|
|
35
37
|
function createEditSessionFile(file) {
|
|
@@ -41,7 +43,7 @@ let instanceId = -1;
|
|
|
41
43
|
var File = class {
|
|
42
44
|
options;
|
|
43
45
|
workerManager;
|
|
44
|
-
|
|
46
|
+
requestOwnerRender;
|
|
45
47
|
static LoadedCustomComponent = true;
|
|
46
48
|
__id = `file:${++instanceId}`;
|
|
47
49
|
type = "file";
|
|
@@ -73,18 +75,22 @@ var File = class {
|
|
|
73
75
|
resizeManager;
|
|
74
76
|
interactionManager;
|
|
75
77
|
annotationCache = /* @__PURE__ */ new Map();
|
|
76
|
-
lineAnnotations
|
|
78
|
+
get lineAnnotations() {
|
|
79
|
+
return this.renderedData?.lineAnnotations ?? EMPTY_LINE_ANNOTATIONS;
|
|
80
|
+
}
|
|
77
81
|
managersDirty = false;
|
|
78
82
|
file;
|
|
79
83
|
editSession;
|
|
80
|
-
|
|
84
|
+
renderedData;
|
|
85
|
+
pendingData;
|
|
86
|
+
forceRenderOverride;
|
|
81
87
|
renderRange;
|
|
82
88
|
enabled = true;
|
|
83
89
|
editor;
|
|
84
|
-
constructor(options = { theme: DEFAULT_THEMES }, workerManager,
|
|
90
|
+
constructor(options = { theme: DEFAULT_THEMES }, workerManager, requestOwnerRender) {
|
|
85
91
|
this.options = options;
|
|
86
92
|
this.workerManager = workerManager;
|
|
87
|
-
this.
|
|
93
|
+
this.requestOwnerRender = requestOwnerRender;
|
|
88
94
|
this.fileRenderer = new FileRenderer(options, this.getAnnotationSlotName, this.handleHighlightRender, this.workerManager);
|
|
89
95
|
this.resizeManager = new ResizeManager();
|
|
90
96
|
this.interactionManager = new InteractionManager("file", pluckInteractionOptions(options));
|
|
@@ -97,51 +103,104 @@ var File = class {
|
|
|
97
103
|
this.rerender();
|
|
98
104
|
};
|
|
99
105
|
rerender() {
|
|
100
|
-
|
|
106
|
+
const file = this.getInputFile();
|
|
107
|
+
if (!this.enabled || file == null) return;
|
|
108
|
+
if (this.requestRender()) return;
|
|
101
109
|
this.render({
|
|
102
|
-
file
|
|
110
|
+
file,
|
|
103
111
|
forceRender: true,
|
|
104
112
|
renderRange: this.renderRange
|
|
105
113
|
});
|
|
106
114
|
}
|
|
115
|
+
requestRender() {
|
|
116
|
+
const { requestOwnerRender } = this;
|
|
117
|
+
if (this.editSession != null || requestOwnerRender == null) return false;
|
|
118
|
+
this.forceRenderOverride = true;
|
|
119
|
+
requestOwnerRender();
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
get isComponentManaged() {
|
|
123
|
+
return this.requestOwnerRender != null;
|
|
124
|
+
}
|
|
107
125
|
getTheme() {
|
|
108
126
|
return this.workerManager?.getFileRenderOptions().theme ?? this.options.theme ?? DEFAULT_THEMES;
|
|
109
127
|
}
|
|
110
|
-
|
|
111
|
-
return this.
|
|
128
|
+
getInputFile() {
|
|
129
|
+
return this.file;
|
|
130
|
+
}
|
|
131
|
+
getWorkingFile(fallbackFile = this.file) {
|
|
132
|
+
return this.editSession?.file ?? fallbackFile;
|
|
112
133
|
}
|
|
113
134
|
getRenderedFile() {
|
|
114
|
-
return this.
|
|
135
|
+
return this.renderedData?.file;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* @internal Data the next render() with this input will display. While a
|
|
139
|
+
* replacement file is being highlighted, this is still the displayed data.
|
|
140
|
+
*/
|
|
141
|
+
__getNextRenderData({ file, lineAnnotations }) {
|
|
142
|
+
const sessionAnnotations = this.editSession?.annotations;
|
|
143
|
+
if (sessionAnnotations != null) return {
|
|
144
|
+
file,
|
|
145
|
+
lineAnnotations: lineAnnotations != null && this.isNewAnnotations(lineAnnotations) ? lineAnnotations : sessionAnnotations.provided
|
|
146
|
+
};
|
|
147
|
+
const workingFile = this.getWorkingFile(file) ?? file;
|
|
148
|
+
const nextFile = this.fileRenderer.getFileForNextRender(workingFile);
|
|
149
|
+
return {
|
|
150
|
+
file: nextFile,
|
|
151
|
+
lineAnnotations: lineAnnotations != null && areFileTargetsEqual(nextFile, workingFile) ? lineAnnotations : this.getAnnotationsForFile(nextFile)
|
|
152
|
+
};
|
|
115
153
|
}
|
|
116
154
|
getLatestAnnotations() {
|
|
117
|
-
return this.editSession?.annotations?.current ?? this.lineAnnotations;
|
|
155
|
+
return this.pendingData?.lineAnnotations ?? this.editSession?.annotations?.current ?? this.lineAnnotations;
|
|
156
|
+
}
|
|
157
|
+
getAnnotationsForFile(file) {
|
|
158
|
+
const { pendingData } = this;
|
|
159
|
+
return pendingData != null && areFileTargetsEqual(file, pendingData.file) ? pendingData.lineAnnotations : this.lineAnnotations;
|
|
160
|
+
}
|
|
161
|
+
adoptRenderData(file) {
|
|
162
|
+
const { pendingData } = this;
|
|
163
|
+
const matchesPending = pendingData != null && areFileTargetsEqual(file, pendingData.file);
|
|
164
|
+
this.renderedData = {
|
|
165
|
+
file,
|
|
166
|
+
lineAnnotations: matchesPending ? pendingData.lineAnnotations : this.lineAnnotations
|
|
167
|
+
};
|
|
168
|
+
if (matchesPending) this.pendingData = void 0;
|
|
118
169
|
}
|
|
119
170
|
isNewAnnotations(lineAnnotations) {
|
|
120
171
|
const session = this.editSession?.annotations;
|
|
121
|
-
if (lineAnnotations === this.
|
|
172
|
+
if (lineAnnotations === this.getLatestAnnotations()) return false;
|
|
122
173
|
return session == null || lineAnnotations !== session.provided && lineAnnotations !== session.current;
|
|
123
174
|
}
|
|
124
|
-
|
|
125
|
-
if (areFileTargetsEqual(this.
|
|
175
|
+
updateInputFile(incomingFile, lineAnnotations) {
|
|
176
|
+
if (areFileTargetsEqual(this.getInputFile(), incomingFile)) return false;
|
|
126
177
|
const hadSession = this.editSession != null;
|
|
178
|
+
const previousAnnotations = this.getLatestAnnotations();
|
|
127
179
|
this.file = incomingFile;
|
|
128
180
|
if (hadSession || this.editor != null) this.installEditSession(incomingFile, hadSession ? void 0 : this.editor?.__getDocumentContents(incomingFile), true);
|
|
129
181
|
else this.editSession = void 0;
|
|
130
|
-
if (this.editSession?.annotations != null && lineAnnotations != null)
|
|
131
|
-
|
|
132
|
-
this.editSession
|
|
133
|
-
|
|
182
|
+
if (this.editSession?.annotations != null && lineAnnotations != null) this.editSession.annotations = adoptEditSessionAnnotations(lineAnnotations, getLineAnnotationName, this.editSession.annotations);
|
|
183
|
+
this.pendingData = {
|
|
184
|
+
file: this.editSession?.file ?? incomingFile,
|
|
185
|
+
lineAnnotations: this.editSession?.annotations?.current ?? lineAnnotations ?? previousAnnotations
|
|
186
|
+
};
|
|
134
187
|
return true;
|
|
135
188
|
}
|
|
136
|
-
installEditSession(
|
|
137
|
-
const
|
|
138
|
-
const file = createEditSessionFile(retainedDocument ??
|
|
189
|
+
installEditSession(inputFile, retainedDocument, hostReplacement = false) {
|
|
190
|
+
const usesInputDocument = retainedDocument == null || retainedDocument.name === inputFile.name && retainedDocument.lang === inputFile.lang && retainedDocument.contents === inputFile.contents;
|
|
191
|
+
const file = createEditSessionFile(retainedDocument ?? inputFile);
|
|
192
|
+
const annotations = this.editSession?.annotations ?? adoptEditSessionAnnotations(this.getLatestAnnotations(), getLineAnnotationName);
|
|
139
193
|
this.editSession = {
|
|
140
194
|
file,
|
|
141
|
-
|
|
142
|
-
|
|
195
|
+
inputFile,
|
|
196
|
+
externalReplacement: hostReplacement && usesInputDocument,
|
|
197
|
+
annotations
|
|
143
198
|
};
|
|
144
|
-
this.
|
|
199
|
+
this.pendingData = {
|
|
200
|
+
file,
|
|
201
|
+
lineAnnotations: annotations.current
|
|
202
|
+
};
|
|
203
|
+
this.fileRenderer.beginEditSession(file, usesInputDocument ? inputFile : void 0);
|
|
145
204
|
}
|
|
146
205
|
onThemeChange() {
|
|
147
206
|
this.fileRenderer.clearRenderCache();
|
|
@@ -182,18 +241,22 @@ var File = class {
|
|
|
182
241
|
};
|
|
183
242
|
setLineAnnotations(lineAnnotations) {
|
|
184
243
|
const sessionAnnotations = this.editSession?.annotations;
|
|
185
|
-
if (sessionAnnotations
|
|
186
|
-
this.lineAnnotations
|
|
187
|
-
|
|
244
|
+
if (sessionAnnotations != null) {
|
|
245
|
+
if (!this.isNewAnnotations(lineAnnotations)) return;
|
|
246
|
+
writeEditSessionAnnotations(sessionAnnotations, lineAnnotations, getLineAnnotationName);
|
|
188
247
|
}
|
|
189
|
-
|
|
190
|
-
this.
|
|
191
|
-
|
|
248
|
+
const file = this.getWorkingFile();
|
|
249
|
+
if (file != null) this.pendingData = {
|
|
250
|
+
file,
|
|
251
|
+
lineAnnotations
|
|
252
|
+
};
|
|
192
253
|
}
|
|
193
254
|
syncEditSessionAnnotationsFromEditor(lineAnnotations) {
|
|
194
255
|
const session = this.editSession?.annotations;
|
|
195
256
|
if (session == null || lineAnnotations === session.current) return false;
|
|
196
257
|
session.current = lineAnnotations;
|
|
258
|
+
if (this.renderedData != null) this.renderedData.lineAnnotations = lineAnnotations;
|
|
259
|
+
this.pendingData = void 0;
|
|
197
260
|
this.fileRenderer.setLineAnnotations(lineAnnotations);
|
|
198
261
|
this.renderAnnotations();
|
|
199
262
|
return true;
|
|
@@ -233,7 +296,7 @@ var File = class {
|
|
|
233
296
|
this.managersDirty = false;
|
|
234
297
|
}
|
|
235
298
|
shouldApplyColumnVariables(overflow) {
|
|
236
|
-
return overflow === "scroll" && this.
|
|
299
|
+
return overflow === "scroll" && this.lineAnnotations.length > 0;
|
|
237
300
|
}
|
|
238
301
|
cleanUp(recycle = false) {
|
|
239
302
|
const editor = this.editor;
|
|
@@ -245,10 +308,13 @@ var File = class {
|
|
|
245
308
|
this.managersDirty = false;
|
|
246
309
|
this.workerManager?.unsubscribeToThemeChanges(this);
|
|
247
310
|
this.renderRange = void 0;
|
|
248
|
-
if (!this.
|
|
311
|
+
if (!this.isComponentManaged) this.fileContainer?.remove();
|
|
249
312
|
this.fileContainer = void 0;
|
|
250
313
|
this.mounted = false;
|
|
251
|
-
if (!recycle)
|
|
314
|
+
if (!recycle) {
|
|
315
|
+
this.renderedData = void 0;
|
|
316
|
+
this.pendingData = void 0;
|
|
317
|
+
}
|
|
252
318
|
this.clearAuxiliaryNodes();
|
|
253
319
|
this.pre = void 0;
|
|
254
320
|
this.code = void 0;
|
|
@@ -281,7 +347,6 @@ var File = class {
|
|
|
281
347
|
this.workerManager = void 0;
|
|
282
348
|
this.file = void 0;
|
|
283
349
|
this.editSession = void 0;
|
|
284
|
-
this.renderedFile = void 0;
|
|
285
350
|
}
|
|
286
351
|
this.enabled = false;
|
|
287
352
|
}
|
|
@@ -343,20 +408,23 @@ var File = class {
|
|
|
343
408
|
this.hydrateMeasuredScrollbar();
|
|
344
409
|
}
|
|
345
410
|
hydrationSetup({ file, lineAnnotations }) {
|
|
346
|
-
this.
|
|
411
|
+
this.renderedData = {
|
|
412
|
+
file,
|
|
413
|
+
lineAnnotations: lineAnnotations ?? this.getLatestAnnotations()
|
|
414
|
+
};
|
|
415
|
+
this.pendingData = void 0;
|
|
347
416
|
this.file = file;
|
|
348
417
|
this.fileRenderer.setOptions(getFileRendererOptions(this.options));
|
|
349
418
|
this.syncInteractionOptions();
|
|
350
419
|
if (this.pre == null) return;
|
|
351
420
|
this.fileRenderer.hydrate(file);
|
|
352
|
-
this.renderedFile = file;
|
|
353
421
|
this.renderAnnotations();
|
|
354
422
|
this.renderGutterUtility();
|
|
355
423
|
this.injectUnsafeCSS();
|
|
356
424
|
this.managersDirty = true;
|
|
357
425
|
this.flushManagers();
|
|
358
426
|
}
|
|
359
|
-
getOrCreateLineCache(file = this.
|
|
427
|
+
getOrCreateLineCache(file = this.getWorkingFile()) {
|
|
360
428
|
return file != null ? this.fileRenderer.getOrCreateLineCache(file) : EMPTY_STRINGS;
|
|
361
429
|
}
|
|
362
430
|
updateBuffers(renderRange) {
|
|
@@ -365,10 +433,10 @@ var File = class {
|
|
|
365
433
|
syncRenderViewToEditor() {
|
|
366
434
|
const { editor, fileContainer, renderRange } = this;
|
|
367
435
|
const lineAnnotations = this.getLatestAnnotations();
|
|
368
|
-
const file = this.
|
|
436
|
+
const file = this.getWorkingFile();
|
|
369
437
|
if (editor == null || fileContainer == null || file == null) return;
|
|
370
438
|
const syncEditor = (highlighter) => {
|
|
371
|
-
if (!this.enabled || this.editor !== editor || this.fileContainer !== fileContainer || this.
|
|
439
|
+
if (!this.enabled || this.editor !== editor || this.fileContainer !== fileContainer || this.getWorkingFile() !== file) return;
|
|
372
440
|
editor.__syncRenderView({
|
|
373
441
|
highlighter,
|
|
374
442
|
fileContainer,
|
|
@@ -388,8 +456,10 @@ var File = class {
|
|
|
388
456
|
else getSharedHighlighter({
|
|
389
457
|
themes: getThemes(theme),
|
|
390
458
|
langs: Array.from(/* @__PURE__ */ new Set(["text", lang])),
|
|
391
|
-
preferredHighlighter: this.workerManager
|
|
392
|
-
}).then(syncEditor)
|
|
459
|
+
preferredHighlighter: resolvePreferredHighlighter(this.workerManager, this.options)
|
|
460
|
+
}).then(syncEditor).catch((error) => {
|
|
461
|
+
if (!(error instanceof HighlighterDisposedError)) console.error(error);
|
|
462
|
+
});
|
|
393
463
|
}
|
|
394
464
|
/** @internal The editor applied or edited past the pending external replacement. */
|
|
395
465
|
__acknowledgeDocumentUpdate() {
|
|
@@ -429,10 +499,13 @@ var File = class {
|
|
|
429
499
|
}
|
|
430
500
|
resumeEditorRendering(editor) {
|
|
431
501
|
if (this.editSession != null) this.fileRenderer.beginEditSession(this.editSession.file);
|
|
432
|
-
else
|
|
502
|
+
else {
|
|
503
|
+
const inputFile = this.getInputFile();
|
|
504
|
+
if (inputFile != null) this.installEditSession(inputFile, editor.__getDocumentContents(inputFile));
|
|
505
|
+
}
|
|
433
506
|
const editSessionFile = this.editSession?.file;
|
|
434
507
|
if (this.fileRenderer.editorRenderReady()) {
|
|
435
|
-
if (this.fileRenderer.fileCache === editSessionFile) this.
|
|
508
|
+
if (editSessionFile != null && this.fileRenderer.fileCache === editSessionFile) this.adoptRenderData(editSessionFile);
|
|
436
509
|
this.syncRenderViewToEditor();
|
|
437
510
|
} else this.rerender();
|
|
438
511
|
}
|
|
@@ -443,7 +516,7 @@ var File = class {
|
|
|
443
516
|
* Requires the editor to be detached first. Does nothing when no session
|
|
444
517
|
* exists, so callers can invoke it again safely after it has settled.
|
|
445
518
|
*
|
|
446
|
-
* `onEditComplete` receives the completed file, current
|
|
519
|
+
* `onEditComplete` receives the completed file, current input file, and
|
|
447
520
|
* both annotation collections even when the final text is unchanged. In
|
|
448
521
|
* `install` mode, accepting installs the completed file and its annotations;
|
|
449
522
|
* rejecting or having no handler restores the external values. `discard`
|
|
@@ -454,9 +527,10 @@ var File = class {
|
|
|
454
527
|
this.settleEditSession(mode === "install", editor);
|
|
455
528
|
}
|
|
456
529
|
settleEditSession(installResult, editor) {
|
|
457
|
-
const { editSession
|
|
458
|
-
if (editSession == null
|
|
459
|
-
const { file: editSessionFile, annotations: editSessionAnnotations } = editSession;
|
|
530
|
+
const { editSession } = this;
|
|
531
|
+
if (editSession == null) return;
|
|
532
|
+
const { file: editSessionFile, inputFile, annotations: editSessionAnnotations } = editSession;
|
|
533
|
+
const inputAnnotations = editSessionAnnotations?.provided ?? this.lineAnnotations;
|
|
460
534
|
if (this.editor != null) throw new Error("File.__completeEditSession: detach the editor before completing the session");
|
|
461
535
|
const sessionAnnotationsCurrent = editSessionAnnotations?.current;
|
|
462
536
|
let acceptedFile;
|
|
@@ -467,29 +541,31 @@ var File = class {
|
|
|
467
541
|
const event = {
|
|
468
542
|
file: completedFile,
|
|
469
543
|
editor,
|
|
470
|
-
originalFile:
|
|
544
|
+
originalFile: inputFile,
|
|
471
545
|
lineAnnotations: sessionAnnotationsCurrent,
|
|
472
|
-
originalLineAnnotations:
|
|
546
|
+
originalLineAnnotations: inputAnnotations
|
|
473
547
|
};
|
|
474
548
|
Object.freeze(event);
|
|
475
549
|
try {
|
|
476
550
|
editor.__emitEditComplete(event);
|
|
477
551
|
if (this.options.onEditComplete?.(event) === "accept") {
|
|
478
|
-
if (completedFile.cacheKey != null && completedFile.cacheKey ===
|
|
552
|
+
if (completedFile.cacheKey != null && completedFile.cacheKey === inputFile.cacheKey) throw new Error("File.__completeEditSession: an accepted file must not reuse the replaced file cacheKey");
|
|
479
553
|
acceptedFile = completedFile;
|
|
480
554
|
}
|
|
481
555
|
} catch (error) {
|
|
482
556
|
failed = true;
|
|
483
557
|
failure = error;
|
|
484
558
|
}
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
if (sessionAnnotationsCurrent != null) this.lineAnnotations = sessionAnnotationsCurrent;
|
|
488
|
-
}
|
|
559
|
+
const settledFile = installResult && acceptedFile != null ? acceptedFile : inputFile;
|
|
560
|
+
const settledAnnotations = installResult && acceptedFile != null ? sessionAnnotationsCurrent ?? inputAnnotations : inputAnnotations;
|
|
489
561
|
this.editSession = void 0;
|
|
490
|
-
|
|
562
|
+
this.file = settledFile;
|
|
563
|
+
this.pendingData = {
|
|
564
|
+
file: settledFile,
|
|
565
|
+
lineAnnotations: settledAnnotations
|
|
566
|
+
};
|
|
491
567
|
this.fileRenderer.endEditSession(settledFile);
|
|
492
|
-
if (
|
|
568
|
+
if (areFileTargetsEqual(this.getRenderedFile(), settledFile)) this.adoptRenderData(settledFile);
|
|
493
569
|
if (installResult && this.fileContainer != null) this.rerender();
|
|
494
570
|
if (failed) throw failure;
|
|
495
571
|
}
|
|
@@ -514,15 +590,17 @@ var File = class {
|
|
|
514
590
|
}
|
|
515
591
|
render({ file, fileContainer, forceRender = false, preventEmit = false, containerWrapper, deferManagers = false, lineAnnotations, renderRange }) {
|
|
516
592
|
if (!this.enabled) throw new Error("File.render: attempting to call render after cleaned up");
|
|
593
|
+
forceRender = this.forceRenderOverride ?? forceRender;
|
|
594
|
+
this.forceRenderOverride = void 0;
|
|
517
595
|
this.editor?.__postponeBgTokenizeToNextFrame();
|
|
518
596
|
const { collapsed = false, themeType = "system" } = this.options;
|
|
519
597
|
const nextRenderRange = collapsed ? void 0 : renderRange;
|
|
520
598
|
const previousRenderRange = this.renderRange;
|
|
521
599
|
const themeChanged = this.hasThemeChanged();
|
|
522
600
|
const annotationsChanged = lineAnnotations != null && (lineAnnotations.length > 0 || this.getLatestAnnotations().length > 0) ? this.isNewAnnotations(lineAnnotations) : false;
|
|
523
|
-
const didFileChange = !areFileTargetsEqual(this.
|
|
524
|
-
if (didFileChange) this.
|
|
525
|
-
const
|
|
601
|
+
const didFileChange = !areFileTargetsEqual(this.getInputFile(), file);
|
|
602
|
+
if (didFileChange) this.updateInputFile(file, lineAnnotations);
|
|
603
|
+
const workingFile = this.getWorkingFile(file) ?? file;
|
|
526
604
|
if (!collapsed && !forceRender && areRenderRangesEqual(nextRenderRange, this.renderRange) && !didFileChange && !annotationsChanged && !themeChanged) {
|
|
527
605
|
const rendered = this.applyCachedThemeState(themeType);
|
|
528
606
|
if (rendered) this.finalizeRender();
|
|
@@ -533,7 +611,8 @@ var File = class {
|
|
|
533
611
|
this.fileRenderer.setOptions(getFileRendererOptions(this.options));
|
|
534
612
|
this.syncInteractionOptions();
|
|
535
613
|
if (lineAnnotations != null) this.setLineAnnotations(lineAnnotations);
|
|
536
|
-
this.fileRenderer.
|
|
614
|
+
const nextRenderFile = this.fileRenderer.getFileForNextRender(workingFile);
|
|
615
|
+
this.fileRenderer.setLineAnnotations(this.getAnnotationsForFile(nextRenderFile));
|
|
537
616
|
const { disableErrorHandling = false, disableFileHeader = false } = this.options;
|
|
538
617
|
if (disableFileHeader) {
|
|
539
618
|
if (this.headerElement != null) {
|
|
@@ -549,10 +628,10 @@ var File = class {
|
|
|
549
628
|
this.removeRenderedCode();
|
|
550
629
|
this.clearAuxiliaryNodes();
|
|
551
630
|
try {
|
|
552
|
-
const fileResult = this.fileRenderer.renderFile(
|
|
631
|
+
const fileResult = this.fileRenderer.renderFile(workingFile, EMPTY_RENDER_RANGE);
|
|
553
632
|
if (fileResult != null) this.applyThemeState(fileContainer, fileResult.themeStyles, themeType, fileResult.baseThemeType);
|
|
554
633
|
if (fileResult?.headerAST != null) this.applyHeaderToDOM(fileResult.headerAST, fileContainer, fileResult.file);
|
|
555
|
-
this.
|
|
634
|
+
this.adoptRenderData(fileResult?.file ?? workingFile);
|
|
556
635
|
this.injectUnsafeCSS();
|
|
557
636
|
} catch (error) {
|
|
558
637
|
if (disableErrorHandling) throw error;
|
|
@@ -565,8 +644,9 @@ var File = class {
|
|
|
565
644
|
}
|
|
566
645
|
try {
|
|
567
646
|
const pre = this.getOrCreatePreNode(fileContainer);
|
|
568
|
-
|
|
569
|
-
|
|
647
|
+
let renderedFile = this.getRenderedFile();
|
|
648
|
+
if (!this.canPartiallyRender(forceRender, annotationsChanged, didFileChange || themeChanged || !areFileTargetsEqual(this.getRenderedFile(), workingFile)) || !this.applyPartialRender(workingFile, previousRenderRange, nextRenderRange)) {
|
|
649
|
+
const fileResult = this.fileRenderer.renderFile(workingFile, nextRenderRange);
|
|
570
650
|
if (fileResult == null) {
|
|
571
651
|
if (this.workerManager?.isInitialized() === false && this.workerManager.isWorkingPool()) this.workerManager.initialize().catch(() => {}).then(() => this.rerender());
|
|
572
652
|
return false;
|
|
@@ -574,10 +654,11 @@ var File = class {
|
|
|
574
654
|
this.applyThemeState(fileContainer, fileResult.themeStyles, themeType, fileResult.baseThemeType);
|
|
575
655
|
if (fileResult.headerAST != null) this.applyHeaderToDOM(fileResult.headerAST, fileContainer, fileResult.file);
|
|
576
656
|
this.applyFullRender(fileResult, pre);
|
|
577
|
-
|
|
657
|
+
renderedFile = fileResult.file;
|
|
578
658
|
}
|
|
579
659
|
this.applyBuffers(pre, nextRenderRange);
|
|
580
660
|
this.injectUnsafeCSS();
|
|
661
|
+
if (renderedFile != null) this.adoptRenderData(renderedFile);
|
|
581
662
|
this.renderAnnotations();
|
|
582
663
|
this.renderGutterUtility();
|
|
583
664
|
this.managersDirty = true;
|
|
@@ -648,7 +729,7 @@ var File = class {
|
|
|
648
729
|
this.placeHolder.style.setProperty("height", `${height}px`);
|
|
649
730
|
return true;
|
|
650
731
|
}
|
|
651
|
-
async primeHighlightCache(file = this.
|
|
732
|
+
async primeHighlightCache(file = this.getInputFile()) {
|
|
652
733
|
const { workerManager } = this;
|
|
653
734
|
if (file == null || workerManager == null || !workerManager.isWorkingPool() || file.cacheKey == null || isFilePlainText(file)) return;
|
|
654
735
|
const tokenizeMaxLength = this.options.tokenizeMaxLength ?? 1e5;
|
|
@@ -696,31 +777,35 @@ var File = class {
|
|
|
696
777
|
this.mounted = false;
|
|
697
778
|
}
|
|
698
779
|
renderAnnotations() {
|
|
699
|
-
if (this.
|
|
780
|
+
if (this.isComponentManaged || this.fileContainer == null) {
|
|
700
781
|
for (const { element } of this.annotationCache.values()) element.remove();
|
|
701
782
|
this.annotationCache.clear();
|
|
702
783
|
return;
|
|
703
784
|
}
|
|
704
785
|
const staleAnnotations = new Map(this.annotationCache);
|
|
705
786
|
const { renderAnnotation } = this.options;
|
|
706
|
-
const
|
|
707
|
-
if (renderAnnotation != null &&
|
|
708
|
-
const
|
|
709
|
-
const
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
cache
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
787
|
+
const { renderedData } = this;
|
|
788
|
+
if (renderAnnotation != null && renderedData != null) {
|
|
789
|
+
const { file, lineAnnotations } = renderedData;
|
|
790
|
+
for (const [index, annotation] of lineAnnotations.entries()) {
|
|
791
|
+
const name = this.getAnnotationSlotName(annotation);
|
|
792
|
+
const id = `${index}-${name}`;
|
|
793
|
+
let cache = this.annotationCache.get(id);
|
|
794
|
+
if (cache == null || cache.file !== file || !areLineAnnotationsEqual(annotation, cache.annotation)) {
|
|
795
|
+
cache?.element.remove();
|
|
796
|
+
const content = renderAnnotation(annotation, file);
|
|
797
|
+
if (content == null) continue;
|
|
798
|
+
cache = {
|
|
799
|
+
element: createAnnotationWrapperNode(name),
|
|
800
|
+
annotation,
|
|
801
|
+
file
|
|
802
|
+
};
|
|
803
|
+
cache.element.appendChild(content);
|
|
804
|
+
this.fileContainer.appendChild(cache.element);
|
|
805
|
+
this.annotationCache.set(id, cache);
|
|
806
|
+
}
|
|
807
|
+
staleAnnotations.delete(id);
|
|
722
808
|
}
|
|
723
|
-
staleAnnotations.delete(id);
|
|
724
809
|
}
|
|
725
810
|
for (const [id, { element }] of staleAnnotations.entries()) {
|
|
726
811
|
this.annotationCache.delete(id);
|
|
@@ -748,6 +833,7 @@ var File = class {
|
|
|
748
833
|
}
|
|
749
834
|
injectUnsafeCSS() {
|
|
750
835
|
const { unsafeCSS } = this.options;
|
|
836
|
+
this.pre?.toggleAttribute("data-custom-styles", Boolean(unsafeCSS));
|
|
751
837
|
const shadowRoot = this.fileContainer?.shadowRoot;
|
|
752
838
|
if (shadowRoot == null) return;
|
|
753
839
|
if (unsafeCSS == null || unsafeCSS === "") {
|
|
@@ -816,10 +902,10 @@ var File = class {
|
|
|
816
902
|
if (code.childElementCount >= 2) for (let i = 0; i < 2; i++) {
|
|
817
903
|
const domEl = code.children[i];
|
|
818
904
|
const astEl = codeAst[i];
|
|
819
|
-
domEl.innerHTML =
|
|
905
|
+
domEl.innerHTML = hastToHtml(astEl.children);
|
|
820
906
|
domEl.style.cssText = astEl.properties.style;
|
|
821
907
|
}
|
|
822
|
-
else code.innerHTML =
|
|
908
|
+
else code.innerHTML = hastToHtml(codeAst);
|
|
823
909
|
if (!pre.contains(code)) pre.replaceChildren(code);
|
|
824
910
|
};
|
|
825
911
|
if (this.shouldGuardRebuildScroll()) guardWebKitScrollDuringRebuild(pre, applyColumns);
|
|
@@ -967,7 +1053,7 @@ var File = class {
|
|
|
967
1053
|
this.cleanupErrorWrapper();
|
|
968
1054
|
this.placeHolder?.remove();
|
|
969
1055
|
this.placeHolder = void 0;
|
|
970
|
-
const headerHTML = this.cachedHeaderHTML ??
|
|
1056
|
+
const headerHTML = this.cachedHeaderHTML ?? hastToHtml(headerAST);
|
|
971
1057
|
this.cachedHeaderHTML = headerHTML;
|
|
972
1058
|
if (headerHTML !== this.lastRenderedHeaderHTML) {
|
|
973
1059
|
const tempDiv = document.createElement("div");
|
|
@@ -979,7 +1065,7 @@ var File = class {
|
|
|
979
1065
|
this.headerElement = newHeader;
|
|
980
1066
|
this.lastRenderedHeaderHTML = headerHTML;
|
|
981
1067
|
}
|
|
982
|
-
if (this.
|
|
1068
|
+
if (this.isComponentManaged) return;
|
|
983
1069
|
const { renderHeaderPrefix, renderHeaderFilenameSuffix, renderCustomHeader, renderHeaderMetadata } = this.options;
|
|
984
1070
|
if (renderCustomHeader != null) {
|
|
985
1071
|
const content = renderCustomHeader(file) ?? void 0;
|