@openclaw/diffs 2026.5.27 → 2026.5.28-beta.2
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 +1 -0
- package/dist/assets/viewer-runtime.js +50 -50
- package/dist/index.js +427 -88
- package/node_modules/@pierre/diffs/dist/components/CodeView.d.ts +22 -7
- package/node_modules/@pierre/diffs/dist/components/CodeView.d.ts.map +1 -1
- package/node_modules/@pierre/diffs/dist/components/CodeView.js +202 -105
- package/node_modules/@pierre/diffs/dist/components/CodeView.js.map +1 -1
- package/node_modules/@pierre/diffs/dist/components/File.d.ts +2 -0
- package/node_modules/@pierre/diffs/dist/components/File.d.ts.map +1 -1
- package/node_modules/@pierre/diffs/dist/components/File.js +13 -9
- package/node_modules/@pierre/diffs/dist/components/File.js.map +1 -1
- package/node_modules/@pierre/diffs/dist/components/FileDiff.d.ts +2 -0
- package/node_modules/@pierre/diffs/dist/components/FileDiff.d.ts.map +1 -1
- package/node_modules/@pierre/diffs/dist/components/FileDiff.js +12 -6
- package/node_modules/@pierre/diffs/dist/components/FileDiff.js.map +1 -1
- package/node_modules/@pierre/diffs/dist/components/VirtualizedFile.d.ts +4 -2
- package/node_modules/@pierre/diffs/dist/components/VirtualizedFile.d.ts.map +1 -1
- package/node_modules/@pierre/diffs/dist/components/VirtualizedFile.js +23 -6
- package/node_modules/@pierre/diffs/dist/components/VirtualizedFile.js.map +1 -1
- package/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.d.ts +9 -8
- package/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
- package/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.js +329 -142
- package/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.js.map +1 -1
- package/node_modules/@pierre/diffs/dist/constants.d.ts.map +1 -1
- package/node_modules/@pierre/diffs/dist/index.d.ts +2 -2
- package/node_modules/@pierre/diffs/dist/index.js +3 -3
- package/node_modules/@pierre/diffs/dist/react/index.d.ts +2 -2
- package/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.d.ts +1 -0
- package/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
- package/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.js +12 -5
- package/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.js.map +1 -1
- package/node_modules/@pierre/diffs/dist/renderers/FileRenderer.d.ts +1 -0
- package/node_modules/@pierre/diffs/dist/renderers/FileRenderer.d.ts.map +1 -1
- package/node_modules/@pierre/diffs/dist/renderers/FileRenderer.js +4 -1
- package/node_modules/@pierre/diffs/dist/renderers/FileRenderer.js.map +1 -1
- package/node_modules/@pierre/diffs/dist/ssr/index.d.ts +2 -2
- package/node_modules/@pierre/diffs/dist/types.d.ts +7 -1
- package/node_modules/@pierre/diffs/dist/types.d.ts.map +1 -1
- package/node_modules/@pierre/diffs/dist/utils/computeEstimatedDiffHeights.d.ts +28 -0
- package/node_modules/@pierre/diffs/dist/utils/computeEstimatedDiffHeights.d.ts.map +1 -0
- package/node_modules/@pierre/diffs/dist/utils/computeEstimatedDiffHeights.js +111 -0
- package/node_modules/@pierre/diffs/dist/utils/computeEstimatedDiffHeights.js.map +1 -0
- package/node_modules/@pierre/diffs/dist/utils/getDiffHunksRendererOptions.d.ts +8 -0
- package/node_modules/@pierre/diffs/dist/utils/getDiffHunksRendererOptions.d.ts.map +1 -0
- package/node_modules/@pierre/diffs/dist/utils/getDiffHunksRendererOptions.js +31 -0
- package/node_modules/@pierre/diffs/dist/utils/getDiffHunksRendererOptions.js.map +1 -0
- package/node_modules/@pierre/diffs/dist/utils/getFileRendererOptions.d.ts +8 -0
- package/node_modules/@pierre/diffs/dist/utils/getFileRendererOptions.d.ts.map +1 -0
- package/node_modules/@pierre/diffs/dist/utils/getFileRendererOptions.js +24 -0
- package/node_modules/@pierre/diffs/dist/utils/getFileRendererOptions.js.map +1 -0
- package/node_modules/@pierre/diffs/dist/utils/iterateOverDiff.js +29 -30
- package/node_modules/@pierre/diffs/dist/utils/iterateOverDiff.js.map +1 -1
- package/node_modules/@pierre/diffs/dist/utils/parsePatchFiles.js +8 -1
- package/node_modules/@pierre/diffs/dist/utils/parsePatchFiles.js.map +1 -1
- package/node_modules/@pierre/diffs/dist/utils/virtualDiffLayout.d.ts +65 -0
- package/node_modules/@pierre/diffs/dist/utils/virtualDiffLayout.d.ts.map +1 -0
- package/node_modules/@pierre/diffs/dist/utils/virtualDiffLayout.js +94 -0
- package/node_modules/@pierre/diffs/dist/utils/virtualDiffLayout.js.map +1 -0
- package/node_modules/@pierre/diffs/dist/worker/WorkerPoolManager.d.ts +4 -1
- package/node_modules/@pierre/diffs/dist/worker/WorkerPoolManager.d.ts.map +1 -1
- package/node_modules/@pierre/diffs/dist/worker/WorkerPoolManager.js +49 -24
- package/node_modules/@pierre/diffs/dist/worker/WorkerPoolManager.js.map +1 -1
- package/node_modules/@pierre/diffs/dist/worker/types.d.ts +2 -0
- package/node_modules/@pierre/diffs/dist/worker/types.d.ts.map +1 -1
- package/node_modules/@pierre/diffs/dist/worker/worker-portable.js +163 -40
- package/node_modules/@pierre/diffs/dist/worker/worker-portable.js.map +1 -1
- package/node_modules/@pierre/diffs/dist/worker/worker.js +60 -30
- package/node_modules/@pierre/diffs/dist/worker/worker.js.map +1 -1
- package/node_modules/@pierre/diffs/package.json +1 -1
- package/node_modules/@shikijs/core/node_modules/@shikijs/types/LICENSE +22 -0
- package/node_modules/@shikijs/core/node_modules/@shikijs/types/README.md +7 -0
- package/node_modules/@shikijs/core/node_modules/@shikijs/types/dist/index.d.mts +885 -0
- package/node_modules/@shikijs/core/node_modules/@shikijs/types/dist/index.mjs +8 -0
- package/node_modules/@shikijs/core/node_modules/@shikijs/types/package.json +36 -0
- package/node_modules/@shikijs/engine-javascript/node_modules/@shikijs/types/LICENSE +22 -0
- package/node_modules/@shikijs/engine-javascript/node_modules/@shikijs/types/README.md +7 -0
- package/node_modules/@shikijs/engine-javascript/node_modules/@shikijs/types/dist/index.d.mts +885 -0
- package/node_modules/@shikijs/engine-javascript/node_modules/@shikijs/types/dist/index.mjs +8 -0
- package/node_modules/@shikijs/engine-javascript/node_modules/@shikijs/types/package.json +36 -0
- package/node_modules/@shikijs/engine-oniguruma/node_modules/@shikijs/types/LICENSE +22 -0
- package/node_modules/@shikijs/engine-oniguruma/node_modules/@shikijs/types/README.md +7 -0
- package/node_modules/@shikijs/engine-oniguruma/node_modules/@shikijs/types/dist/index.d.mts +885 -0
- package/node_modules/@shikijs/engine-oniguruma/node_modules/@shikijs/types/dist/index.mjs +8 -0
- package/node_modules/@shikijs/engine-oniguruma/node_modules/@shikijs/types/package.json +36 -0
- package/node_modules/@shikijs/langs/dist/apex.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/bird2.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/c3.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/cobol.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/csharp.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/css.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/dart.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/emacs-lisp.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/es-tag-sql.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/go.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/hack.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/julia.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/just.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/kusto.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/latex.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/luau.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/nextflow-groovy.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/php.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/ruby.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/sql.mjs +1 -1
- package/node_modules/@shikijs/langs/dist/typespec.mjs +1 -1
- package/node_modules/@shikijs/langs/package.json +6 -3
- package/node_modules/@shikijs/themes/node_modules/@shikijs/types/LICENSE +22 -0
- package/node_modules/@shikijs/themes/node_modules/@shikijs/types/README.md +7 -0
- package/node_modules/@shikijs/themes/node_modules/@shikijs/types/dist/index.d.mts +885 -0
- package/node_modules/@shikijs/themes/node_modules/@shikijs/types/dist/index.mjs +8 -0
- package/node_modules/@shikijs/themes/node_modules/@shikijs/types/package.json +36 -0
- package/node_modules/@shikijs/transformers/node_modules/@shikijs/types/LICENSE +22 -0
- package/node_modules/@shikijs/transformers/node_modules/@shikijs/types/README.md +7 -0
- package/node_modules/@shikijs/transformers/node_modules/@shikijs/types/dist/index.d.mts +885 -0
- package/node_modules/@shikijs/transformers/node_modules/@shikijs/types/dist/index.mjs +8 -0
- package/node_modules/@shikijs/transformers/node_modules/@shikijs/types/package.json +36 -0
- package/node_modules/@shikijs/types/dist/index.d.mts +686 -684
- package/node_modules/@shikijs/types/dist/index.mjs +8 -7
- package/node_modules/@shikijs/types/package.json +6 -3
- package/node_modules/diff/CONTRIBUTING.md +1 -1
- package/node_modules/diff/dist/diff.js +32 -73
- package/node_modules/diff/dist/diff.min.js +1 -1
- package/node_modules/diff/libcjs/diff/word.d.ts.map +1 -1
- package/node_modules/diff/libcjs/diff/word.js +31 -15
- package/node_modules/diff/libcjs/util/string.d.ts +2 -14
- package/node_modules/diff/libcjs/util/string.d.ts.map +1 -1
- package/node_modules/diff/libcjs/util/string.js +2 -61
- package/node_modules/diff/libesm/diff/word.d.ts.map +1 -1
- package/node_modules/diff/libesm/diff/word.js +31 -16
- package/node_modules/diff/libesm/util/string.d.ts +2 -14
- package/node_modules/diff/libesm/util/string.d.ts.map +1 -1
- package/node_modules/diff/libesm/util/string.js +2 -58
- package/node_modules/diff/package.json +24 -22
- package/node_modules/diff/release-notes.md +0 -28
- package/node_modules/shiki/node_modules/@shikijs/langs/LICENSE +22 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/README.md +7 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/1c-query.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/1c-query.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/1c.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/1c.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/abap.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/abap.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/actionscript-3.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/actionscript-3.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ada.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ada.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/adoc.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/adoc.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-expression.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-expression.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-html.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-html.mjs +16 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-inline-style.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-inline-style.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-inline-template.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-inline-template.mjs +10 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-let-declaration.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-let-declaration.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-template-blocks.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-template-blocks.mjs +10 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-template.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-template.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-ts.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/angular-ts.mjs +18 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/apache.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/apache.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/apex.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/apex.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/apl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/apl.mjs +16 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/applescript.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/applescript.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ara.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ara.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/asciidoc.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/asciidoc.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/asm.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/asm.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/astro.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/astro.mjs +18 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/awk.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/awk.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ballerina.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ballerina.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bash.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bash.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bat.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bat.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/batch.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/batch.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/be.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/be.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/beancount.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/beancount.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/berry.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/berry.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bibtex.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bibtex.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bicep.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bicep.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bird.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bird.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bird2.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bird2.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/blade.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/blade.mjs +20 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bsl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/bsl.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/c.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/c.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/c3.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/c3.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cadence.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cadence.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cairo.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cairo.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cdc.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cdc.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cjs.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cjs.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/clarity.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/clarity.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/clj.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/clj.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/clojure.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/clojure.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/closure-templates.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/closure-templates.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cmake.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cmake.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cmd.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cmd.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cobol.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cobol.mjs +10 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/codeowners.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/codeowners.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/codeql.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/codeql.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/coffee.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/coffee.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/coffeescript.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/coffeescript.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/common-lisp.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/common-lisp.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/console.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/console.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/coq.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/coq.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cpp-macro.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cpp-macro.mjs +12 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cpp.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cpp.mjs +14 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cql.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cql.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/crystal.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/crystal.mjs +18 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cs.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cs.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/csharp.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/csharp.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/css.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/css.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/csv.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/csv.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cts.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cts.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cue.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cue.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cypher.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/cypher.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/d.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/d.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/dart.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/dart.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/dax.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/dax.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/desktop.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/desktop.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/diff.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/diff.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/docker.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/docker.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/dockerfile.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/dockerfile.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/dotenv.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/dotenv.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/dream-maker.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/dream-maker.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/edge.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/edge.mjs +12 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/elisp.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/elisp.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/elixir.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/elixir.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/elm.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/elm.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/emacs-lisp.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/emacs-lisp.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/erb.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/erb.mjs +10 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/erl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/erl.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/erlang.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/erlang.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/es-tag-css.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/es-tag-css.mjs +12 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/es-tag-glsl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/es-tag-glsl.mjs +12 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/es-tag-html.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/es-tag-html.mjs +12 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/es-tag-sql.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/es-tag-sql.mjs +10 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/es-tag-xml.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/es-tag-xml.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f03.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f03.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f08.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f08.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f18.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f18.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f77.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f77.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f90.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f90.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f95.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/f95.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fennel.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fennel.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fish.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fish.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fluent.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fluent.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/for.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/for.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fortran-fixed-form.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fortran-fixed-form.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fortran-free-form.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fortran-free-form.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fs.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fs.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fsharp.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fsharp.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fsl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/fsl.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ftl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ftl.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gd.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gd.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gdresource.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gdresource.mjs +10 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gdscript.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gdscript.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gdshader.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gdshader.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/genie.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/genie.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gherkin.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gherkin.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/git-commit.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/git-commit.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/git-rebase.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/git-rebase.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gjs.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gjs.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gleam.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gleam.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/glimmer-js.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/glimmer-js.mjs +14 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/glimmer-ts.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/glimmer-ts.mjs +14 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/glsl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/glsl.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gn.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gn.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gnuplot.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gnuplot.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/go.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/go.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gql.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gql.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/graphql.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/graphql.mjs +14 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/groovy.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/groovy.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gts.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/gts.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hack.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hack.mjs +10 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/haml.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/haml.mjs +10 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/handlebars.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/handlebars.mjs +14 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/haskell.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/haskell.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/haxe.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/haxe.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hbs.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hbs.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hcl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hcl.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hjson.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hjson.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hlsl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hlsl.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hs.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hs.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/html-derivative.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/html-derivative.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/html.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/html.mjs +10 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/http.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/http.mjs +14 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hurl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hurl.mjs +12 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hxml.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hxml.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hy.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/hy.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/imba.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/imba.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/index.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/index.mjs +353 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ini.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ini.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jade.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jade.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/java.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/java.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/javascript.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/javascript.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jinja-html.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jinja-html.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jinja.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jinja.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jison.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jison.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jl.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/js.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/js.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/json.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/json.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/json5.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/json5.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jsonc.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jsonc.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jsonl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jsonl.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jsonnet.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jsonnet.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jssm.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jssm.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jsx.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/jsx.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/julia.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/julia.mjs +16 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/just.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/just.mjs +18 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/kdl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/kdl.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/kotlin.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/kotlin.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/kql.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/kql.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/kt.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/kt.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/kts.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/kts.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/kusto.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/kusto.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/latex.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/latex.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/lean.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/lean.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/lean4.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/lean4.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/less.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/less.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/liquid.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/liquid.mjs +14 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/lisp.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/lisp.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/lit.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/lit.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/llvm.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/llvm.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/log.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/log.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/logo.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/logo.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/lua.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/lua.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/luau.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/luau.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/make.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/make.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/makefile.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/makefile.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/markdown-nix.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/markdown-nix.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/markdown-vue.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/markdown-vue.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/markdown.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/markdown.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/marko.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/marko.mjs +14 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/matlab.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/matlab.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mbt.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mbt.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mbti.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mbti.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/md.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/md.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mdc.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mdc.mjs +12 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mdx.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mdx.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mediawiki.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mediawiki.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mermaid.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mermaid.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mips.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mips.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mipsasm.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mipsasm.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mjs.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mjs.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mmd.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mmd.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mojo.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mojo.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/moonbit.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/moonbit.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/move.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/move.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mts.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/mts.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nar.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nar.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/narrat.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/narrat.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nextflow-groovy.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nextflow-groovy.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nextflow.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nextflow.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nf.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nf.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nginx.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nginx.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nim.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nim.mjs +20 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nix.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nix.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nu.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nu.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nushell.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/nushell.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/objc.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/objc.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/objective-c.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/objective-c.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/objective-cpp.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/objective-cpp.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ocaml.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ocaml.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/odin.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/odin.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/openscad.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/openscad.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/pascal.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/pascal.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/perl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/perl.mjs +16 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/perl6.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/perl6.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/php.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/php.mjs +18 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/pkl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/pkl.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/plsql.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/plsql.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/po.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/po.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/polar.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/polar.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/postcss.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/postcss.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/pot.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/pot.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/potx.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/potx.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/powerquery.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/powerquery.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/powershell.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/powershell.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/prisma.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/prisma.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/prolog.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/prolog.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/properties.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/properties.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/proto.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/proto.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/protobuf.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/protobuf.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ps.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ps.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ps1.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ps1.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/pug.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/pug.mjs +12 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/puppet.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/puppet.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/purescript.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/purescript.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/py.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/py.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/python.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/python.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ql.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ql.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/qml.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/qml.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/qmldir.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/qmldir.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/qss.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/qss.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/r.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/r.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/racket.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/racket.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/raku.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/raku.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/razor.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/razor.mjs +10 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/rb.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/rb.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/reg.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/reg.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/regex.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/regex.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/regexp.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/regexp.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/rel.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/rel.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/riscv.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/riscv.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ron.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ron.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/rosmsg.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/rosmsg.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/rs.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/rs.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/rst.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/rst.mjs +22 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ruby.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ruby.mjs +30 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/rust.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/rust.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/sas.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/sas.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/sass.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/sass.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/scad.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/scad.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/scala.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/scala.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/scheme.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/scheme.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/scss.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/scss.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/sdbl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/sdbl.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/sh.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/sh.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/shader.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/shader.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/shaderlab.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/shaderlab.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/shell.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/shell.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/shellscript.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/shellscript.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/shellsession.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/shellsession.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/smalltalk.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/smalltalk.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/solidity.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/solidity.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/soy.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/soy.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/sparql.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/sparql.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/spl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/spl.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/splunk.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/splunk.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/sql.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/sql.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ssh-config.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ssh-config.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/stata.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/stata.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/styl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/styl.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/stylus.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/stylus.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/surql.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/surql.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/surrealql.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/surrealql.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/svelte.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/svelte.mjs +14 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/swift.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/swift.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/system-verilog.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/system-verilog.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/systemd.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/systemd.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/talon.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/talon.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/talonscript.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/talonscript.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tasl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tasl.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tcl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tcl.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/templ.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/templ.mjs +12 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/terraform.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/terraform.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tex.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tex.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tf.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tf.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tfvars.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tfvars.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/toml.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/toml.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tres.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tres.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ts-tags.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ts-tags.mjs +18 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ts.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/ts.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tscn.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tscn.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tsp.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tsp.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tsv.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tsv.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tsx.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/tsx.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/turtle.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/turtle.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/twig.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/twig.mjs +18 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/typ.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/typ.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/typescript.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/typescript.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/typespec.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/typespec.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/typst.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/typst.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/v.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/v.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vala.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vala.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vb.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vb.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/verilog.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/verilog.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vhdl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vhdl.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vim.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vim.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/viml.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/viml.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vimscript.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vimscript.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vue-directives.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vue-directives.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vue-html.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vue-html.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vue-interpolations.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vue-interpolations.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vue-sfc-style-variable-injection.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vue-sfc-style-variable-injection.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vue-vine.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vue-vine.mjs +18 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vue.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vue.mjs +26 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vy.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vy.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vyper.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/vyper.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wasm.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wasm.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wenyan.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wenyan.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wgsl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wgsl.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wiki.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wiki.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wikitext.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wikitext.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wit.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wit.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wl.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wolfram.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/wolfram.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/xml.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/xml.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/xsl.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/xsl.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/yaml.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/yaml.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/yml.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/yml.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/zenscript.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/zenscript.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/zig.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/zig.mjs +5 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/zsh.d.mts +3 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/dist/zsh.mjs +2 -0
- package/node_modules/shiki/node_modules/@shikijs/langs/package.json +384 -0
- package/node_modules/shiki/node_modules/@shikijs/types/LICENSE +22 -0
- package/node_modules/shiki/node_modules/@shikijs/types/README.md +7 -0
- package/node_modules/shiki/node_modules/@shikijs/types/dist/index.d.mts +885 -0
- package/node_modules/shiki/node_modules/@shikijs/types/dist/index.mjs +8 -0
- package/node_modules/shiki/node_modules/@shikijs/types/package.json +36 -0
- package/npm-shrinkwrap.json +90 -14
- package/package.json +10 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileDiff.js","names":["options: FileDiffOptions<LAnnotation>","workerManager?: WorkerPoolManager | undefined","targetUnifiedIndex: number | undefined","targetSplitIndex: number | undefined","error: unknown","content","codeElements: HTMLElement[]","preProperties: PrePropertiesConfig"],"sources":["../../src/components/FileDiff.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement } from 'hast';\nimport { toHtml } from 'hast-util-to-html';\n\nimport {\n CUSTOM_HEADER_SLOT_ID,\n DEFAULT_THEMES,\n DEFAULT_TOKENIZE_MAX_LENGTH,\n DIFFS_TAG_NAME,\n EMPTY_RENDER_RANGE,\n HEADER_METADATA_SLOT_ID,\n HEADER_PREFIX_SLOT_ID,\n THEME_CSS_ATTRIBUTE,\n UNSAFE_CSS_ATTRIBUTE,\n} from '../constants';\nimport {\n type GetHoveredLineResult,\n type GetLineIndexUtility,\n InteractionManager,\n type InteractionManagerBaseOptions,\n pluckInteractionOptions,\n type SelectionWriteOptions,\n} from '../managers/InteractionManager';\nimport { ResizeManager } from '../managers/ResizeManager';\nimport { ScrollSyncManager } from '../managers/ScrollSyncManager';\nimport {\n DiffHunksRenderer,\n type DiffHunksRendererOptions,\n type HunksRenderResult,\n} from '../renderers/DiffHunksRenderer';\nimport { SVGSpriteSheet } from '../sprite';\nimport type {\n AppliedThemeStyleCache,\n BaseDiffOptions,\n CustomPreProperties,\n DiffLineAnnotation,\n ExpansionDirections,\n FileContents,\n FileDiffMetadata,\n HunkData,\n HunkSeparators,\n PrePropertiesConfig,\n RenderHeaderMetadataCallback,\n RenderHeaderPrefixCallback,\n RenderRange,\n SelectedLineRange,\n SelectionSide,\n ThemeTypes,\n} from '../types';\nimport { areDiffLineAnnotationsEqual } from '../utils/areDiffLineAnnotationsEqual';\nimport { areFilesEqual } from '../utils/areFilesEqual';\nimport { areHunkDataEqual } from '../utils/areHunkDataEqual';\nimport { arePrePropertiesEqual } from '../utils/arePrePropertiesEqual';\nimport { areRenderRangesEqual } from '../utils/areRenderRangesEqual';\nimport { areThemesEqual } from '../utils/areThemesEqual';\nimport { createAnnotationWrapperNode } from '../utils/createAnnotationWrapperNode';\nimport { createGutterUtilityContentNode } from '../utils/createGutterUtilityContentNode';\nimport { createUnsafeCSSStyleNode } from '../utils/createUnsafeCSSStyleNode';\nimport {\n patchScrollbarGutterSize,\n wrapThemeCSS,\n wrapUnsafeCSS,\n} from '../utils/cssWrappers';\nimport { getLineAnnotationName } from '../utils/getLineAnnotationName';\nimport { getOrCreateCodeNode } from '../utils/getOrCreateCodeNode';\nimport { upsertHostThemeStyle } from '../utils/hostTheme';\nimport { isDiffPlainText } from '../utils/isDiffPlainText';\nimport { isStyleNode } from '../utils/isStyleNode';\nimport { parseDiffFromFile } from '../utils/parseDiffFromFile';\nimport { prerenderHTMLIfNecessary } from '../utils/prerenderHTMLIfNecessary';\nimport { getMeasuredScrollbarGutter } from '../utils/scrollbarGutter';\nimport { setPreNodeProperties } from '../utils/setWrapperNodeProps';\nimport type { WorkerPoolManager } from '../worker';\nimport { DiffsContainerLoaded } from './web-components';\n\nexport interface FileDiffRenderProps<LAnnotation> {\n fileDiff?: FileDiffMetadata;\n oldFile?: FileContents;\n newFile?: FileContents;\n deferManagers?: boolean;\n forceRender?: boolean;\n preventEmit?: boolean;\n fileContainer?: HTMLElement;\n containerWrapper?: HTMLElement;\n lineAnnotations?: DiffLineAnnotation<LAnnotation>[];\n renderRange?: RenderRange;\n}\n\nexport interface FileDiffHydrationProps<LAnnotation> extends Omit<\n FileDiffRenderProps<LAnnotation>,\n 'fileContainer'\n> {\n fileContainer: HTMLElement;\n prerenderedHTML?: string;\n}\n\nexport interface FileDiffOptions<LAnnotation>\n extends\n Omit<BaseDiffOptions, 'hunkSeparators'>,\n InteractionManagerBaseOptions<'diff'> {\n hunkSeparators?:\n | Exclude<HunkSeparators, 'custom'> /**\n * @deprecated Custom hunk separator functions are deprecated and will be\n * removed in a future version.\n */\n | ((\n hunk: HunkData,\n instance: FileDiff<LAnnotation>\n ) => HTMLElement | DocumentFragment | null | undefined);\n disableFileHeader?: boolean;\n renderHeaderPrefix?: RenderHeaderPrefixCallback;\n renderHeaderMetadata?: RenderHeaderMetadataCallback;\n renderCustomHeader?: RenderHeaderMetadataCallback;\n /**\n * When true, errors during rendering are rethrown instead of being caught\n * and displayed in the DOM. Useful for testing or when you want to handle\n * errors yourself.\n */\n disableErrorHandling?: boolean;\n renderAnnotation?(\n annotation: DiffLineAnnotation<LAnnotation>\n ): HTMLElement | undefined;\n renderGutterUtility?(\n getHoveredRow: () => GetHoveredLineResult<'diff'> | undefined\n ): HTMLElement | null | undefined;\n\n onPostRender?(node: HTMLElement, instance: FileDiff<LAnnotation>): unknown;\n}\n\ninterface AnnotationElementCache<LAnnotation> {\n element: HTMLElement;\n annotation: DiffLineAnnotation<LAnnotation>;\n}\n\ninterface CustomHunkElementCache {\n element: HTMLElement;\n hunkData: HunkData;\n}\n\ninterface ColumnElements {\n gutter: HTMLElement;\n content: HTMLElement;\n}\n\ninterface TrimColumnsToOverlapProps {\n columns:\n | [ColumnElements | undefined, ColumnElements | undefined]\n | ColumnElements;\n diffStyle: 'split' | 'unified';\n overlapEnd: number;\n overlapStart: number;\n previousStart: number;\n trimEnd: number;\n trimStart: number;\n}\n\ninterface ApplyPartialRenderProps {\n previousRenderRange: RenderRange | undefined;\n renderRange: RenderRange | undefined;\n}\n\ninterface HydrationSetup<LAnnotation> {\n fileDiff: FileDiffMetadata | undefined;\n lineAnnotations: DiffLineAnnotation<LAnnotation>[] | undefined;\n oldFile?: FileContents;\n newFile?: FileContents;\n}\n\nlet instanceId = -1;\n\nexport class FileDiff<LAnnotation = undefined> {\n // NOTE(amadeus): We sorta need this to ensure the web-component file is\n // properly loaded\n static LoadedCustomComponent: boolean = DiffsContainerLoaded;\n\n readonly __id: string = `file-diff:${++instanceId}`;\n\n protected fileContainer: HTMLElement | undefined;\n protected spriteSVG: SVGElement | undefined;\n protected pre: HTMLPreElement | undefined;\n protected codeUnified: HTMLElement | undefined;\n protected codeDeletions: HTMLElement | undefined;\n protected codeAdditions: HTMLElement | undefined;\n protected bufferBefore: HTMLElement | undefined;\n protected bufferAfter: HTMLElement | undefined;\n protected themeCSSStyle: HTMLStyleElement | undefined;\n protected appliedThemeCSS: AppliedThemeStyleCache | undefined;\n protected hasAdoptedThemeCSS = false;\n protected unsafeCSSStyle: HTMLStyleElement | undefined;\n protected appliedUnsafeCSS: string | undefined;\n protected gutterUtilityContent: HTMLElement | undefined;\n\n protected headerElement: HTMLElement | undefined;\n protected headerPrefix: HTMLElement | undefined;\n protected headerMetadata: HTMLElement | undefined;\n protected headerCustom: HTMLElement | undefined;\n protected separatorCache: Map<string, CustomHunkElementCache> = new Map();\n protected errorWrapper: HTMLElement | undefined;\n protected placeHolder: HTMLElement | undefined;\n\n protected hunksRenderer: DiffHunksRenderer<LAnnotation>;\n protected resizeManager: ResizeManager;\n protected scrollSyncManager: ScrollSyncManager;\n protected interactionManager: InteractionManager<'diff'>;\n\n protected annotationCache: Map<string, AnnotationElementCache<LAnnotation>> =\n new Map();\n protected lineAnnotations: DiffLineAnnotation<LAnnotation>[] = [];\n protected managersDirty = false;\n\n protected deletionFile: FileContents | undefined;\n protected additionFile: FileContents | undefined;\n protected fileDiff: FileDiffMetadata | undefined;\n protected renderRange: RenderRange | undefined;\n protected appliedPreAttributes: PrePropertiesConfig | undefined;\n protected lastRenderedHeaderHTML: string | undefined;\n protected cachedHeaderHTML: string | undefined;\n protected lastRowCount: number | undefined;\n\n protected enabled = true;\n\n constructor(\n public options: FileDiffOptions<LAnnotation> = { theme: DEFAULT_THEMES },\n protected workerManager?: WorkerPoolManager | undefined,\n protected isContainerManaged = false\n ) {\n this.hunksRenderer = this.createHunksRenderer(options);\n this.resizeManager = new ResizeManager();\n this.scrollSyncManager = new ScrollSyncManager();\n this.interactionManager = new InteractionManager(\n 'diff',\n pluckInteractionOptions(\n options,\n typeof options.hunkSeparators === 'function' ||\n (options.hunkSeparators ?? 'line-info') === 'line-info' ||\n options.hunkSeparators === 'line-info-basic'\n ? this.handleExpandHunk\n : undefined,\n this.getLineIndex\n )\n );\n this.workerManager?.subscribeToThemeChanges(this);\n this.enabled = true;\n }\n\n protected handleHighlightRender = (): void => {\n this.rerender();\n };\n\n protected getHunksRendererOptions(\n options: FileDiffOptions<LAnnotation>\n ): DiffHunksRendererOptions {\n return {\n ...options,\n headerRenderMode:\n options.renderCustomHeader != null ? 'custom' : 'default',\n hunkSeparators:\n typeof options.hunkSeparators === 'function'\n ? 'custom'\n : options.hunkSeparators,\n };\n }\n\n protected createHunksRenderer(\n options: FileDiffOptions<LAnnotation>\n ): DiffHunksRenderer<LAnnotation> {\n return new DiffHunksRenderer(\n this.getHunksRendererOptions(options),\n this.handleHighlightRender,\n this.workerManager\n );\n }\n\n public getLineIndex: GetLineIndexUtility = (\n lineNumber: number,\n side: SelectionSide = 'additions'\n ) => {\n if (this.fileDiff == null) {\n return undefined;\n }\n const lastHunk = this.fileDiff.hunks.at(-1);\n let targetUnifiedIndex: number | undefined;\n let targetSplitIndex: number | undefined;\n hunkIterator: for (const hunk of this.fileDiff.hunks) {\n let currentLineNumber =\n side === 'deletions' ? hunk.deletionStart : hunk.additionStart;\n const hunkCount =\n side === 'deletions' ? hunk.deletionCount : hunk.additionCount;\n let splitIndex = hunk.splitLineStart;\n let unifiedIndex = hunk.unifiedLineStart;\n\n // If we've selected a line between or before a hunk,\n // we should grab its index here\n if (lineNumber < currentLineNumber) {\n const difference = currentLineNumber - lineNumber;\n targetUnifiedIndex = Math.max(unifiedIndex - difference, 0);\n targetSplitIndex = Math.max(splitIndex - difference, 0);\n break hunkIterator;\n }\n\n if (lineNumber >= currentLineNumber + hunkCount) {\n if (hunk === lastHunk) {\n const difference = lineNumber - (currentLineNumber + hunkCount);\n targetUnifiedIndex =\n unifiedIndex + hunk.unifiedLineCount + difference;\n targetSplitIndex = splitIndex + hunk.splitLineCount + difference;\n break hunkIterator;\n }\n continue;\n }\n\n for (const content of hunk.hunkContent) {\n if (content.type === 'context') {\n if (lineNumber < currentLineNumber + content.lines) {\n const difference = lineNumber - currentLineNumber;\n targetSplitIndex = splitIndex + difference;\n targetUnifiedIndex = unifiedIndex + difference;\n break hunkIterator;\n } else {\n currentLineNumber += content.lines;\n splitIndex += content.lines;\n unifiedIndex += content.lines;\n }\n } else {\n const sideCount =\n side === 'deletions' ? content.deletions : content.additions;\n if (lineNumber < currentLineNumber + sideCount) {\n const indexDifference = lineNumber - currentLineNumber;\n targetUnifiedIndex =\n unifiedIndex +\n (side === 'additions' ? content.deletions : 0) +\n indexDifference;\n targetSplitIndex = splitIndex + indexDifference;\n\n break hunkIterator;\n } else {\n currentLineNumber += sideCount;\n splitIndex += Math.max(content.deletions, content.additions);\n unifiedIndex += content.deletions + content.additions;\n }\n }\n }\n\n break hunkIterator;\n }\n\n if (targetUnifiedIndex == null || targetSplitIndex == null) {\n return undefined;\n }\n return [targetUnifiedIndex, targetSplitIndex];\n };\n\n // FIXME(amadeus): This is a bit of a looming issue that I'll need to resolve:\n // * Do we publicly allow merging of options or do we have individualized setters?\n // * When setting new options, we need to figure out what settings require a\n // re-render and which can just be applied more elegantly\n // * There's also an issue of options that live here on the File class and\n // those that live on the Hunk class, and it's a bit of an issue with passing\n // settings down and mirroring them (not great...)\n public setOptions(options: FileDiffOptions<LAnnotation> | undefined): void {\n if (options == null) return;\n this.options = options;\n this.cachedHeaderHTML = undefined;\n this.hunksRenderer.setOptions(this.getHunksRendererOptions(options));\n this.interactionManager.setOptions(\n pluckInteractionOptions(\n options,\n typeof options.hunkSeparators === 'function' ||\n (options.hunkSeparators ?? 'line-info') === 'line-info' ||\n options.hunkSeparators === 'line-info-basic'\n ? this.handleExpandHunk\n : undefined,\n this.getLineIndex\n )\n );\n }\n\n private mergeOptions(options: Partial<FileDiffOptions<LAnnotation>>): void {\n this.options = { ...this.options, ...options };\n }\n\n public setThemeType(themeType: ThemeTypes): void {\n if ((this.options.themeType ?? 'system') === themeType) {\n return;\n }\n this.mergeOptions({ themeType });\n this.applyCachedThemeState(themeType);\n }\n\n private applyCachedThemeState(themeType: ThemeTypes): boolean {\n if (\n typeof this.options.theme === 'string' ||\n this.fileContainer == null ||\n this.appliedThemeCSS == null\n ) {\n return false;\n }\n const effectiveThemeType = this.appliedThemeCSS.baseThemeType ?? themeType;\n if (this.appliedThemeCSS.themeType === effectiveThemeType) {\n return false;\n }\n this.applyThemeState(\n this.fileContainer,\n this.appliedThemeCSS.themeStyles,\n themeType,\n this.appliedThemeCSS.baseThemeType\n );\n return true;\n }\n\n private hasThemeChanged(): boolean {\n return (\n this.appliedThemeCSS != null &&\n !areThemesEqual(\n this.appliedThemeCSS.theme,\n this.options.theme ?? DEFAULT_THEMES\n )\n );\n }\n\n public getHoveredLine = (): GetHoveredLineResult<'diff'> | undefined => {\n return this.interactionManager.getHoveredLine();\n };\n\n public setLineAnnotations(\n lineAnnotations: DiffLineAnnotation<LAnnotation>[]\n ): void {\n this.lineAnnotations = lineAnnotations;\n }\n\n private canPartiallyRender(\n forceRender: boolean,\n annotationsChanged: boolean,\n didContentChange: boolean\n ): boolean {\n if (\n forceRender ||\n annotationsChanged ||\n didContentChange ||\n typeof this.options.hunkSeparators === 'function'\n ) {\n return false;\n }\n return true;\n }\n\n public setSelectedLines(\n range: SelectedLineRange | null,\n options?: SelectionWriteOptions\n ): void {\n this.interactionManager.setSelection(range, options);\n }\n\n public flushManagers(): void {\n if (!this.managersDirty || this.pre == null) {\n this.managersDirty = false;\n return;\n }\n\n const { diffStyle = 'split', overflow = 'scroll' } = this.options;\n this.interactionManager.setup(this.pre);\n this.resizeManager.setup(this.pre, overflow === 'wrap');\n if (overflow === 'scroll' && diffStyle === 'split') {\n this.scrollSyncManager.setup(\n this.pre,\n this.codeDeletions,\n this.codeAdditions\n );\n } else {\n this.scrollSyncManager.cleanUp();\n }\n this.managersDirty = false;\n }\n\n public cleanUp(recycle: boolean = false): void {\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n this.scrollSyncManager.cleanUp();\n this.managersDirty = false;\n this.workerManager?.unsubscribeToThemeChanges(this);\n this.renderRange = undefined;\n\n // Clean up the elements\n if (!this.isContainerManaged) {\n this.fileContainer?.remove();\n }\n this.fileContainer = undefined;\n this.lineAnnotations = [];\n this.clearAuxiliaryNodes();\n this.annotationCache.clear();\n this.pre = undefined;\n this.codeUnified = undefined;\n this.codeDeletions = undefined;\n this.codeAdditions = undefined;\n this.bufferBefore = undefined;\n this.bufferAfter = undefined;\n this.appliedPreAttributes = undefined;\n this.headerElement = undefined;\n this.headerPrefix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n this.placeHolder = undefined;\n this.lastRenderedHeaderHTML = undefined;\n if (!recycle) {\n this.cachedHeaderHTML = undefined;\n }\n this.errorWrapper = undefined;\n this.spriteSVG = undefined;\n this.lastRowCount = undefined;\n this.themeCSSStyle = undefined;\n this.appliedThemeCSS = undefined;\n this.hasAdoptedThemeCSS = false;\n this.unsafeCSSStyle = undefined;\n this.appliedUnsafeCSS = undefined;\n\n if (recycle) {\n this.hunksRenderer.recycle();\n } else {\n this.hunksRenderer.cleanUp();\n this.workerManager = undefined;\n // Clean up the data\n this.fileDiff = undefined;\n this.deletionFile = undefined;\n this.additionFile = undefined;\n }\n\n this.enabled = false;\n }\n\n public virtualizedSetup(): void {\n this.enabled = true;\n this.workerManager?.subscribeToThemeChanges(this);\n }\n\n public hydrate(props: FileDiffHydrationProps<LAnnotation>): void {\n const {\n fileContainer,\n prerenderedHTML,\n preventEmit = false,\n lineAnnotations,\n oldFile,\n newFile,\n fileDiff,\n } = props;\n this.hydrateElements(fileContainer, prerenderedHTML);\n if (\n shouldRenderCode(\n this.pre,\n hasDiffContent({ fileDiff, oldFile, newFile }),\n this.options.collapsed\n ) ||\n shouldRenderHeader(\n this.headerElement,\n hasDiffHeaderContent({ fileDiff, oldFile, newFile }),\n this.options.disableFileHeader\n )\n ) {\n this.render({ ...props, preventEmit: true });\n }\n // Otherwise orchestrate our setup\n else {\n this.hydrationSetup({\n fileDiff,\n oldFile,\n newFile,\n lineAnnotations,\n });\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n }\n\n protected hydrateElements(\n fileContainer: HTMLElement,\n prerenderedHTML: string | undefined\n ): void {\n prerenderHTMLIfNecessary(fileContainer, prerenderedHTML);\n for (const element of fileContainer.shadowRoot?.children ?? []) {\n if (element instanceof SVGElement) {\n this.spriteSVG = element;\n continue;\n }\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (element instanceof HTMLPreElement) {\n this.pre = element;\n for (const code of element.children) {\n if (\n !(code instanceof HTMLElement) ||\n code.tagName.toLowerCase() !== 'code'\n ) {\n continue;\n }\n if ('deletions' in code.dataset) {\n this.codeDeletions = code;\n }\n if ('additions' in code.dataset) {\n this.codeAdditions = code;\n }\n if ('unified' in code.dataset) {\n this.codeUnified = code;\n }\n }\n continue;\n }\n if ('diffsHeader' in element.dataset) {\n this.headerElement = element;\n continue;\n }\n if (\n element instanceof HTMLStyleElement &&\n element.hasAttribute(THEME_CSS_ATTRIBUTE)\n ) {\n this.themeCSSStyle = element;\n continue;\n }\n if (\n element instanceof HTMLStyleElement &&\n element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)\n ) {\n this.unsafeCSSStyle = element;\n this.appliedUnsafeCSS = element.textContent;\n continue;\n }\n }\n if (this.pre != null) {\n this.syncCodeNodesFromPre(this.pre);\n this.pre.removeAttribute('data-dehydrated');\n }\n this.fileContainer = fileContainer;\n this.hydrateMeasuredScrollbar();\n }\n\n protected hydrationSetup({\n fileDiff,\n oldFile,\n newFile,\n lineAnnotations,\n }: HydrationSetup<LAnnotation>): void {\n // It's possible we are hydrating a pure-rename and therefore there will be\n // no pre element\n this.lineAnnotations = lineAnnotations ?? this.lineAnnotations;\n this.additionFile = newFile;\n this.deletionFile = oldFile;\n this.fileDiff =\n fileDiff ??\n (oldFile != null && newFile != null\n ? parseDiffFromFile(oldFile, newFile, this.options.parseDiffOptions)\n : undefined);\n\n if (this.pre == null) {\n return;\n }\n\n this.hunksRenderer.hydrate(this.fileDiff);\n // FIXME(amadeus): not sure how to handle this yet...\n // this.renderSeparators();\n this.renderAnnotations();\n this.renderGutterUtility();\n this.injectUnsafeCSS();\n this.managersDirty = true;\n this.flushManagers();\n }\n\n public rerender(): void {\n if (\n !this.enabled ||\n (this.fileDiff == null &&\n this.additionFile == null &&\n this.deletionFile == null)\n ) {\n return;\n }\n this.render({ forceRender: true, renderRange: this.renderRange });\n }\n\n // This wrapper must stay separate from `expandHunk` because subclasses like\n // `VirtualizedFileDiff` replace `expandHunk` with their own instance field\n // after `super()` returns. `InteractionManager` is created in this base\n // constructor, so it needs a stable callback that resolves `this.expandHunk`\n // at click time instead of capturing the base implementation too early.\n public handleExpandHunk = (\n hunkIndex: number,\n direction: ExpansionDirections,\n expansionLineCountOverride?: number\n ): void => {\n this.expandHunk(hunkIndex, direction, expansionLineCountOverride);\n };\n\n public expandHunk = (\n hunkIndex: number,\n direction: ExpansionDirections,\n expansionLineCountOverride?: number\n ): void => {\n this.hunksRenderer.expandHunk(\n hunkIndex,\n direction,\n expansionLineCountOverride\n );\n this.rerender();\n };\n\n public render({\n oldFile,\n newFile,\n fileDiff,\n deferManagers = false,\n forceRender = false,\n preventEmit = false,\n lineAnnotations,\n fileContainer,\n containerWrapper,\n renderRange,\n }: FileDiffRenderProps<LAnnotation>): boolean {\n if (!this.enabled) {\n // NOTE(amadeus): May need to be a silent failure? Making it loud for now\n // to better understand it\n throw new Error(\n 'FileDiff.render: attempting to call render after cleaned up'\n );\n }\n const { collapsed = false, themeType = 'system' } = this.options;\n const nextRenderRange = collapsed ? undefined : renderRange;\n const themeChanged = this.hasThemeChanged();\n const filesDidChange =\n oldFile != null &&\n newFile != null &&\n (!areFilesEqual(oldFile, this.deletionFile) ||\n !areFilesEqual(newFile, this.additionFile));\n let diffDidChange = fileDiff != null && fileDiff !== this.fileDiff;\n const annotationsChanged =\n lineAnnotations != null &&\n (lineAnnotations.length > 0 || this.lineAnnotations.length > 0)\n ? lineAnnotations !== this.lineAnnotations\n : false;\n\n if (\n !collapsed &&\n areRenderRangesEqual(nextRenderRange, this.renderRange) &&\n !forceRender &&\n !annotationsChanged &&\n !themeChanged &&\n // If using the fileDiff API, lets check to see if they are equal to\n // avoid doing work\n ((fileDiff != null && fileDiff === this.fileDiff) ||\n // If using the oldFile/newFile API then lets check to see if they are\n // equal\n (fileDiff == null && !filesDidChange))\n ) {\n return this.applyCachedThemeState(themeType);\n }\n\n const { renderRange: previousRenderRange } = this;\n this.renderRange = nextRenderRange;\n this.deletionFile = oldFile;\n this.additionFile = newFile;\n\n if (fileDiff != null) {\n this.fileDiff = fileDiff;\n } else if (oldFile != null && newFile != null && filesDidChange) {\n diffDidChange = true;\n this.fileDiff = parseDiffFromFile(\n oldFile,\n newFile,\n this.options.parseDiffOptions\n );\n }\n if (diffDidChange) {\n this.cachedHeaderHTML = undefined;\n }\n\n if (lineAnnotations != null) {\n this.setLineAnnotations(lineAnnotations);\n }\n if (this.fileDiff == null) {\n return false;\n }\n this.hunksRenderer.setOptions(this.getHunksRendererOptions(this.options));\n\n this.hunksRenderer.setLineAnnotations(this.lineAnnotations);\n\n const { disableErrorHandling = false, disableFileHeader = false } =\n this.options;\n\n if (disableFileHeader) {\n // Remove existing header from DOM\n if (this.headerElement != null) {\n this.headerElement.remove();\n this.headerElement = undefined;\n this.lastRenderedHeaderHTML = undefined;\n }\n this.clearHeaderSlots();\n }\n fileContainer = this.getOrCreateFileContainer(\n fileContainer,\n containerWrapper\n );\n this.applyCachedThemeState(themeType);\n\n if (collapsed) {\n this.removeRenderedCode();\n this.clearAuxiliaryNodes();\n\n try {\n const hunksResult = this.hunksRenderer.renderDiff(\n this.fileDiff,\n EMPTY_RENDER_RANGE\n );\n if (hunksResult != null) {\n this.applyThemeState(\n fileContainer,\n hunksResult.themeStyles,\n themeType,\n hunksResult.baseThemeType\n );\n }\n if (hunksResult?.headerElement != null) {\n this.applyHeaderToDOM(hunksResult.headerElement, fileContainer);\n }\n this.renderSeparators([]);\n this.injectUnsafeCSS();\n } catch (error: unknown) {\n if (disableErrorHandling) {\n throw error;\n }\n console.error(error);\n if (error instanceof Error) {\n this.applyErrorToDOM(error, fileContainer);\n }\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n return true;\n }\n\n try {\n const pre = this.getOrCreatePreNode(fileContainer);\n\n // Attempt to partially render\n const didPartiallyRender =\n this.canPartiallyRender(\n forceRender,\n annotationsChanged,\n filesDidChange || diffDidChange || themeChanged\n ) &&\n this.applyPartialRender({\n previousRenderRange,\n renderRange: nextRenderRange,\n });\n\n // If we were unable to partially render, perform a full render\n if (!didPartiallyRender) {\n const hunksResult = this.hunksRenderer.renderDiff(\n this.fileDiff,\n nextRenderRange\n );\n if (hunksResult == null) {\n // FIXME(amadeus): I don't think we actually need this check, as\n // DiffHunksRenderer should probably take care of it for us?\n if (this.workerManager?.isInitialized() === false) {\n void this.workerManager.initialize().then(() => this.rerender());\n }\n return false;\n }\n\n this.applyThemeState(\n fileContainer,\n hunksResult.themeStyles,\n themeType,\n hunksResult.baseThemeType\n );\n\n if (hunksResult.headerElement != null) {\n this.applyHeaderToDOM(hunksResult.headerElement, fileContainer);\n }\n if (\n hunksResult.additionsContentAST != null ||\n hunksResult.deletionsContentAST != null ||\n hunksResult.unifiedContentAST != null\n ) {\n this.applyHunksToDOM(pre, hunksResult);\n } else if (this.pre != null) {\n this.pre.remove();\n this.pre = undefined;\n }\n this.renderSeparators(hunksResult.hunkData);\n }\n\n this.applyBuffers(pre, nextRenderRange);\n this.injectUnsafeCSS();\n this.renderAnnotations();\n this.renderGutterUtility();\n\n this.managersDirty = true;\n if (!deferManagers) {\n this.flushManagers();\n }\n } catch (error: unknown) {\n if (disableErrorHandling) {\n throw error;\n }\n console.error(error);\n if (error instanceof Error) {\n this.applyErrorToDOM(error, fileContainer);\n }\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n return true;\n }\n\n protected emitPostRender(): void {\n if (this.fileContainer != null) {\n this.options.onPostRender?.(this.fileContainer, this);\n }\n }\n\n private removeRenderedCode(): void {\n this.resizeManager.cleanUp();\n this.scrollSyncManager.cleanUp();\n this.interactionManager.cleanUp();\n\n this.bufferBefore?.remove();\n this.bufferBefore = undefined;\n this.bufferAfter?.remove();\n this.bufferAfter = undefined;\n\n this.codeUnified?.remove();\n this.codeUnified = undefined;\n this.codeDeletions?.remove();\n this.codeDeletions = undefined;\n this.codeAdditions?.remove();\n this.codeAdditions = undefined;\n\n this.pre?.remove();\n this.pre = undefined;\n\n this.appliedPreAttributes = undefined;\n this.lastRowCount = undefined;\n }\n\n private clearAuxiliaryNodes(): void {\n for (const { element } of this.separatorCache.values()) {\n element.remove();\n }\n this.separatorCache.clear();\n\n for (const { element } of this.annotationCache.values()) {\n element.remove();\n }\n this.annotationCache.clear();\n\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n }\n\n public renderPlaceholder(height: number): boolean {\n if (this.fileContainer == null) {\n return false;\n }\n this.cleanChildNodes();\n\n if (this.placeHolder == null) {\n const shadowRoot =\n this.fileContainer.shadowRoot ??\n this.fileContainer.attachShadow({ mode: 'open' });\n this.placeHolder = document.createElement('div');\n this.placeHolder.dataset.placeholder = '';\n shadowRoot.appendChild(this.placeHolder);\n }\n this.placeHolder.style.setProperty('height', `${height}px`);\n return true;\n }\n\n public primeHighlightCache(): void {\n const { fileDiff, workerManager } = this;\n if (\n fileDiff == null ||\n workerManager == null ||\n isDiffPlainText(fileDiff)\n ) {\n return;\n }\n const tokenizeMaxLength =\n this.options.tokenizeMaxLength ?? DEFAULT_TOKENIZE_MAX_LENGTH;\n if (\n Math.max(fileDiff.additionLines.length, fileDiff.deletionLines.length) >\n tokenizeMaxLength\n ) {\n return;\n }\n workerManager.primeDiffHighlightCache(fileDiff);\n }\n\n private cleanChildNodes() {\n this.resizeManager.cleanUp();\n this.scrollSyncManager.cleanUp();\n this.interactionManager.cleanUp();\n this.clearAuxiliaryNodes();\n\n this.bufferAfter?.remove();\n this.bufferBefore?.remove();\n this.codeAdditions?.remove();\n this.codeDeletions?.remove();\n this.codeUnified?.remove();\n this.errorWrapper?.remove();\n this.headerElement?.remove();\n this.headerPrefix?.remove();\n this.headerMetadata?.remove();\n this.headerCustom?.remove();\n this.pre?.remove();\n this.spriteSVG?.remove();\n this.themeCSSStyle?.remove();\n this.unsafeCSSStyle?.remove();\n\n this.bufferAfter = undefined;\n this.bufferBefore = undefined;\n this.codeAdditions = undefined;\n this.codeDeletions = undefined;\n this.codeUnified = undefined;\n this.errorWrapper = undefined;\n this.headerElement = undefined;\n this.headerPrefix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n this.pre = undefined;\n this.spriteSVG = undefined;\n this.themeCSSStyle = undefined;\n this.appliedThemeCSS = undefined;\n this.hasAdoptedThemeCSS = false;\n this.unsafeCSSStyle = undefined;\n this.appliedUnsafeCSS = undefined;\n\n this.lastRenderedHeaderHTML = undefined;\n this.lastRowCount = undefined;\n }\n\n private renderSeparators(hunkData: HunkData[]): void {\n const { hunkSeparators } = this.options;\n if (\n this.isContainerManaged ||\n this.fileContainer == null ||\n typeof hunkSeparators !== 'function'\n ) {\n for (const { element } of this.separatorCache.values()) {\n element.remove();\n }\n this.separatorCache.clear();\n return;\n }\n const staleSeparators = new Map(this.separatorCache);\n for (const hunk of hunkData) {\n const id = hunk.slotName;\n let cache = this.separatorCache.get(id);\n if (cache == null || !areHunkDataEqual(hunk, cache.hunkData)) {\n cache?.element.remove();\n const element = document.createElement('div');\n element.style.display = 'contents';\n element.slot = hunk.slotName;\n const child = hunkSeparators(hunk, this);\n if (child != null) {\n element.appendChild(child);\n }\n this.fileContainer.appendChild(element);\n cache = { element, hunkData: hunk };\n this.separatorCache.set(id, cache);\n }\n staleSeparators.delete(id);\n }\n for (const [id, { element }] of staleSeparators.entries()) {\n this.separatorCache.delete(id);\n element.remove();\n }\n }\n\n protected renderAnnotations(): void {\n if (this.isContainerManaged || this.fileContainer == null) {\n for (const { element } of this.annotationCache.values()) {\n element.remove();\n }\n this.annotationCache.clear();\n return;\n }\n const staleAnnotations = new Map(this.annotationCache);\n const { renderAnnotation } = this.options;\n if (renderAnnotation != null && this.lineAnnotations.length > 0) {\n for (const [index, annotation] of this.lineAnnotations.entries()) {\n const id = `${index}-${getLineAnnotationName(annotation)}`;\n let cache = this.annotationCache.get(id);\n if (\n cache == null ||\n !areDiffLineAnnotationsEqual(annotation, cache.annotation)\n ) {\n cache?.element.remove();\n const content = renderAnnotation(annotation);\n // If we can't render anything, then we should not render anything\n // and clear the annotation cache if necessary.\n if (content == null) {\n continue;\n }\n cache = {\n element: createAnnotationWrapperNode(\n getLineAnnotationName(annotation)\n ),\n annotation,\n };\n cache.element.appendChild(content);\n this.fileContainer.appendChild(cache.element);\n this.annotationCache.set(id, cache);\n }\n staleAnnotations.delete(id);\n }\n }\n for (const [id, { element }] of staleAnnotations.entries()) {\n this.annotationCache.delete(id);\n element.remove();\n }\n }\n\n protected renderGutterUtility(): void {\n const { renderGutterUtility } = this.options;\n if (this.fileContainer == null || renderGutterUtility == null) {\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n return;\n }\n const element = renderGutterUtility(this.interactionManager.getHoveredLine);\n if (element != null && this.gutterUtilityContent != null) {\n return;\n } else if (element == null) {\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n return;\n }\n const gutterUtilityContent = createGutterUtilityContentNode();\n gutterUtilityContent.appendChild(element);\n this.fileContainer.appendChild(gutterUtilityContent);\n this.gutterUtilityContent = gutterUtilityContent;\n }\n\n protected getOrCreateFileContainer(\n fileContainer?: HTMLElement,\n parentNode?: HTMLElement\n ): HTMLElement {\n const previousContainer = this.fileContainer;\n this.fileContainer =\n fileContainer ??\n this.fileContainer ??\n document.createElement(DIFFS_TAG_NAME);\n const containerChanged = previousContainer !== this.fileContainer;\n if (previousContainer != null && containerChanged) {\n this.lastRenderedHeaderHTML = undefined;\n this.headerElement = undefined;\n }\n if (parentNode != null && this.fileContainer.parentNode !== parentNode) {\n parentNode.appendChild(this.fileContainer);\n }\n if (containerChanged) {\n this.adoptReusableShellElements(this.fileContainer);\n }\n this.ensureSpriteSVG(this.fileContainer);\n return this.fileContainer;\n }\n\n // NOTE(amadeus): Technically this method is not safe for use outside of\n // the CodeView component, however I don't think in practice it really\n // should matter, but maybe there's some system we need in place to prevent\n // this from running outside of that environment?\n //\n // It's making very specific assumptions that all the elements will have the\n // correct content based on CodeView global options\n private adoptReusableShellElements(fileContainer: HTMLElement): void {\n const { shadowRoot } = fileContainer;\n if (shadowRoot == null) {\n return;\n }\n\n for (const element of shadowRoot.children) {\n if (element instanceof SVGElement) {\n this.spriteSVG ??= element;\n } else if (\n isStyleNode(element) &&\n element.hasAttribute(THEME_CSS_ATTRIBUTE)\n ) {\n this.themeCSSStyle ??= element;\n this.hasAdoptedThemeCSS = true;\n } else if (\n isStyleNode(element) &&\n element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)\n ) {\n this.unsafeCSSStyle ??= element;\n this.appliedUnsafeCSS ??= this.options.unsafeCSS ?? undefined;\n }\n }\n }\n\n private ensureSpriteSVG(fileContainer: HTMLElement): void {\n const shadowRoot =\n fileContainer.shadowRoot ?? fileContainer.attachShadow({ mode: 'open' });\n if (this.spriteSVG == null) {\n const fragment = document.createElement('div');\n fragment.innerHTML = SVGSpriteSheet;\n const firstChild = fragment.firstChild;\n if (firstChild instanceof SVGElement) {\n this.spriteSVG = firstChild;\n }\n }\n if (this.spriteSVG != null && this.spriteSVG.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.spriteSVG);\n }\n }\n\n private getOrCreatePreNode(container: HTMLElement): HTMLPreElement {\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n // If we haven't created a pre element yet, lets go ahead and do that\n if (this.pre == null) {\n this.pre = document.createElement('pre');\n this.appliedPreAttributes = undefined;\n this.codeUnified = undefined;\n this.codeDeletions = undefined;\n this.codeAdditions = undefined;\n shadowRoot.appendChild(this.pre);\n }\n // If we have a new parent container for the pre element, lets go ahead and\n // move it into the new container\n else if (this.pre.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.pre);\n this.appliedPreAttributes = undefined;\n }\n\n this.placeHolder?.remove();\n this.placeHolder = undefined;\n\n return this.pre;\n }\n\n protected syncCodeNodesFromPre(pre: HTMLPreElement): void {\n this.codeUnified = undefined;\n this.codeDeletions = undefined;\n this.codeAdditions = undefined;\n for (const child of Array.from(pre.children)) {\n if (!(child instanceof HTMLElement)) {\n continue;\n }\n if (child.hasAttribute('data-unified')) {\n this.codeUnified = child;\n } else if (child.hasAttribute('data-deletions')) {\n this.codeDeletions = child;\n } else if (child.hasAttribute('data-additions')) {\n this.codeAdditions = child;\n }\n }\n }\n\n private applyHeaderToDOM(\n headerAST: HASTElement,\n container: HTMLElement\n ): void {\n this.cleanupErrorWrapper();\n this.placeHolder?.remove();\n this.placeHolder = undefined;\n const { fileDiff } = this;\n const headerHTML = this.cachedHeaderHTML ?? toHtml(headerAST);\n this.cachedHeaderHTML = headerHTML;\n if (headerHTML !== this.lastRenderedHeaderHTML) {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = headerHTML;\n const newHeader = tempDiv.firstElementChild;\n if (!(newHeader instanceof HTMLElement)) {\n return;\n }\n if (this.headerElement != null) {\n container.shadowRoot?.replaceChild(newHeader, this.headerElement);\n } else {\n container.shadowRoot?.prepend(newHeader);\n }\n this.headerElement = newHeader;\n this.lastRenderedHeaderHTML = headerHTML;\n }\n\n if (this.isContainerManaged || fileDiff == null) {\n return;\n }\n\n const { renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata } =\n this.options;\n\n if (renderCustomHeader != null) {\n const content = renderCustomHeader(fileDiff) ?? undefined;\n this.headerCustom = this.upsertHeaderSlotElement(\n container,\n this.headerCustom,\n CUSTOM_HEADER_SLOT_ID,\n content\n );\n this.headerPrefix?.remove();\n this.headerMetadata?.remove();\n this.headerPrefix = undefined;\n this.headerMetadata = undefined;\n return;\n }\n\n const prefix = renderHeaderPrefix?.(fileDiff) ?? undefined;\n const content = renderHeaderMetadata?.(fileDiff) ?? undefined;\n this.headerPrefix = this.upsertHeaderSlotElement(\n container,\n this.headerPrefix,\n HEADER_PREFIX_SLOT_ID,\n prefix\n );\n this.headerMetadata = this.upsertHeaderSlotElement(\n container,\n this.headerMetadata,\n HEADER_METADATA_SLOT_ID,\n content\n );\n this.headerCustom?.remove();\n this.headerCustom = undefined;\n }\n\n private clearHeaderSlots(): void {\n this.headerPrefix?.remove();\n this.headerMetadata?.remove();\n this.headerCustom?.remove();\n this.headerPrefix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n }\n\n // Header slot callbacks are presence-based render hooks, not reactive views.\n private upsertHeaderSlotElement(\n container: HTMLElement,\n current: HTMLElement | undefined,\n slot: string,\n content: Element | string | number | undefined\n ): HTMLElement | undefined {\n if (content == null) {\n current?.remove();\n return undefined;\n }\n const element = current ?? this.createHeaderSlotElement(slot);\n if (current == null) {\n container.appendChild(element);\n }\n this.replaceHeaderSlotContent(element, content);\n return element;\n }\n\n private replaceHeaderSlotContent(\n element: HTMLElement,\n content: Element | string | number\n ): void {\n element.replaceChildren();\n if (content instanceof Element) {\n element.appendChild(content);\n } else {\n element.innerText = `${content}`;\n }\n }\n\n private createHeaderSlotElement(slot: string): HTMLElement {\n const element = document.createElement('div');\n element.slot = slot;\n return element;\n }\n\n protected injectUnsafeCSS(): void {\n const { unsafeCSS } = this.options;\n const shadowRoot = this.fileContainer?.shadowRoot;\n if (shadowRoot == null) {\n return;\n }\n\n if (unsafeCSS == null || unsafeCSS === '') {\n if (this.unsafeCSSStyle != null) {\n this.unsafeCSSStyle.remove();\n this.unsafeCSSStyle = undefined;\n }\n this.appliedUnsafeCSS = undefined;\n return;\n }\n\n if (\n this.unsafeCSSStyle?.parentNode === shadowRoot &&\n this.appliedUnsafeCSS === unsafeCSS\n ) {\n return;\n }\n\n // Create or update the style element\n this.unsafeCSSStyle ??= createUnsafeCSSStyleNode();\n if (this.unsafeCSSStyle.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.unsafeCSSStyle);\n }\n // Wrap in @layer unsafe to match SSR behavior\n this.unsafeCSSStyle.textContent = wrapUnsafeCSS(unsafeCSS);\n this.appliedUnsafeCSS = unsafeCSS;\n }\n\n private applyThemeState(\n container: HTMLElement,\n themeStyles: string,\n themeType: ThemeTypes,\n baseThemeType?: 'light' | 'dark'\n ): void {\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n const effectiveThemeType = baseThemeType ?? themeType;\n const currentTheme = this.options.theme ?? DEFAULT_THEMES;\n const theme =\n typeof currentTheme === 'string' ? currentTheme : { ...currentTheme };\n const scrollbarGutter = getMeasuredScrollbarGutter(shadowRoot);\n if (\n this.themeCSSStyle?.parentNode === shadowRoot &&\n this.appliedThemeCSS?.themeStyles === themeStyles &&\n this.appliedThemeCSS.themeType === effectiveThemeType &&\n this.appliedThemeCSS.scrollbarGutter === scrollbarGutter\n ) {\n this.appliedThemeCSS.theme = theme;\n return;\n }\n if (\n this.hasAdoptedThemeCSS &&\n this.themeCSSStyle?.parentNode === shadowRoot\n ) {\n this.hasAdoptedThemeCSS = false;\n this.appliedThemeCSS = {\n theme,\n themeStyles,\n themeType: effectiveThemeType,\n baseThemeType,\n scrollbarGutter,\n };\n return;\n }\n this.themeCSSStyle = upsertHostThemeStyle({\n shadowRoot,\n currentNode: this.themeCSSStyle,\n themeCSS: wrapThemeCSS(themeStyles, effectiveThemeType, scrollbarGutter),\n });\n this.appliedThemeCSS =\n this.themeCSSStyle != null\n ? {\n theme,\n themeStyles,\n themeType: effectiveThemeType,\n baseThemeType,\n scrollbarGutter,\n }\n : undefined;\n }\n\n private hydrateMeasuredScrollbar(): void {\n const shadowRoot = this.fileContainer?.shadowRoot;\n if (shadowRoot == null || this.themeCSSStyle == null) {\n return;\n }\n this.themeCSSStyle.textContent = patchScrollbarGutterSize(\n this.themeCSSStyle.textContent ?? '',\n getMeasuredScrollbarGutter(shadowRoot)\n );\n }\n\n private applyHunksToDOM(\n pre: HTMLPreElement,\n result: HunksRenderResult\n ): void {\n const { overflow = 'scroll' } = this.options;\n const containerSize =\n (this.options.hunkSeparators ?? 'line-info') === 'line-info';\n const rowSpan = overflow === 'wrap' ? result.rowCount : undefined;\n this.cleanupErrorWrapper();\n this.applyPreNodeAttributes(pre, result);\n\n let shouldReplace = false;\n // Create code elements and insert HTML content\n const codeElements: HTMLElement[] = [];\n const unifiedAST = this.hunksRenderer.renderCodeAST('unified', result);\n const deletionsAST = this.hunksRenderer.renderCodeAST('deletions', result);\n const additionsAST = this.hunksRenderer.renderCodeAST('additions', result);\n if (unifiedAST != null) {\n shouldReplace =\n this.codeUnified == null ||\n this.codeAdditions != null ||\n this.codeDeletions != null;\n\n // Clean up addition/deletion elements if necessary\n this.codeDeletions?.remove();\n this.codeDeletions = undefined;\n this.codeAdditions?.remove();\n this.codeAdditions = undefined;\n\n this.codeUnified = getOrCreateCodeNode({\n code: this.codeUnified,\n columnType: 'unified',\n rowSpan,\n containerSize,\n });\n this.codeUnified.innerHTML =\n this.hunksRenderer.renderPartialHTML(unifiedAST);\n codeElements.push(this.codeUnified);\n } else if (deletionsAST != null || additionsAST != null) {\n if (deletionsAST != null) {\n shouldReplace = this.codeDeletions == null || this.codeUnified != null;\n\n // Clean up unified column if necessary\n this.codeUnified?.remove();\n this.codeUnified = undefined;\n\n this.codeDeletions = getOrCreateCodeNode({\n code: this.codeDeletions,\n columnType: 'deletions',\n rowSpan,\n containerSize,\n });\n this.codeDeletions.innerHTML =\n this.hunksRenderer.renderPartialHTML(deletionsAST);\n codeElements.push(this.codeDeletions);\n } else {\n // If we have no deletion column, lets clean it up if it exists\n this.codeDeletions?.remove();\n this.codeDeletions = undefined;\n }\n\n if (additionsAST != null) {\n shouldReplace =\n shouldReplace ||\n this.codeAdditions == null ||\n this.codeUnified != null;\n\n // Clean up unified column if necessary\n this.codeUnified?.remove();\n this.codeUnified = undefined;\n\n this.codeAdditions = getOrCreateCodeNode({\n code: this.codeAdditions,\n columnType: 'additions',\n rowSpan,\n containerSize,\n });\n this.codeAdditions.innerHTML =\n this.hunksRenderer.renderPartialHTML(additionsAST);\n codeElements.push(this.codeAdditions);\n } else {\n // If we have no addition column, lets clean it up if it exists\n this.codeAdditions?.remove();\n this.codeAdditions = undefined;\n }\n } else {\n // if we get in here, there's no content to render, so lets just clean\n // everything up\n this.codeUnified?.remove();\n this.codeUnified = undefined;\n this.codeDeletions?.remove();\n this.codeDeletions = undefined;\n this.codeAdditions?.remove();\n this.codeAdditions = undefined;\n }\n\n if (codeElements.length === 0) {\n pre.textContent = '';\n } else if (shouldReplace) {\n pre.replaceChildren(...codeElements);\n }\n\n this.lastRowCount = result.rowCount;\n }\n\n private applyPartialRender({\n previousRenderRange,\n renderRange,\n }: ApplyPartialRenderProps): boolean {\n const {\n pre,\n codeUnified,\n codeAdditions,\n codeDeletions,\n options: { diffStyle = 'split' },\n } = this;\n if (\n pre == null ||\n // We must have a current and previous render range to do a partial render\n previousRenderRange == null ||\n renderRange == null ||\n // Neither render range may be infinite\n !Number.isFinite(previousRenderRange.totalLines) ||\n !Number.isFinite(renderRange.totalLines) ||\n this.lastRowCount == null\n ) {\n return false;\n }\n const codeElements = this.getCodeColumns(\n diffStyle,\n codeUnified,\n codeDeletions,\n codeAdditions\n );\n if (codeElements == null) {\n return false;\n }\n\n const previousStart = previousRenderRange.startingLine;\n const nextStart = renderRange.startingLine;\n const previousEnd = previousStart + previousRenderRange.totalLines;\n const nextEnd = nextStart + renderRange.totalLines;\n\n const overlapStart = Math.max(previousStart, nextStart);\n const overlapEnd = Math.min(previousEnd, nextEnd);\n if (overlapEnd <= overlapStart) {\n return false;\n }\n\n const trimStart = Math.max(0, overlapStart - previousStart);\n const trimEnd = Math.max(0, previousEnd - overlapEnd);\n\n const trimResult = this.trimColumns({\n columns: codeElements,\n trimStart,\n trimEnd,\n previousStart,\n overlapStart,\n overlapEnd,\n diffStyle,\n });\n if (trimResult < 0) {\n throw new Error('applyPartialRender: failed to trim to overlap');\n }\n\n if (this.lastRowCount < trimResult) {\n throw new Error('applyPartialRender: trimmed beyond DOM row count');\n }\n\n let rowCount = this.lastRowCount - trimResult;\n const renderChunk = (\n startingLine: number,\n totalLines: number\n ): HunksRenderResult | undefined => {\n if (totalLines <= 0 || this.fileDiff == null) {\n return undefined;\n }\n return this.hunksRenderer.renderDiff(this.fileDiff, {\n startingLine,\n totalLines,\n bufferBefore: 0,\n bufferAfter: 0,\n });\n };\n\n const prependResult = renderChunk(\n nextStart,\n Math.max(overlapStart - nextStart, 0)\n );\n if (prependResult == null && nextStart < overlapStart) {\n return false;\n }\n\n const appendResult = renderChunk(\n overlapEnd,\n Math.max(nextEnd - overlapEnd, 0)\n );\n if (appendResult == null && nextEnd > overlapEnd) {\n return false;\n }\n\n const applyChunk = (\n result: HunksRenderResult | undefined,\n insertPosition: 'afterbegin' | 'beforeend'\n ) => {\n if (result == null) {\n return;\n }\n if (diffStyle === 'unified' && !Array.isArray(codeElements)) {\n this.insertPartialHTML(diffStyle, codeElements, result, insertPosition);\n } else if (diffStyle === 'split' && Array.isArray(codeElements)) {\n this.insertPartialHTML(diffStyle, codeElements, result, insertPosition);\n } else {\n throw new Error(\n 'FileDiff.applyPartialRender.applyChunk: invalid chunk application'\n );\n }\n rowCount += result.rowCount;\n };\n\n this.cleanupErrorWrapper();\n applyChunk(prependResult, 'afterbegin');\n applyChunk(appendResult, 'beforeend');\n\n if (this.lastRowCount !== rowCount) {\n this.applyRowSpan(diffStyle, codeElements, rowCount);\n this.lastRowCount = rowCount;\n }\n\n return true;\n }\n\n private insertPartialHTML(\n diffStyle: 'unified',\n columns: ColumnElements,\n result: HunksRenderResult,\n insertPosition: 'afterbegin' | 'beforeend'\n ): void;\n private insertPartialHTML(\n diffStyle: 'split',\n columns: [ColumnElements | undefined, ColumnElements | undefined],\n result: HunksRenderResult,\n insertPosition: 'afterbegin' | 'beforeend'\n ): void;\n private insertPartialHTML(\n diffStyle: 'split' | 'unified',\n columns:\n | [ColumnElements | undefined, ColumnElements | undefined]\n | ColumnElements,\n result: HunksRenderResult,\n insertPosition: 'afterbegin' | 'beforeend'\n ): void {\n if (diffStyle === 'unified' && !Array.isArray(columns)) {\n const unifiedAST = this.hunksRenderer.renderCodeAST('unified', result);\n this.renderPartialColumn(columns, unifiedAST, insertPosition);\n } else if (diffStyle === 'split' && Array.isArray(columns)) {\n const deletionsAST = this.hunksRenderer.renderCodeAST(\n 'deletions',\n result\n );\n const additionsAST = this.hunksRenderer.renderCodeAST(\n 'additions',\n result\n );\n this.renderPartialColumn(columns[0], deletionsAST, insertPosition);\n this.renderPartialColumn(columns[1], additionsAST, insertPosition);\n } else {\n throw new Error(\n 'FileDiff.insertPartialHTML: Invalid argument composition'\n );\n }\n }\n\n private renderPartialColumn(\n column: ColumnElements | undefined,\n ast: ElementContent[] | undefined,\n insertPosition: 'afterbegin' | 'beforeend'\n ) {\n if (column == null || ast == null) {\n return;\n }\n const gutterChildren = getElementChildren(ast[0]);\n const contentChildren = getElementChildren(ast[1]);\n if (gutterChildren == null || contentChildren == null) {\n throw new Error('FileDiff.insertPartialHTML: Unexpected AST structure');\n }\n const firstHASTElement = contentChildren.at(0);\n if (\n insertPosition === 'beforeend' &&\n firstHASTElement?.type === 'element' &&\n typeof firstHASTElement.properties['data-buffer-size'] === 'number'\n ) {\n this.mergeBuffersIfNecessary(\n firstHASTElement.properties['data-buffer-size'],\n column.content.children[column.content.children.length - 1],\n column.gutter.children[column.gutter.children.length - 1],\n gutterChildren,\n contentChildren,\n true\n );\n }\n const lastHASTElement = contentChildren.at(-1);\n if (\n insertPosition === 'afterbegin' &&\n lastHASTElement?.type === 'element' &&\n typeof lastHASTElement.properties['data-buffer-size'] === 'number'\n ) {\n this.mergeBuffersIfNecessary(\n lastHASTElement.properties['data-buffer-size'],\n column.content.children[0],\n column.gutter.children[0],\n gutterChildren,\n contentChildren,\n false\n );\n }\n\n column.gutter.insertAdjacentHTML(\n insertPosition,\n this.hunksRenderer.renderPartialHTML(gutterChildren)\n );\n column.content.insertAdjacentHTML(\n insertPosition,\n this.hunksRenderer.renderPartialHTML(contentChildren)\n );\n }\n\n private mergeBuffersIfNecessary(\n adjustmentSize: number,\n contentElement: Element,\n gutterElement: Element,\n gutterChildren: ElementContent[],\n contentChildren: ElementContent[],\n fromStart: boolean\n ) {\n if (\n !(contentElement instanceof HTMLElement) ||\n !(gutterElement instanceof HTMLElement)\n ) {\n return;\n }\n const currentSize = this.getBufferSize(contentElement.dataset);\n if (currentSize == null) {\n return;\n }\n if (fromStart) {\n gutterChildren.shift();\n contentChildren.shift();\n } else {\n gutterChildren.pop();\n contentChildren.pop();\n }\n this.updateBufferSize(contentElement, currentSize + adjustmentSize);\n this.updateBufferSize(gutterElement, currentSize + adjustmentSize);\n }\n\n private applyRowSpan(\n diffStyle: 'split' | 'unified',\n columns:\n | [ColumnElements | undefined, ColumnElements | undefined]\n | ColumnElements,\n rowCount: number\n ): void {\n const applySpan = (column: ColumnElements | undefined) => {\n if (column == null) {\n return;\n }\n column.gutter.style.setProperty('grid-row', `span ${rowCount}`);\n column.content.style.setProperty('grid-row', `span ${rowCount}`);\n };\n if (diffStyle === 'unified' && !Array.isArray(columns)) {\n applySpan(columns);\n } else if (diffStyle === 'split' && Array.isArray(columns)) {\n applySpan(columns[0]);\n applySpan(columns[1]);\n } else {\n throw new Error('dun fuuuuked up');\n }\n }\n\n private trimColumnRows(\n columns: ColumnElements | undefined,\n preTrimCount: number,\n postTrimStart: number\n ): number {\n let visibleLineIndex = 0;\n let rowCount = 0;\n let rowIndex = 0;\n let pendingMetadataTrim = false;\n const hasPostTrim = postTrimStart >= 0;\n\n if (columns == null) {\n return 0;\n }\n const contentChildren = Array.from(columns.content.children);\n const gutterChildren = Array.from(columns.gutter.children);\n if (contentChildren.length !== gutterChildren.length) {\n throw new Error('FileDiff.trimColumnRows: columns do not match');\n }\n\n while (rowIndex < contentChildren.length) {\n if (preTrimCount <= 0 && !hasPostTrim && !pendingMetadataTrim) {\n break;\n }\n const gutterElement = gutterChildren[rowIndex];\n const contentElement = contentChildren[rowIndex];\n rowIndex++;\n\n if (\n !(gutterElement instanceof HTMLElement) ||\n !(contentElement instanceof HTMLElement)\n ) {\n console.error({ gutterElement, contentElement });\n throw new Error('FileDiff.trimColumnRows: invalid row elements');\n }\n\n if (pendingMetadataTrim) {\n pendingMetadataTrim = false;\n if (\n (gutterElement.dataset.gutterBuffer === 'annotation' &&\n 'lineAnnotation' in contentElement.dataset) ||\n (gutterElement.dataset.gutterBuffer === 'metadata' &&\n 'noNewline' in contentElement.dataset)\n ) {\n gutterElement.remove();\n contentElement.remove();\n rowCount++;\n continue;\n }\n }\n\n // If we found a line element, lets trim it if necessary\n if (\n 'lineIndex' in gutterElement.dataset &&\n 'lineIndex' in contentElement.dataset\n ) {\n if (\n preTrimCount > 0 ||\n (hasPostTrim && visibleLineIndex >= postTrimStart)\n ) {\n gutterElement.remove();\n contentElement.remove();\n if (preTrimCount > 0) {\n preTrimCount--;\n if (preTrimCount === 0) {\n pendingMetadataTrim = true;\n }\n }\n rowCount++;\n }\n visibleLineIndex++;\n continue;\n }\n\n // Separators should be removed, but don't count towards line indices\n if (\n 'separator' in gutterElement.dataset &&\n 'separator' in contentElement.dataset\n ) {\n if (\n preTrimCount > 0 ||\n (hasPostTrim && visibleLineIndex >= postTrimStart)\n ) {\n gutterElement.remove();\n contentElement.remove();\n rowCount++;\n }\n continue;\n }\n\n // Annotations should be removed, but don't count towards line indices\n if (\n gutterElement.dataset.gutterBuffer === 'annotation' &&\n 'lineAnnotation' in contentElement.dataset\n ) {\n if (\n preTrimCount > 0 ||\n (hasPostTrim && visibleLineIndex >= postTrimStart)\n ) {\n gutterElement.remove();\n contentElement.remove();\n rowCount++;\n }\n continue;\n }\n\n if (\n gutterElement.dataset.gutterBuffer === 'metadata' &&\n 'noNewline' in contentElement.dataset\n ) {\n if (\n preTrimCount > 0 ||\n (hasPostTrim && visibleLineIndex >= postTrimStart)\n ) {\n gutterElement.remove();\n contentElement.remove();\n rowCount++;\n }\n continue;\n }\n\n if (\n gutterElement.dataset.gutterBuffer === 'buffer' &&\n 'contentBuffer' in contentElement.dataset\n ) {\n const totalRows = this.getBufferSize(contentElement.dataset);\n if (totalRows == null) {\n throw new Error('FileDiff.trimColumnRows: invalid element');\n }\n if (preTrimCount > 0) {\n const rowsToRemove = Math.min(preTrimCount, totalRows);\n const newSize = totalRows - rowsToRemove;\n if (newSize > 0) {\n this.updateBufferSize(gutterElement, newSize);\n this.updateBufferSize(contentElement, newSize);\n rowCount += rowsToRemove;\n } else {\n gutterElement.remove();\n contentElement.remove();\n rowCount += totalRows;\n }\n preTrimCount -= rowsToRemove;\n if (preTrimCount === 0 && newSize === 0) {\n pendingMetadataTrim = true;\n }\n }\n // If we are in a post clip era...\n else if (hasPostTrim) {\n const bufferStart = visibleLineIndex;\n const bufferEnd = visibleLineIndex + totalRows - 1;\n if (postTrimStart <= bufferStart) {\n gutterElement.remove();\n contentElement.remove();\n rowCount += totalRows;\n } else if (postTrimStart <= bufferEnd) {\n const rowsToRemove = bufferEnd - postTrimStart + 1;\n const newSize = totalRows - rowsToRemove;\n this.updateBufferSize(gutterElement, newSize);\n this.updateBufferSize(contentElement, newSize);\n rowCount += rowsToRemove;\n }\n }\n visibleLineIndex += totalRows;\n continue;\n }\n\n console.error({ gutterElement, contentElement });\n throw new Error('FileDiff.trimColumnRows: unknown row elements');\n }\n\n return rowCount;\n }\n\n private trimColumns({\n columns,\n diffStyle,\n overlapEnd,\n overlapStart,\n previousStart,\n trimEnd,\n trimStart,\n // NOTE(amadeus): If we return -1 it means something went wrong\n // with the trim...\n // oxlint-disable-next-line no-redundant-type-constituents\n }: TrimColumnsToOverlapProps): number | -1 {\n const preTrimCount = Math.max(0, overlapStart - previousStart);\n const postTrimStart = overlapEnd - previousStart;\n if (postTrimStart < 0) {\n throw new Error('FileDiff.trimColumns: overlap ends before previous');\n }\n const shouldTrimStart = trimStart > 0;\n const shouldTrimEnd = trimEnd > 0;\n if (!shouldTrimStart && !shouldTrimEnd) {\n return 0;\n }\n const effectivePreTrimCount = shouldTrimStart ? preTrimCount : 0;\n const effectivePostTrimStart = shouldTrimEnd ? postTrimStart : -1;\n\n if (diffStyle === 'unified' && !Array.isArray(columns)) {\n const removedRows = this.trimColumnRows(\n columns,\n effectivePreTrimCount,\n effectivePostTrimStart\n );\n return removedRows;\n } else if (diffStyle === 'split' && Array.isArray(columns)) {\n const deletionsTrim = this.trimColumnRows(\n columns[0],\n effectivePreTrimCount,\n effectivePostTrimStart\n );\n const additionsTrim = this.trimColumnRows(\n columns[1],\n effectivePreTrimCount,\n effectivePostTrimStart\n );\n // We should avoid the trim validation if we are split but\n // there's only one side\n if (\n columns[0] != null &&\n columns[1] != null &&\n deletionsTrim !== additionsTrim\n ) {\n throw new Error('FileDiff.trimColumns: split columns out of sync');\n }\n return columns[0] != null ? deletionsTrim : additionsTrim;\n } else {\n console.error({ diffStyle, columns });\n throw new Error('FileDiff.trimColumns: Invalid columns for diffType');\n }\n }\n\n private getBufferSize(properties: DOMStringMap): number | undefined {\n const parsed = Number.parseInt(properties?.bufferSize ?? '', 10);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n\n private updateBufferSize(element: HTMLElement, size: number): void {\n element.dataset.bufferSize = `${size}`;\n element.style.setProperty('grid-row', `span ${size}`);\n element.style.setProperty('min-height', `calc(${size} * 1lh)`);\n }\n\n private getCodeColumns(\n diffStyle: 'split' | 'unified',\n codeUnified: HTMLElement | undefined,\n codeDeletions: HTMLElement | undefined,\n codeAdditions: HTMLElement | undefined\n ):\n | [ColumnElements | undefined, ColumnElements | undefined]\n | ColumnElements\n | undefined {\n function getColumns(\n code: HTMLElement | undefined\n ): ColumnElements | undefined {\n if (code == null) {\n return undefined;\n }\n const gutter = code.children[0];\n const content = code.children[1];\n if (\n !(gutter instanceof HTMLElement) ||\n !(content instanceof HTMLElement) ||\n gutter.dataset.gutter == null ||\n content.dataset.content == null\n ) {\n return undefined;\n }\n return { gutter, content };\n }\n\n if (diffStyle === 'unified') {\n return getColumns(codeUnified);\n } else {\n const deletions = getColumns(codeDeletions);\n const additions = getColumns(codeAdditions);\n return deletions != null || additions != null\n ? [deletions, additions]\n : undefined;\n }\n }\n\n private applyBuffers(\n pre: HTMLPreElement,\n renderRange: RenderRange | undefined\n ) {\n if (renderRange == null || this.shouldDisableVirtualizationBuffers()) {\n if (this.bufferBefore != null) {\n this.bufferBefore.remove();\n this.bufferBefore = undefined;\n }\n if (this.bufferAfter != null) {\n this.bufferAfter.remove();\n this.bufferAfter = undefined;\n }\n return;\n }\n // NOTE(amadeus): A very hacky pass at buffers outside the pre elements...\n // i may need to improve this...\n if (renderRange.bufferBefore > 0) {\n if (this.bufferBefore == null) {\n this.bufferBefore = document.createElement('div');\n this.bufferBefore.dataset.virtualizerBuffer = 'before';\n pre.before(this.bufferBefore);\n }\n this.bufferBefore.style.setProperty(\n 'height',\n `${renderRange.bufferBefore}px`\n );\n this.bufferBefore.style.setProperty('contain', 'strict');\n } else if (this.bufferBefore != null) {\n this.bufferBefore.remove();\n this.bufferBefore = undefined;\n }\n\n if (renderRange.bufferAfter > 0) {\n if (this.bufferAfter == null) {\n this.bufferAfter = document.createElement('div');\n this.bufferAfter.dataset.virtualizerBuffer = 'after';\n pre.after(this.bufferAfter);\n }\n this.bufferAfter.style.setProperty(\n 'height',\n `${renderRange.bufferAfter}px`\n );\n this.bufferAfter.style.setProperty('contain', 'strict');\n } else if (this.bufferAfter != null) {\n this.bufferAfter.remove();\n this.bufferAfter = undefined;\n }\n }\n\n protected shouldDisableVirtualizationBuffers(): boolean {\n return this.options.disableVirtualizationBuffers ?? false;\n }\n\n protected applyPreNodeAttributes(\n pre: HTMLPreElement,\n { additionsContentAST, deletionsContentAST, totalLines }: HunksRenderResult,\n customProperties?: CustomPreProperties\n ): void {\n const {\n diffIndicators = 'bars',\n disableBackground = false,\n disableLineNumbers = false,\n overflow = 'scroll',\n diffStyle = 'split',\n } = this.options;\n const preProperties: PrePropertiesConfig = {\n type: 'diff',\n diffIndicators,\n disableBackground,\n disableLineNumbers,\n overflow,\n split:\n diffStyle === 'unified'\n ? false\n : additionsContentAST != null && deletionsContentAST != null,\n totalLines,\n customProperties,\n };\n if (arePrePropertiesEqual(preProperties, this.appliedPreAttributes)) {\n return;\n }\n setPreNodeProperties(pre, preProperties);\n this.appliedPreAttributes = preProperties;\n }\n\n private applyErrorToDOM(error: Error, container: HTMLElement) {\n this.cleanupErrorWrapper();\n this.pre?.remove();\n this.pre = undefined;\n this.appliedPreAttributes = undefined;\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n this.errorWrapper ??= document.createElement('div');\n this.errorWrapper.dataset.errorWrapper = '';\n this.errorWrapper.textContent = '';\n shadowRoot.appendChild(this.errorWrapper);\n const errorMessage = document.createElement('div');\n errorMessage.dataset.errorMessage = '';\n errorMessage.innerText = error.message;\n this.errorWrapper.appendChild(errorMessage);\n const errorStack = document.createElement('pre');\n errorStack.dataset.errorStack = '';\n errorStack.innerText = error.stack ?? 'No Error Stack';\n this.errorWrapper.appendChild(errorStack);\n }\n\n private cleanupErrorWrapper() {\n this.errorWrapper?.remove();\n this.errorWrapper = undefined;\n }\n}\n\ninterface HasContentProps {\n fileDiff: FileDiffMetadata | undefined;\n oldFile: FileContents | undefined;\n newFile: FileContents | undefined;\n}\n\nfunction hasDiffContent({\n fileDiff,\n oldFile,\n newFile,\n}: HasContentProps): boolean {\n return (\n (fileDiff != null && fileDiff.hunks.length > 0) ||\n oldFile != null ||\n newFile != null\n );\n}\n\nfunction hasDiffHeaderContent({\n fileDiff,\n oldFile,\n newFile,\n}: HasContentProps): boolean {\n return fileDiff != null || oldFile != null || newFile != null;\n}\n\nfunction shouldRenderCode(\n pre: HTMLPreElement | undefined,\n hasContent: boolean,\n collapsed = false\n): boolean {\n return !collapsed && pre == null && hasContent;\n}\n\nfunction shouldRenderHeader(\n headerElement: HTMLElement | undefined,\n hasContent: boolean,\n disableFileHeader = false\n): boolean {\n return headerElement == null && hasContent && !disableFileHeader;\n}\n\nfunction getElementChildren(\n node: ElementContent | undefined\n): ElementContent[] | undefined {\n if (node == null || node.type !== 'element') {\n return undefined;\n }\n return node.children ?? [];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FileDiff.js","names":["options: FileDiffOptions<LAnnotation>","workerManager?: WorkerPoolManager | undefined","targetUnifiedIndex: number | undefined","targetSplitIndex: number | undefined","error: unknown","content","codeElements: HTMLElement[]","preProperties: PrePropertiesConfig"],"sources":["../../src/components/FileDiff.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement } from 'hast';\nimport { toHtml } from 'hast-util-to-html';\n\nimport {\n CUSTOM_HEADER_SLOT_ID,\n DEFAULT_THEMES,\n DEFAULT_TOKENIZE_MAX_LENGTH,\n DIFFS_TAG_NAME,\n EMPTY_RENDER_RANGE,\n HEADER_METADATA_SLOT_ID,\n HEADER_PREFIX_SLOT_ID,\n THEME_CSS_ATTRIBUTE,\n UNSAFE_CSS_ATTRIBUTE,\n} from '../constants';\nimport {\n type GetHoveredLineResult,\n type GetLineIndexUtility,\n InteractionManager,\n type InteractionManagerBaseOptions,\n pluckInteractionOptions,\n type SelectionWriteOptions,\n} from '../managers/InteractionManager';\nimport { ResizeManager } from '../managers/ResizeManager';\nimport { ScrollSyncManager } from '../managers/ScrollSyncManager';\nimport {\n DiffHunksRenderer,\n type DiffHunksRendererOptions,\n type HunksRenderResult,\n} from '../renderers/DiffHunksRenderer';\nimport { SVGSpriteSheet } from '../sprite';\nimport type {\n AppliedThemeStyleCache,\n BaseDiffOptions,\n CustomPreProperties,\n DiffLineAnnotation,\n ExpansionDirections,\n FileContents,\n FileDiffMetadata,\n HunkData,\n HunkSeparators,\n PrePropertiesConfig,\n RenderHeaderMetadataCallback,\n RenderHeaderPrefixCallback,\n RenderRange,\n SelectedLineRange,\n SelectionSide,\n ThemeTypes,\n} from '../types';\nimport { areDiffLineAnnotationsEqual } from '../utils/areDiffLineAnnotationsEqual';\nimport { areFilesEqual } from '../utils/areFilesEqual';\nimport { areHunkDataEqual } from '../utils/areHunkDataEqual';\nimport { arePrePropertiesEqual } from '../utils/arePrePropertiesEqual';\nimport { areRenderRangesEqual } from '../utils/areRenderRangesEqual';\nimport { areThemesEqual } from '../utils/areThemesEqual';\nimport { createAnnotationWrapperNode } from '../utils/createAnnotationWrapperNode';\nimport { createGutterUtilityContentNode } from '../utils/createGutterUtilityContentNode';\nimport { createUnsafeCSSStyleNode } from '../utils/createUnsafeCSSStyleNode';\nimport {\n patchScrollbarGutterSize,\n wrapThemeCSS,\n wrapUnsafeCSS,\n} from '../utils/cssWrappers';\nimport { getDiffHunksRendererOptions } from '../utils/getDiffHunksRendererOptions';\nimport { getLineAnnotationName } from '../utils/getLineAnnotationName';\nimport { getOrCreateCodeNode } from '../utils/getOrCreateCodeNode';\nimport { upsertHostThemeStyle } from '../utils/hostTheme';\nimport { isDiffPlainText } from '../utils/isDiffPlainText';\nimport { isStyleNode } from '../utils/isStyleNode';\nimport { parseDiffFromFile } from '../utils/parseDiffFromFile';\nimport { prerenderHTMLIfNecessary } from '../utils/prerenderHTMLIfNecessary';\nimport { getMeasuredScrollbarGutter } from '../utils/scrollbarGutter';\nimport { setPreNodeProperties } from '../utils/setWrapperNodeProps';\nimport type { WorkerPoolManager } from '../worker';\nimport { DiffsContainerLoaded } from './web-components';\n\nexport interface FileDiffRenderProps<LAnnotation> {\n fileDiff?: FileDiffMetadata;\n oldFile?: FileContents;\n newFile?: FileContents;\n deferManagers?: boolean;\n forceRender?: boolean;\n preventEmit?: boolean;\n fileContainer?: HTMLElement;\n containerWrapper?: HTMLElement;\n lineAnnotations?: DiffLineAnnotation<LAnnotation>[];\n renderRange?: RenderRange;\n}\n\nexport interface FileDiffHydrationProps<LAnnotation> extends Omit<\n FileDiffRenderProps<LAnnotation>,\n 'fileContainer'\n> {\n fileContainer: HTMLElement;\n prerenderedHTML?: string;\n}\n\nexport interface FileDiffOptions<LAnnotation>\n extends\n Omit<BaseDiffOptions, 'hunkSeparators'>,\n InteractionManagerBaseOptions<'diff'> {\n hunkSeparators?:\n | Exclude<HunkSeparators, 'custom'> /**\n * @deprecated Custom hunk separator functions are deprecated and will be\n * removed in a future version.\n */\n | ((\n hunk: HunkData,\n instance: FileDiff<LAnnotation>\n ) => HTMLElement | DocumentFragment | null | undefined);\n disableFileHeader?: boolean;\n renderHeaderPrefix?: RenderHeaderPrefixCallback;\n renderHeaderMetadata?: RenderHeaderMetadataCallback;\n renderCustomHeader?: RenderHeaderMetadataCallback;\n /**\n * When true, errors during rendering are rethrown instead of being caught\n * and displayed in the DOM. Useful for testing or when you want to handle\n * errors yourself.\n */\n disableErrorHandling?: boolean;\n renderAnnotation?(\n annotation: DiffLineAnnotation<LAnnotation>\n ): HTMLElement | undefined;\n renderGutterUtility?(\n getHoveredRow: () => GetHoveredLineResult<'diff'> | undefined\n ): HTMLElement | null | undefined;\n\n onPostRender?(node: HTMLElement, instance: FileDiff<LAnnotation>): unknown;\n}\n\ninterface AnnotationElementCache<LAnnotation> {\n element: HTMLElement;\n annotation: DiffLineAnnotation<LAnnotation>;\n}\n\ninterface CustomHunkElementCache {\n element: HTMLElement;\n hunkData: HunkData;\n}\n\ninterface ColumnElements {\n gutter: HTMLElement;\n content: HTMLElement;\n}\n\ninterface TrimColumnsToOverlapProps {\n columns:\n | [ColumnElements | undefined, ColumnElements | undefined]\n | ColumnElements;\n diffStyle: 'split' | 'unified';\n overlapEnd: number;\n overlapStart: number;\n previousStart: number;\n trimEnd: number;\n trimStart: number;\n}\n\ninterface ApplyPartialRenderProps {\n previousRenderRange: RenderRange | undefined;\n renderRange: RenderRange | undefined;\n}\n\ninterface HydrationSetup<LAnnotation> {\n fileDiff: FileDiffMetadata | undefined;\n lineAnnotations: DiffLineAnnotation<LAnnotation>[] | undefined;\n oldFile?: FileContents;\n newFile?: FileContents;\n}\n\nlet instanceId = -1;\n\nexport class FileDiff<LAnnotation = undefined> {\n // NOTE(amadeus): We sorta need this to ensure the web-component file is\n // properly loaded\n static LoadedCustomComponent: boolean = DiffsContainerLoaded;\n\n readonly __id: string = `file-diff:${++instanceId}`;\n\n protected fileContainer: HTMLElement | undefined;\n protected spriteSVG: SVGElement | undefined;\n protected pre: HTMLPreElement | undefined;\n protected codeUnified: HTMLElement | undefined;\n protected codeDeletions: HTMLElement | undefined;\n protected codeAdditions: HTMLElement | undefined;\n protected bufferBefore: HTMLElement | undefined;\n protected bufferAfter: HTMLElement | undefined;\n protected themeCSSStyle: HTMLStyleElement | undefined;\n protected appliedThemeCSS: AppliedThemeStyleCache | undefined;\n protected hasAdoptedThemeCSS = false;\n protected unsafeCSSStyle: HTMLStyleElement | undefined;\n protected appliedUnsafeCSS: string | undefined;\n protected gutterUtilityContent: HTMLElement | undefined;\n\n protected headerElement: HTMLElement | undefined;\n protected headerPrefix: HTMLElement | undefined;\n protected headerMetadata: HTMLElement | undefined;\n protected headerCustom: HTMLElement | undefined;\n protected separatorCache: Map<string, CustomHunkElementCache> = new Map();\n protected errorWrapper: HTMLElement | undefined;\n protected placeHolder: HTMLElement | undefined;\n\n protected hunksRenderer: DiffHunksRenderer<LAnnotation>;\n protected resizeManager: ResizeManager;\n protected scrollSyncManager: ScrollSyncManager;\n protected interactionManager: InteractionManager<'diff'>;\n\n protected annotationCache: Map<string, AnnotationElementCache<LAnnotation>> =\n new Map();\n protected lineAnnotations: DiffLineAnnotation<LAnnotation>[] = [];\n protected managersDirty = false;\n\n protected deletionFile: FileContents | undefined;\n protected additionFile: FileContents | undefined;\n protected fileDiff: FileDiffMetadata | undefined;\n protected renderRange: RenderRange | undefined;\n protected appliedPreAttributes: PrePropertiesConfig | undefined;\n protected lastRenderedHeaderHTML: string | undefined;\n protected cachedHeaderHTML: string | undefined;\n protected lastRowCount: number | undefined;\n\n protected enabled = true;\n\n constructor(\n public options: FileDiffOptions<LAnnotation> = { theme: DEFAULT_THEMES },\n protected workerManager?: WorkerPoolManager | undefined,\n protected isContainerManaged = false\n ) {\n this.hunksRenderer = this.createHunksRenderer(options);\n this.resizeManager = new ResizeManager();\n this.scrollSyncManager = new ScrollSyncManager();\n this.interactionManager = new InteractionManager(\n 'diff',\n pluckInteractionOptions(\n options,\n typeof options.hunkSeparators === 'function' ||\n (options.hunkSeparators ?? 'line-info') === 'line-info' ||\n options.hunkSeparators === 'line-info-basic'\n ? this.handleExpandHunk\n : undefined,\n this.getLineIndex\n )\n );\n this.workerManager?.subscribeToThemeChanges(this);\n this.enabled = true;\n }\n\n protected handleHighlightRender = (): void => {\n this.rerender();\n };\n\n protected getHunksRendererOptions(\n options: FileDiffOptions<LAnnotation>\n ): DiffHunksRendererOptions {\n return getDiffHunksRendererOptions(options);\n }\n\n protected createHunksRenderer(\n options: FileDiffOptions<LAnnotation>\n ): DiffHunksRenderer<LAnnotation> {\n return new DiffHunksRenderer(\n this.getHunksRendererOptions(options),\n this.handleHighlightRender,\n this.workerManager\n );\n }\n\n public getLineIndex: GetLineIndexUtility = (\n lineNumber: number,\n side: SelectionSide = 'additions'\n ) => {\n if (this.fileDiff == null) {\n return undefined;\n }\n const lastHunk = this.fileDiff.hunks.at(-1);\n let targetUnifiedIndex: number | undefined;\n let targetSplitIndex: number | undefined;\n hunkIterator: for (const hunk of this.fileDiff.hunks) {\n let currentLineNumber =\n side === 'deletions' ? hunk.deletionStart : hunk.additionStart;\n const hunkCount =\n side === 'deletions' ? hunk.deletionCount : hunk.additionCount;\n let splitIndex = hunk.splitLineStart;\n let unifiedIndex = hunk.unifiedLineStart;\n\n // If we've selected a line between or before a hunk,\n // we should grab its index here\n if (lineNumber < currentLineNumber) {\n const difference = currentLineNumber - lineNumber;\n targetUnifiedIndex = Math.max(unifiedIndex - difference, 0);\n targetSplitIndex = Math.max(splitIndex - difference, 0);\n break hunkIterator;\n }\n\n if (lineNumber >= currentLineNumber + hunkCount) {\n if (hunk === lastHunk) {\n const difference = lineNumber - (currentLineNumber + hunkCount);\n targetUnifiedIndex =\n unifiedIndex + hunk.unifiedLineCount + difference;\n targetSplitIndex = splitIndex + hunk.splitLineCount + difference;\n break hunkIterator;\n }\n continue;\n }\n\n for (const content of hunk.hunkContent) {\n if (content.type === 'context') {\n if (lineNumber < currentLineNumber + content.lines) {\n const difference = lineNumber - currentLineNumber;\n targetSplitIndex = splitIndex + difference;\n targetUnifiedIndex = unifiedIndex + difference;\n break hunkIterator;\n } else {\n currentLineNumber += content.lines;\n splitIndex += content.lines;\n unifiedIndex += content.lines;\n }\n } else {\n const sideCount =\n side === 'deletions' ? content.deletions : content.additions;\n if (lineNumber < currentLineNumber + sideCount) {\n const indexDifference = lineNumber - currentLineNumber;\n targetUnifiedIndex =\n unifiedIndex +\n (side === 'additions' ? content.deletions : 0) +\n indexDifference;\n targetSplitIndex = splitIndex + indexDifference;\n\n break hunkIterator;\n } else {\n currentLineNumber += sideCount;\n splitIndex += Math.max(content.deletions, content.additions);\n unifiedIndex += content.deletions + content.additions;\n }\n }\n }\n\n break hunkIterator;\n }\n\n if (targetUnifiedIndex == null || targetSplitIndex == null) {\n return undefined;\n }\n return [targetUnifiedIndex, targetSplitIndex];\n };\n\n // FIXME(amadeus): This is a bit of a looming issue that I'll need to resolve:\n // * Do we publicly allow merging of options or do we have individualized setters?\n // * When setting new options, we need to figure out what settings require a\n // re-render and which can just be applied more elegantly\n // * There's also an issue of options that live here on the File class and\n // those that live on the Hunk class, and it's a bit of an issue with passing\n // settings down and mirroring them (not great...)\n public setOptions(options: FileDiffOptions<LAnnotation> | undefined): void {\n if (options == null) return;\n this.options = options;\n this.cachedHeaderHTML = undefined;\n this.hunksRenderer.setOptions(this.getHunksRendererOptions(options));\n this.syncInteractionOptions();\n }\n\n protected syncInteractionOptions(): void {\n this.interactionManager.setOptions(\n pluckInteractionOptions(\n this.options,\n typeof this.options.hunkSeparators === 'function' ||\n (this.options.hunkSeparators ?? 'line-info') === 'line-info' ||\n this.options.hunkSeparators === 'line-info-basic'\n ? this.handleExpandHunk\n : undefined,\n this.getLineIndex\n )\n );\n }\n\n private mergeOptions(options: Partial<FileDiffOptions<LAnnotation>>): void {\n this.options = { ...this.options, ...options };\n }\n\n public setThemeType(themeType: ThemeTypes): void {\n if ((this.options.themeType ?? 'system') === themeType) {\n return;\n }\n this.mergeOptions({ themeType });\n this.applyCachedThemeState(themeType);\n }\n\n private applyCachedThemeState(themeType: ThemeTypes): boolean {\n if (\n typeof this.options.theme === 'string' ||\n this.fileContainer == null ||\n this.appliedThemeCSS == null\n ) {\n return false;\n }\n const effectiveThemeType = this.appliedThemeCSS.baseThemeType ?? themeType;\n if (this.appliedThemeCSS.themeType === effectiveThemeType) {\n return false;\n }\n this.applyThemeState(\n this.fileContainer,\n this.appliedThemeCSS.themeStyles,\n themeType,\n this.appliedThemeCSS.baseThemeType\n );\n return true;\n }\n\n private hasThemeChanged(): boolean {\n return (\n this.appliedThemeCSS != null &&\n !areThemesEqual(\n this.appliedThemeCSS.theme,\n this.options.theme ?? DEFAULT_THEMES\n )\n );\n }\n\n public getHoveredLine = (): GetHoveredLineResult<'diff'> | undefined => {\n return this.interactionManager.getHoveredLine();\n };\n\n public setLineAnnotations(\n lineAnnotations: DiffLineAnnotation<LAnnotation>[]\n ): void {\n this.lineAnnotations = lineAnnotations;\n }\n\n private canPartiallyRender(\n forceRender: boolean,\n annotationsChanged: boolean,\n didContentChange: boolean\n ): boolean {\n if (\n forceRender ||\n annotationsChanged ||\n didContentChange ||\n typeof this.options.hunkSeparators === 'function'\n ) {\n return false;\n }\n return true;\n }\n\n public setSelectedLines(\n range: SelectedLineRange | null,\n options?: SelectionWriteOptions\n ): void {\n this.interactionManager.setSelection(range, options);\n }\n\n public flushManagers(): void {\n if (!this.managersDirty || this.pre == null) {\n this.managersDirty = false;\n return;\n }\n\n const { diffStyle = 'split', overflow = 'scroll' } = this.options;\n this.interactionManager.setup(this.pre);\n this.resizeManager.setup(this.pre, overflow === 'wrap');\n if (overflow === 'scroll' && diffStyle === 'split') {\n this.scrollSyncManager.setup(\n this.pre,\n this.codeDeletions,\n this.codeAdditions\n );\n } else {\n this.scrollSyncManager.cleanUp();\n }\n this.managersDirty = false;\n }\n\n public cleanUp(recycle: boolean = false): void {\n this.resizeManager.cleanUp();\n this.interactionManager.cleanUp();\n this.scrollSyncManager.cleanUp();\n this.managersDirty = false;\n this.workerManager?.unsubscribeToThemeChanges(this);\n this.renderRange = undefined;\n\n // Clean up the elements\n if (!this.isContainerManaged) {\n this.fileContainer?.remove();\n }\n this.fileContainer = undefined;\n this.lineAnnotations = [];\n this.clearAuxiliaryNodes();\n this.annotationCache.clear();\n this.pre = undefined;\n this.codeUnified = undefined;\n this.codeDeletions = undefined;\n this.codeAdditions = undefined;\n this.bufferBefore = undefined;\n this.bufferAfter = undefined;\n this.appliedPreAttributes = undefined;\n this.headerElement = undefined;\n this.headerPrefix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n this.placeHolder = undefined;\n this.lastRenderedHeaderHTML = undefined;\n if (!recycle) {\n this.cachedHeaderHTML = undefined;\n }\n this.errorWrapper = undefined;\n this.spriteSVG = undefined;\n this.lastRowCount = undefined;\n this.themeCSSStyle = undefined;\n this.appliedThemeCSS = undefined;\n this.hasAdoptedThemeCSS = false;\n this.unsafeCSSStyle = undefined;\n this.appliedUnsafeCSS = undefined;\n\n if (recycle) {\n this.hunksRenderer.recycle();\n } else {\n this.hunksRenderer.cleanUp();\n this.workerManager = undefined;\n // Clean up the data\n this.fileDiff = undefined;\n this.deletionFile = undefined;\n this.additionFile = undefined;\n }\n\n this.enabled = false;\n }\n\n public virtualizedSetup(): void {\n this.enabled = true;\n this.workerManager?.subscribeToThemeChanges(this);\n }\n\n public hydrate(props: FileDiffHydrationProps<LAnnotation>): void {\n const {\n fileContainer,\n prerenderedHTML,\n preventEmit = false,\n lineAnnotations,\n oldFile,\n newFile,\n fileDiff,\n } = props;\n this.hydrateElements(fileContainer, prerenderedHTML);\n if (\n shouldRenderCode(\n this.pre,\n hasDiffContent({ fileDiff, oldFile, newFile }),\n this.options.collapsed\n ) ||\n shouldRenderHeader(\n this.headerElement,\n hasDiffHeaderContent({ fileDiff, oldFile, newFile }),\n this.options.disableFileHeader\n )\n ) {\n this.render({ ...props, preventEmit: true });\n }\n // Otherwise orchestrate our setup\n else {\n this.hydrationSetup({\n fileDiff,\n oldFile,\n newFile,\n lineAnnotations,\n });\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n }\n\n protected hydrateElements(\n fileContainer: HTMLElement,\n prerenderedHTML: string | undefined\n ): void {\n prerenderHTMLIfNecessary(fileContainer, prerenderedHTML);\n for (const element of fileContainer.shadowRoot?.children ?? []) {\n if (element instanceof SVGElement) {\n this.spriteSVG = element;\n continue;\n }\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (element instanceof HTMLPreElement) {\n this.pre = element;\n for (const code of element.children) {\n if (\n !(code instanceof HTMLElement) ||\n code.tagName.toLowerCase() !== 'code'\n ) {\n continue;\n }\n if ('deletions' in code.dataset) {\n this.codeDeletions = code;\n }\n if ('additions' in code.dataset) {\n this.codeAdditions = code;\n }\n if ('unified' in code.dataset) {\n this.codeUnified = code;\n }\n }\n continue;\n }\n if ('diffsHeader' in element.dataset) {\n this.headerElement = element;\n continue;\n }\n if (\n element instanceof HTMLStyleElement &&\n element.hasAttribute(THEME_CSS_ATTRIBUTE)\n ) {\n this.themeCSSStyle = element;\n continue;\n }\n if (\n element instanceof HTMLStyleElement &&\n element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)\n ) {\n this.unsafeCSSStyle = element;\n this.appliedUnsafeCSS = element.textContent;\n continue;\n }\n }\n if (this.pre != null) {\n this.syncCodeNodesFromPre(this.pre);\n this.pre.removeAttribute('data-dehydrated');\n }\n this.fileContainer = fileContainer;\n this.hydrateMeasuredScrollbar();\n }\n\n protected hydrationSetup({\n fileDiff,\n oldFile,\n newFile,\n lineAnnotations,\n }: HydrationSetup<LAnnotation>): void {\n // It's possible we are hydrating a pure-rename and therefore there will be\n // no pre element\n this.lineAnnotations = lineAnnotations ?? this.lineAnnotations;\n this.additionFile = newFile;\n this.deletionFile = oldFile;\n this.fileDiff =\n fileDiff ??\n (oldFile != null && newFile != null\n ? parseDiffFromFile(oldFile, newFile, this.options.parseDiffOptions)\n : undefined);\n\n if (this.pre == null) {\n return;\n }\n\n this.syncInteractionOptions();\n this.hunksRenderer.hydrate(this.fileDiff);\n // FIXME(amadeus): not sure how to handle this yet...\n // this.renderSeparators();\n this.renderAnnotations();\n this.renderGutterUtility();\n this.injectUnsafeCSS();\n this.managersDirty = true;\n this.flushManagers();\n }\n\n public rerender(): void {\n if (\n !this.enabled ||\n (this.fileDiff == null &&\n this.additionFile == null &&\n this.deletionFile == null)\n ) {\n return;\n }\n this.render({ forceRender: true, renderRange: this.renderRange });\n }\n\n public onThemeChange(): void {\n this.hunksRenderer.clearRenderCache();\n this.rerender();\n }\n\n // This wrapper must stay separate from `expandHunk` because subclasses like\n // `VirtualizedFileDiff` replace `expandHunk` with their own instance field\n // after `super()` returns. `InteractionManager` is created in this base\n // constructor, so it needs a stable callback that resolves `this.expandHunk`\n // at click time instead of capturing the base implementation too early.\n public handleExpandHunk = (\n hunkIndex: number,\n direction: ExpansionDirections,\n expansionLineCountOverride?: number\n ): void => {\n this.expandHunk(hunkIndex, direction, expansionLineCountOverride);\n };\n\n public expandHunk = (\n hunkIndex: number,\n direction: ExpansionDirections,\n expansionLineCountOverride?: number\n ): void => {\n this.hunksRenderer.expandHunk(\n hunkIndex,\n direction,\n expansionLineCountOverride\n );\n this.rerender();\n };\n\n public render({\n oldFile,\n newFile,\n fileDiff,\n deferManagers = false,\n forceRender = false,\n preventEmit = false,\n lineAnnotations,\n fileContainer,\n containerWrapper,\n renderRange,\n }: FileDiffRenderProps<LAnnotation>): boolean {\n if (!this.enabled) {\n // NOTE(amadeus): May need to be a silent failure? Making it loud for now\n // to better understand it\n throw new Error(\n 'FileDiff.render: attempting to call render after cleaned up'\n );\n }\n const { collapsed = false, themeType = 'system' } = this.options;\n const nextRenderRange = collapsed ? undefined : renderRange;\n const themeChanged = this.hasThemeChanged();\n const filesDidChange =\n oldFile != null &&\n newFile != null &&\n (!areFilesEqual(oldFile, this.deletionFile) ||\n !areFilesEqual(newFile, this.additionFile));\n let diffDidChange = fileDiff != null && fileDiff !== this.fileDiff;\n const annotationsChanged =\n lineAnnotations != null &&\n (lineAnnotations.length > 0 || this.lineAnnotations.length > 0)\n ? lineAnnotations !== this.lineAnnotations\n : false;\n\n if (\n !collapsed &&\n areRenderRangesEqual(nextRenderRange, this.renderRange) &&\n !forceRender &&\n !annotationsChanged &&\n !themeChanged &&\n // If using the fileDiff API, lets check to see if they are equal to\n // avoid doing work\n ((fileDiff != null && fileDiff === this.fileDiff) ||\n // If using the oldFile/newFile API then lets check to see if they are\n // equal\n (fileDiff == null && !filesDidChange))\n ) {\n return this.applyCachedThemeState(themeType);\n }\n\n const { renderRange: previousRenderRange } = this;\n this.renderRange = nextRenderRange;\n this.deletionFile = oldFile;\n this.additionFile = newFile;\n\n if (fileDiff != null) {\n this.fileDiff = fileDiff;\n } else if (oldFile != null && newFile != null && filesDidChange) {\n diffDidChange = true;\n this.fileDiff = parseDiffFromFile(\n oldFile,\n newFile,\n this.options.parseDiffOptions\n );\n }\n if (diffDidChange) {\n this.cachedHeaderHTML = undefined;\n }\n\n if (lineAnnotations != null) {\n this.setLineAnnotations(lineAnnotations);\n }\n if (this.fileDiff == null) {\n return false;\n }\n this.hunksRenderer.setOptions(this.getHunksRendererOptions(this.options));\n this.syncInteractionOptions();\n\n this.hunksRenderer.setLineAnnotations(this.lineAnnotations);\n\n const { disableErrorHandling = false, disableFileHeader = false } =\n this.options;\n\n if (disableFileHeader) {\n // Remove existing header from DOM\n if (this.headerElement != null) {\n this.headerElement.remove();\n this.headerElement = undefined;\n this.lastRenderedHeaderHTML = undefined;\n }\n this.clearHeaderSlots();\n }\n fileContainer = this.getOrCreateFileContainer(\n fileContainer,\n containerWrapper\n );\n this.applyCachedThemeState(themeType);\n\n if (collapsed) {\n this.removeRenderedCode();\n this.clearAuxiliaryNodes();\n\n try {\n const hunksResult = this.hunksRenderer.renderDiff(\n this.fileDiff,\n EMPTY_RENDER_RANGE\n );\n if (hunksResult != null) {\n this.applyThemeState(\n fileContainer,\n hunksResult.themeStyles,\n themeType,\n hunksResult.baseThemeType\n );\n }\n if (hunksResult?.headerElement != null) {\n this.applyHeaderToDOM(hunksResult.headerElement, fileContainer);\n }\n this.renderSeparators([]);\n this.injectUnsafeCSS();\n } catch (error: unknown) {\n if (disableErrorHandling) {\n throw error;\n }\n console.error(error);\n if (error instanceof Error) {\n this.applyErrorToDOM(error, fileContainer);\n }\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n return true;\n }\n\n try {\n const pre = this.getOrCreatePreNode(fileContainer);\n\n // Attempt to partially render\n const didPartiallyRender =\n this.canPartiallyRender(\n forceRender,\n annotationsChanged,\n filesDidChange || diffDidChange || themeChanged\n ) &&\n this.applyPartialRender({\n previousRenderRange,\n renderRange: nextRenderRange,\n });\n\n // If we were unable to partially render, perform a full render\n if (!didPartiallyRender) {\n const hunksResult = this.hunksRenderer.renderDiff(\n this.fileDiff,\n nextRenderRange\n );\n if (hunksResult == null) {\n // FIXME(amadeus): I don't think we actually need this check, as\n // DiffHunksRenderer should probably take care of it for us?\n if (this.workerManager?.isInitialized() === false) {\n void this.workerManager.initialize().then(() => this.rerender());\n }\n return false;\n }\n\n this.applyThemeState(\n fileContainer,\n hunksResult.themeStyles,\n themeType,\n hunksResult.baseThemeType\n );\n\n if (hunksResult.headerElement != null) {\n this.applyHeaderToDOM(hunksResult.headerElement, fileContainer);\n }\n if (\n hunksResult.additionsContentAST != null ||\n hunksResult.deletionsContentAST != null ||\n hunksResult.unifiedContentAST != null\n ) {\n this.applyHunksToDOM(pre, hunksResult);\n } else if (this.pre != null) {\n this.pre.remove();\n this.pre = undefined;\n }\n this.renderSeparators(hunksResult.hunkData);\n }\n\n this.applyBuffers(pre, nextRenderRange);\n this.injectUnsafeCSS();\n this.renderAnnotations();\n this.renderGutterUtility();\n\n this.managersDirty = true;\n if (!deferManagers) {\n this.flushManagers();\n }\n } catch (error: unknown) {\n if (disableErrorHandling) {\n throw error;\n }\n console.error(error);\n if (error instanceof Error) {\n this.applyErrorToDOM(error, fileContainer);\n }\n }\n if (!preventEmit) {\n this.emitPostRender();\n }\n return true;\n }\n\n protected emitPostRender(): void {\n if (this.fileContainer != null) {\n this.options.onPostRender?.(this.fileContainer, this);\n }\n }\n\n private removeRenderedCode(): void {\n this.resizeManager.cleanUp();\n this.scrollSyncManager.cleanUp();\n this.interactionManager.cleanUp();\n\n this.bufferBefore?.remove();\n this.bufferBefore = undefined;\n this.bufferAfter?.remove();\n this.bufferAfter = undefined;\n\n this.codeUnified?.remove();\n this.codeUnified = undefined;\n this.codeDeletions?.remove();\n this.codeDeletions = undefined;\n this.codeAdditions?.remove();\n this.codeAdditions = undefined;\n\n this.pre?.remove();\n this.pre = undefined;\n\n this.appliedPreAttributes = undefined;\n this.lastRowCount = undefined;\n }\n\n private clearAuxiliaryNodes(): void {\n for (const { element } of this.separatorCache.values()) {\n element.remove();\n }\n this.separatorCache.clear();\n\n for (const { element } of this.annotationCache.values()) {\n element.remove();\n }\n this.annotationCache.clear();\n\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n }\n\n public renderPlaceholder(height: number): boolean {\n if (this.fileContainer == null) {\n return false;\n }\n this.cleanChildNodes();\n\n if (this.placeHolder == null) {\n const shadowRoot =\n this.fileContainer.shadowRoot ??\n this.fileContainer.attachShadow({ mode: 'open' });\n this.placeHolder = document.createElement('div');\n this.placeHolder.dataset.placeholder = '';\n shadowRoot.appendChild(this.placeHolder);\n }\n this.placeHolder.style.setProperty('height', `${height}px`);\n return true;\n }\n\n public primeHighlightCache(): void {\n const { fileDiff, workerManager } = this;\n if (\n fileDiff == null ||\n workerManager == null ||\n isDiffPlainText(fileDiff)\n ) {\n return;\n }\n const tokenizeMaxLength =\n this.options.tokenizeMaxLength ?? DEFAULT_TOKENIZE_MAX_LENGTH;\n if (\n Math.max(fileDiff.additionLines.length, fileDiff.deletionLines.length) >\n tokenizeMaxLength\n ) {\n return;\n }\n workerManager.primeDiffHighlightCache(fileDiff);\n }\n\n private cleanChildNodes() {\n this.resizeManager.cleanUp();\n this.scrollSyncManager.cleanUp();\n this.interactionManager.cleanUp();\n this.clearAuxiliaryNodes();\n\n this.bufferAfter?.remove();\n this.bufferBefore?.remove();\n this.codeAdditions?.remove();\n this.codeDeletions?.remove();\n this.codeUnified?.remove();\n this.errorWrapper?.remove();\n this.headerElement?.remove();\n this.headerPrefix?.remove();\n this.headerMetadata?.remove();\n this.headerCustom?.remove();\n this.pre?.remove();\n this.spriteSVG?.remove();\n this.themeCSSStyle?.remove();\n this.unsafeCSSStyle?.remove();\n\n this.bufferAfter = undefined;\n this.bufferBefore = undefined;\n this.codeAdditions = undefined;\n this.codeDeletions = undefined;\n this.codeUnified = undefined;\n this.errorWrapper = undefined;\n this.headerElement = undefined;\n this.headerPrefix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n this.pre = undefined;\n this.spriteSVG = undefined;\n this.themeCSSStyle = undefined;\n this.appliedThemeCSS = undefined;\n this.hasAdoptedThemeCSS = false;\n this.unsafeCSSStyle = undefined;\n this.appliedUnsafeCSS = undefined;\n\n this.lastRenderedHeaderHTML = undefined;\n this.lastRowCount = undefined;\n }\n\n private renderSeparators(hunkData: HunkData[]): void {\n const { hunkSeparators } = this.options;\n if (\n this.isContainerManaged ||\n this.fileContainer == null ||\n typeof hunkSeparators !== 'function'\n ) {\n for (const { element } of this.separatorCache.values()) {\n element.remove();\n }\n this.separatorCache.clear();\n return;\n }\n const staleSeparators = new Map(this.separatorCache);\n for (const hunk of hunkData) {\n const id = hunk.slotName;\n let cache = this.separatorCache.get(id);\n if (cache == null || !areHunkDataEqual(hunk, cache.hunkData)) {\n cache?.element.remove();\n const element = document.createElement('div');\n element.style.display = 'contents';\n element.slot = hunk.slotName;\n const child = hunkSeparators(hunk, this);\n if (child != null) {\n element.appendChild(child);\n }\n this.fileContainer.appendChild(element);\n cache = { element, hunkData: hunk };\n this.separatorCache.set(id, cache);\n }\n staleSeparators.delete(id);\n }\n for (const [id, { element }] of staleSeparators.entries()) {\n this.separatorCache.delete(id);\n element.remove();\n }\n }\n\n protected renderAnnotations(): void {\n if (this.isContainerManaged || this.fileContainer == null) {\n for (const { element } of this.annotationCache.values()) {\n element.remove();\n }\n this.annotationCache.clear();\n return;\n }\n const staleAnnotations = new Map(this.annotationCache);\n const { renderAnnotation } = this.options;\n if (renderAnnotation != null && this.lineAnnotations.length > 0) {\n for (const [index, annotation] of this.lineAnnotations.entries()) {\n const id = `${index}-${getLineAnnotationName(annotation)}`;\n let cache = this.annotationCache.get(id);\n if (\n cache == null ||\n !areDiffLineAnnotationsEqual(annotation, cache.annotation)\n ) {\n cache?.element.remove();\n const content = renderAnnotation(annotation);\n // If we can't render anything, then we should not render anything\n // and clear the annotation cache if necessary.\n if (content == null) {\n continue;\n }\n cache = {\n element: createAnnotationWrapperNode(\n getLineAnnotationName(annotation)\n ),\n annotation,\n };\n cache.element.appendChild(content);\n this.fileContainer.appendChild(cache.element);\n this.annotationCache.set(id, cache);\n }\n staleAnnotations.delete(id);\n }\n }\n for (const [id, { element }] of staleAnnotations.entries()) {\n this.annotationCache.delete(id);\n element.remove();\n }\n }\n\n protected renderGutterUtility(): void {\n const { renderGutterUtility } = this.options;\n if (this.fileContainer == null || renderGutterUtility == null) {\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n return;\n }\n const element = renderGutterUtility(this.interactionManager.getHoveredLine);\n if (element != null && this.gutterUtilityContent != null) {\n return;\n } else if (element == null) {\n this.gutterUtilityContent?.remove();\n this.gutterUtilityContent = undefined;\n return;\n }\n const gutterUtilityContent = createGutterUtilityContentNode();\n gutterUtilityContent.appendChild(element);\n this.fileContainer.appendChild(gutterUtilityContent);\n this.gutterUtilityContent = gutterUtilityContent;\n }\n\n protected getOrCreateFileContainer(\n fileContainer?: HTMLElement,\n parentNode?: HTMLElement\n ): HTMLElement {\n const previousContainer = this.fileContainer;\n this.fileContainer =\n fileContainer ??\n this.fileContainer ??\n document.createElement(DIFFS_TAG_NAME);\n const containerChanged = previousContainer !== this.fileContainer;\n if (previousContainer != null && containerChanged) {\n this.lastRenderedHeaderHTML = undefined;\n this.headerElement = undefined;\n }\n if (parentNode != null && this.fileContainer.parentNode !== parentNode) {\n parentNode.appendChild(this.fileContainer);\n }\n if (containerChanged) {\n this.adoptReusableShellElements(this.fileContainer);\n }\n this.ensureSpriteSVG(this.fileContainer);\n return this.fileContainer;\n }\n\n // NOTE(amadeus): Technically this method is not safe for use outside of\n // the CodeView component, however I don't think in practice it really\n // should matter, but maybe there's some system we need in place to prevent\n // this from running outside of that environment?\n //\n // It's making very specific assumptions that all the elements will have the\n // correct content based on CodeView global options\n private adoptReusableShellElements(fileContainer: HTMLElement): void {\n const { shadowRoot } = fileContainer;\n if (shadowRoot == null) {\n return;\n }\n\n for (const element of shadowRoot.children) {\n if (element instanceof SVGElement) {\n this.spriteSVG ??= element;\n } else if (\n isStyleNode(element) &&\n element.hasAttribute(THEME_CSS_ATTRIBUTE)\n ) {\n this.themeCSSStyle ??= element;\n this.hasAdoptedThemeCSS = true;\n } else if (\n isStyleNode(element) &&\n element.hasAttribute(UNSAFE_CSS_ATTRIBUTE)\n ) {\n this.unsafeCSSStyle ??= element;\n this.appliedUnsafeCSS ??= this.options.unsafeCSS ?? undefined;\n }\n }\n }\n\n private ensureSpriteSVG(fileContainer: HTMLElement): void {\n const shadowRoot =\n fileContainer.shadowRoot ?? fileContainer.attachShadow({ mode: 'open' });\n if (this.spriteSVG == null) {\n const fragment = document.createElement('div');\n fragment.innerHTML = SVGSpriteSheet;\n const firstChild = fragment.firstChild;\n if (firstChild instanceof SVGElement) {\n this.spriteSVG = firstChild;\n }\n }\n if (this.spriteSVG != null && this.spriteSVG.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.spriteSVG);\n }\n }\n\n private getOrCreatePreNode(container: HTMLElement): HTMLPreElement {\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n // If we haven't created a pre element yet, lets go ahead and do that\n if (this.pre == null) {\n this.pre = document.createElement('pre');\n this.appliedPreAttributes = undefined;\n this.codeUnified = undefined;\n this.codeDeletions = undefined;\n this.codeAdditions = undefined;\n shadowRoot.appendChild(this.pre);\n }\n // If we have a new parent container for the pre element, lets go ahead and\n // move it into the new container\n else if (this.pre.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.pre);\n this.appliedPreAttributes = undefined;\n }\n\n this.placeHolder?.remove();\n this.placeHolder = undefined;\n\n return this.pre;\n }\n\n protected syncCodeNodesFromPre(pre: HTMLPreElement): void {\n this.codeUnified = undefined;\n this.codeDeletions = undefined;\n this.codeAdditions = undefined;\n for (const child of Array.from(pre.children)) {\n if (!(child instanceof HTMLElement)) {\n continue;\n }\n if (child.hasAttribute('data-unified')) {\n this.codeUnified = child;\n } else if (child.hasAttribute('data-deletions')) {\n this.codeDeletions = child;\n } else if (child.hasAttribute('data-additions')) {\n this.codeAdditions = child;\n }\n }\n }\n\n private applyHeaderToDOM(\n headerAST: HASTElement,\n container: HTMLElement\n ): void {\n this.cleanupErrorWrapper();\n this.placeHolder?.remove();\n this.placeHolder = undefined;\n const { fileDiff } = this;\n const headerHTML = this.cachedHeaderHTML ?? toHtml(headerAST);\n this.cachedHeaderHTML = headerHTML;\n if (headerHTML !== this.lastRenderedHeaderHTML) {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = headerHTML;\n const newHeader = tempDiv.firstElementChild;\n if (!(newHeader instanceof HTMLElement)) {\n return;\n }\n if (this.headerElement != null) {\n container.shadowRoot?.replaceChild(newHeader, this.headerElement);\n } else {\n container.shadowRoot?.prepend(newHeader);\n }\n this.headerElement = newHeader;\n this.lastRenderedHeaderHTML = headerHTML;\n }\n\n if (this.isContainerManaged || fileDiff == null) {\n return;\n }\n\n const { renderCustomHeader, renderHeaderPrefix, renderHeaderMetadata } =\n this.options;\n\n if (renderCustomHeader != null) {\n const content = renderCustomHeader(fileDiff) ?? undefined;\n this.headerCustom = this.upsertHeaderSlotElement(\n container,\n this.headerCustom,\n CUSTOM_HEADER_SLOT_ID,\n content\n );\n this.headerPrefix?.remove();\n this.headerMetadata?.remove();\n this.headerPrefix = undefined;\n this.headerMetadata = undefined;\n return;\n }\n\n const prefix = renderHeaderPrefix?.(fileDiff) ?? undefined;\n const content = renderHeaderMetadata?.(fileDiff) ?? undefined;\n this.headerPrefix = this.upsertHeaderSlotElement(\n container,\n this.headerPrefix,\n HEADER_PREFIX_SLOT_ID,\n prefix\n );\n this.headerMetadata = this.upsertHeaderSlotElement(\n container,\n this.headerMetadata,\n HEADER_METADATA_SLOT_ID,\n content\n );\n this.headerCustom?.remove();\n this.headerCustom = undefined;\n }\n\n private clearHeaderSlots(): void {\n this.headerPrefix?.remove();\n this.headerMetadata?.remove();\n this.headerCustom?.remove();\n this.headerPrefix = undefined;\n this.headerMetadata = undefined;\n this.headerCustom = undefined;\n }\n\n // Header slot callbacks are presence-based render hooks, not reactive views.\n private upsertHeaderSlotElement(\n container: HTMLElement,\n current: HTMLElement | undefined,\n slot: string,\n content: Element | string | number | undefined\n ): HTMLElement | undefined {\n if (content == null) {\n current?.remove();\n return undefined;\n }\n const element = current ?? this.createHeaderSlotElement(slot);\n if (current == null) {\n container.appendChild(element);\n }\n this.replaceHeaderSlotContent(element, content);\n return element;\n }\n\n private replaceHeaderSlotContent(\n element: HTMLElement,\n content: Element | string | number\n ): void {\n element.replaceChildren();\n if (content instanceof Element) {\n element.appendChild(content);\n } else {\n element.innerText = `${content}`;\n }\n }\n\n private createHeaderSlotElement(slot: string): HTMLElement {\n const element = document.createElement('div');\n element.slot = slot;\n return element;\n }\n\n protected injectUnsafeCSS(): void {\n const { unsafeCSS } = this.options;\n const shadowRoot = this.fileContainer?.shadowRoot;\n if (shadowRoot == null) {\n return;\n }\n\n if (unsafeCSS == null || unsafeCSS === '') {\n if (this.unsafeCSSStyle != null) {\n this.unsafeCSSStyle.remove();\n this.unsafeCSSStyle = undefined;\n }\n this.appliedUnsafeCSS = undefined;\n return;\n }\n\n if (\n this.unsafeCSSStyle?.parentNode === shadowRoot &&\n this.appliedUnsafeCSS === unsafeCSS\n ) {\n return;\n }\n\n // Create or update the style element\n this.unsafeCSSStyle ??= createUnsafeCSSStyleNode();\n if (this.unsafeCSSStyle.parentNode !== shadowRoot) {\n shadowRoot.appendChild(this.unsafeCSSStyle);\n }\n // Wrap in @layer unsafe to match SSR behavior\n this.unsafeCSSStyle.textContent = wrapUnsafeCSS(unsafeCSS);\n this.appliedUnsafeCSS = unsafeCSS;\n }\n\n private applyThemeState(\n container: HTMLElement,\n themeStyles: string,\n themeType: ThemeTypes,\n baseThemeType?: 'light' | 'dark'\n ): void {\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n const effectiveThemeType = baseThemeType ?? themeType;\n const currentTheme = this.options.theme ?? DEFAULT_THEMES;\n const theme =\n typeof currentTheme === 'string' ? currentTheme : { ...currentTheme };\n const scrollbarGutter = getMeasuredScrollbarGutter(shadowRoot);\n if (\n this.themeCSSStyle?.parentNode === shadowRoot &&\n this.appliedThemeCSS?.themeStyles === themeStyles &&\n this.appliedThemeCSS.themeType === effectiveThemeType &&\n this.appliedThemeCSS.scrollbarGutter === scrollbarGutter\n ) {\n this.appliedThemeCSS.theme = theme;\n return;\n }\n if (\n this.hasAdoptedThemeCSS &&\n this.themeCSSStyle?.parentNode === shadowRoot\n ) {\n this.hasAdoptedThemeCSS = false;\n this.appliedThemeCSS = {\n theme,\n themeStyles,\n themeType: effectiveThemeType,\n baseThemeType,\n scrollbarGutter,\n };\n return;\n }\n this.themeCSSStyle = upsertHostThemeStyle({\n shadowRoot,\n currentNode: this.themeCSSStyle,\n themeCSS: wrapThemeCSS(themeStyles, effectiveThemeType, scrollbarGutter),\n });\n this.appliedThemeCSS =\n this.themeCSSStyle != null\n ? {\n theme,\n themeStyles,\n themeType: effectiveThemeType,\n baseThemeType,\n scrollbarGutter,\n }\n : undefined;\n }\n\n private hydrateMeasuredScrollbar(): void {\n const shadowRoot = this.fileContainer?.shadowRoot;\n if (shadowRoot == null || this.themeCSSStyle == null) {\n return;\n }\n this.themeCSSStyle.textContent = patchScrollbarGutterSize(\n this.themeCSSStyle.textContent ?? '',\n getMeasuredScrollbarGutter(shadowRoot)\n );\n }\n\n private applyHunksToDOM(\n pre: HTMLPreElement,\n result: HunksRenderResult\n ): void {\n const { overflow = 'scroll' } = this.options;\n const containerSize =\n (this.options.hunkSeparators ?? 'line-info') === 'line-info';\n const rowSpan = overflow === 'wrap' ? result.rowCount : undefined;\n this.cleanupErrorWrapper();\n this.applyPreNodeAttributes(pre, result);\n\n let shouldReplace = false;\n // Create code elements and insert HTML content\n const codeElements: HTMLElement[] = [];\n const unifiedAST = this.hunksRenderer.renderCodeAST('unified', result);\n const deletionsAST = this.hunksRenderer.renderCodeAST('deletions', result);\n const additionsAST = this.hunksRenderer.renderCodeAST('additions', result);\n if (unifiedAST != null) {\n shouldReplace =\n this.codeUnified == null ||\n this.codeAdditions != null ||\n this.codeDeletions != null;\n\n // Clean up addition/deletion elements if necessary\n this.codeDeletions?.remove();\n this.codeDeletions = undefined;\n this.codeAdditions?.remove();\n this.codeAdditions = undefined;\n\n this.codeUnified = getOrCreateCodeNode({\n code: this.codeUnified,\n columnType: 'unified',\n rowSpan,\n containerSize,\n });\n this.codeUnified.innerHTML =\n this.hunksRenderer.renderPartialHTML(unifiedAST);\n codeElements.push(this.codeUnified);\n } else if (deletionsAST != null || additionsAST != null) {\n if (deletionsAST != null) {\n shouldReplace = this.codeDeletions == null || this.codeUnified != null;\n\n // Clean up unified column if necessary\n this.codeUnified?.remove();\n this.codeUnified = undefined;\n\n this.codeDeletions = getOrCreateCodeNode({\n code: this.codeDeletions,\n columnType: 'deletions',\n rowSpan,\n containerSize,\n });\n this.codeDeletions.innerHTML =\n this.hunksRenderer.renderPartialHTML(deletionsAST);\n codeElements.push(this.codeDeletions);\n } else {\n // If we have no deletion column, lets clean it up if it exists\n this.codeDeletions?.remove();\n this.codeDeletions = undefined;\n }\n\n if (additionsAST != null) {\n shouldReplace =\n shouldReplace ||\n this.codeAdditions == null ||\n this.codeUnified != null;\n\n // Clean up unified column if necessary\n this.codeUnified?.remove();\n this.codeUnified = undefined;\n\n this.codeAdditions = getOrCreateCodeNode({\n code: this.codeAdditions,\n columnType: 'additions',\n rowSpan,\n containerSize,\n });\n this.codeAdditions.innerHTML =\n this.hunksRenderer.renderPartialHTML(additionsAST);\n codeElements.push(this.codeAdditions);\n } else {\n // If we have no addition column, lets clean it up if it exists\n this.codeAdditions?.remove();\n this.codeAdditions = undefined;\n }\n } else {\n // if we get in here, there's no content to render, so lets just clean\n // everything up\n this.codeUnified?.remove();\n this.codeUnified = undefined;\n this.codeDeletions?.remove();\n this.codeDeletions = undefined;\n this.codeAdditions?.remove();\n this.codeAdditions = undefined;\n }\n\n if (codeElements.length === 0) {\n pre.textContent = '';\n } else if (shouldReplace) {\n pre.replaceChildren(...codeElements);\n }\n\n this.lastRowCount = result.rowCount;\n }\n\n private applyPartialRender({\n previousRenderRange,\n renderRange,\n }: ApplyPartialRenderProps): boolean {\n const {\n pre,\n codeUnified,\n codeAdditions,\n codeDeletions,\n options: { diffStyle = 'split' },\n } = this;\n if (\n pre == null ||\n // We must have a current and previous render range to do a partial render\n previousRenderRange == null ||\n renderRange == null ||\n // Neither render range may be infinite\n !Number.isFinite(previousRenderRange.totalLines) ||\n !Number.isFinite(renderRange.totalLines) ||\n this.lastRowCount == null\n ) {\n return false;\n }\n const codeElements = this.getCodeColumns(\n diffStyle,\n codeUnified,\n codeDeletions,\n codeAdditions\n );\n if (codeElements == null) {\n return false;\n }\n\n const previousStart = previousRenderRange.startingLine;\n const nextStart = renderRange.startingLine;\n const previousEnd = previousStart + previousRenderRange.totalLines;\n const nextEnd = nextStart + renderRange.totalLines;\n\n const overlapStart = Math.max(previousStart, nextStart);\n const overlapEnd = Math.min(previousEnd, nextEnd);\n if (overlapEnd <= overlapStart) {\n return false;\n }\n\n const trimStart = Math.max(0, overlapStart - previousStart);\n const trimEnd = Math.max(0, previousEnd - overlapEnd);\n\n const trimResult = this.trimColumns({\n columns: codeElements,\n trimStart,\n trimEnd,\n previousStart,\n overlapStart,\n overlapEnd,\n diffStyle,\n });\n if (trimResult < 0) {\n throw new Error('applyPartialRender: failed to trim to overlap');\n }\n\n if (this.lastRowCount < trimResult) {\n throw new Error('applyPartialRender: trimmed beyond DOM row count');\n }\n\n let rowCount = this.lastRowCount - trimResult;\n const renderChunk = (\n startingLine: number,\n totalLines: number\n ): HunksRenderResult | undefined => {\n if (totalLines <= 0 || this.fileDiff == null) {\n return undefined;\n }\n return this.hunksRenderer.renderDiff(this.fileDiff, {\n startingLine,\n totalLines,\n bufferBefore: 0,\n bufferAfter: 0,\n });\n };\n\n const prependResult = renderChunk(\n nextStart,\n Math.max(overlapStart - nextStart, 0)\n );\n if (prependResult == null && nextStart < overlapStart) {\n return false;\n }\n\n const appendResult = renderChunk(\n overlapEnd,\n Math.max(nextEnd - overlapEnd, 0)\n );\n if (appendResult == null && nextEnd > overlapEnd) {\n return false;\n }\n\n const applyChunk = (\n result: HunksRenderResult | undefined,\n insertPosition: 'afterbegin' | 'beforeend'\n ) => {\n if (result == null) {\n return;\n }\n if (diffStyle === 'unified' && !Array.isArray(codeElements)) {\n this.insertPartialHTML(diffStyle, codeElements, result, insertPosition);\n } else if (diffStyle === 'split' && Array.isArray(codeElements)) {\n this.insertPartialHTML(diffStyle, codeElements, result, insertPosition);\n } else {\n throw new Error(\n 'FileDiff.applyPartialRender.applyChunk: invalid chunk application'\n );\n }\n rowCount += result.rowCount;\n };\n\n this.cleanupErrorWrapper();\n applyChunk(prependResult, 'afterbegin');\n applyChunk(appendResult, 'beforeend');\n\n if (this.lastRowCount !== rowCount) {\n this.applyRowSpan(diffStyle, codeElements, rowCount);\n this.lastRowCount = rowCount;\n }\n\n return true;\n }\n\n private insertPartialHTML(\n diffStyle: 'unified',\n columns: ColumnElements,\n result: HunksRenderResult,\n insertPosition: 'afterbegin' | 'beforeend'\n ): void;\n private insertPartialHTML(\n diffStyle: 'split',\n columns: [ColumnElements | undefined, ColumnElements | undefined],\n result: HunksRenderResult,\n insertPosition: 'afterbegin' | 'beforeend'\n ): void;\n private insertPartialHTML(\n diffStyle: 'split' | 'unified',\n columns:\n | [ColumnElements | undefined, ColumnElements | undefined]\n | ColumnElements,\n result: HunksRenderResult,\n insertPosition: 'afterbegin' | 'beforeend'\n ): void {\n if (diffStyle === 'unified' && !Array.isArray(columns)) {\n const unifiedAST = this.hunksRenderer.renderCodeAST('unified', result);\n this.renderPartialColumn(columns, unifiedAST, insertPosition);\n } else if (diffStyle === 'split' && Array.isArray(columns)) {\n const deletionsAST = this.hunksRenderer.renderCodeAST(\n 'deletions',\n result\n );\n const additionsAST = this.hunksRenderer.renderCodeAST(\n 'additions',\n result\n );\n this.renderPartialColumn(columns[0], deletionsAST, insertPosition);\n this.renderPartialColumn(columns[1], additionsAST, insertPosition);\n } else {\n throw new Error(\n 'FileDiff.insertPartialHTML: Invalid argument composition'\n );\n }\n }\n\n private renderPartialColumn(\n column: ColumnElements | undefined,\n ast: ElementContent[] | undefined,\n insertPosition: 'afterbegin' | 'beforeend'\n ) {\n if (column == null || ast == null) {\n return;\n }\n const gutterChildren = getElementChildren(ast[0]);\n const contentChildren = getElementChildren(ast[1]);\n if (gutterChildren == null || contentChildren == null) {\n throw new Error('FileDiff.insertPartialHTML: Unexpected AST structure');\n }\n const firstHASTElement = contentChildren.at(0);\n if (\n insertPosition === 'beforeend' &&\n firstHASTElement?.type === 'element' &&\n typeof firstHASTElement.properties['data-buffer-size'] === 'number'\n ) {\n this.mergeBuffersIfNecessary(\n firstHASTElement.properties['data-buffer-size'],\n column.content.children[column.content.children.length - 1],\n column.gutter.children[column.gutter.children.length - 1],\n gutterChildren,\n contentChildren,\n true\n );\n }\n const lastHASTElement = contentChildren.at(-1);\n if (\n insertPosition === 'afterbegin' &&\n lastHASTElement?.type === 'element' &&\n typeof lastHASTElement.properties['data-buffer-size'] === 'number'\n ) {\n this.mergeBuffersIfNecessary(\n lastHASTElement.properties['data-buffer-size'],\n column.content.children[0],\n column.gutter.children[0],\n gutterChildren,\n contentChildren,\n false\n );\n }\n\n column.gutter.insertAdjacentHTML(\n insertPosition,\n this.hunksRenderer.renderPartialHTML(gutterChildren)\n );\n column.content.insertAdjacentHTML(\n insertPosition,\n this.hunksRenderer.renderPartialHTML(contentChildren)\n );\n }\n\n private mergeBuffersIfNecessary(\n adjustmentSize: number,\n contentElement: Element,\n gutterElement: Element,\n gutterChildren: ElementContent[],\n contentChildren: ElementContent[],\n fromStart: boolean\n ) {\n if (\n !(contentElement instanceof HTMLElement) ||\n !(gutterElement instanceof HTMLElement)\n ) {\n return;\n }\n const currentSize = this.getBufferSize(contentElement.dataset);\n if (currentSize == null) {\n return;\n }\n if (fromStart) {\n gutterChildren.shift();\n contentChildren.shift();\n } else {\n gutterChildren.pop();\n contentChildren.pop();\n }\n this.updateBufferSize(contentElement, currentSize + adjustmentSize);\n this.updateBufferSize(gutterElement, currentSize + adjustmentSize);\n }\n\n private applyRowSpan(\n diffStyle: 'split' | 'unified',\n columns:\n | [ColumnElements | undefined, ColumnElements | undefined]\n | ColumnElements,\n rowCount: number\n ): void {\n const applySpan = (column: ColumnElements | undefined) => {\n if (column == null) {\n return;\n }\n column.gutter.style.setProperty('grid-row', `span ${rowCount}`);\n column.content.style.setProperty('grid-row', `span ${rowCount}`);\n };\n if (diffStyle === 'unified' && !Array.isArray(columns)) {\n applySpan(columns);\n } else if (diffStyle === 'split' && Array.isArray(columns)) {\n applySpan(columns[0]);\n applySpan(columns[1]);\n } else {\n throw new Error('dun fuuuuked up');\n }\n }\n\n private trimColumnRows(\n columns: ColumnElements | undefined,\n preTrimCount: number,\n postTrimStart: number\n ): number {\n let visibleLineIndex = 0;\n let rowCount = 0;\n let rowIndex = 0;\n let pendingMetadataTrim = false;\n const hasPostTrim = postTrimStart >= 0;\n\n if (columns == null) {\n return 0;\n }\n const contentChildren = Array.from(columns.content.children);\n const gutterChildren = Array.from(columns.gutter.children);\n if (contentChildren.length !== gutterChildren.length) {\n throw new Error('FileDiff.trimColumnRows: columns do not match');\n }\n\n while (rowIndex < contentChildren.length) {\n if (preTrimCount <= 0 && !hasPostTrim && !pendingMetadataTrim) {\n break;\n }\n const gutterElement = gutterChildren[rowIndex];\n const contentElement = contentChildren[rowIndex];\n rowIndex++;\n\n if (\n !(gutterElement instanceof HTMLElement) ||\n !(contentElement instanceof HTMLElement)\n ) {\n console.error({ gutterElement, contentElement });\n throw new Error('FileDiff.trimColumnRows: invalid row elements');\n }\n\n if (pendingMetadataTrim) {\n pendingMetadataTrim = false;\n if (\n (gutterElement.dataset.gutterBuffer === 'annotation' &&\n 'lineAnnotation' in contentElement.dataset) ||\n (gutterElement.dataset.gutterBuffer === 'metadata' &&\n 'noNewline' in contentElement.dataset)\n ) {\n gutterElement.remove();\n contentElement.remove();\n rowCount++;\n continue;\n }\n }\n\n // If we found a line element, lets trim it if necessary\n if (\n 'lineIndex' in gutterElement.dataset &&\n 'lineIndex' in contentElement.dataset\n ) {\n if (\n preTrimCount > 0 ||\n (hasPostTrim && visibleLineIndex >= postTrimStart)\n ) {\n gutterElement.remove();\n contentElement.remove();\n if (preTrimCount > 0) {\n preTrimCount--;\n if (preTrimCount === 0) {\n pendingMetadataTrim = true;\n }\n }\n rowCount++;\n }\n visibleLineIndex++;\n continue;\n }\n\n // Separators should be removed, but don't count towards line indices\n if (\n 'separator' in gutterElement.dataset &&\n 'separator' in contentElement.dataset\n ) {\n if (\n preTrimCount > 0 ||\n (hasPostTrim && visibleLineIndex >= postTrimStart)\n ) {\n gutterElement.remove();\n contentElement.remove();\n rowCount++;\n }\n continue;\n }\n\n // Annotations should be removed, but don't count towards line indices\n if (\n gutterElement.dataset.gutterBuffer === 'annotation' &&\n 'lineAnnotation' in contentElement.dataset\n ) {\n if (\n preTrimCount > 0 ||\n (hasPostTrim && visibleLineIndex >= postTrimStart)\n ) {\n gutterElement.remove();\n contentElement.remove();\n rowCount++;\n }\n continue;\n }\n\n if (\n gutterElement.dataset.gutterBuffer === 'metadata' &&\n 'noNewline' in contentElement.dataset\n ) {\n if (\n preTrimCount > 0 ||\n (hasPostTrim && visibleLineIndex >= postTrimStart)\n ) {\n gutterElement.remove();\n contentElement.remove();\n rowCount++;\n }\n continue;\n }\n\n if (\n gutterElement.dataset.gutterBuffer === 'buffer' &&\n 'contentBuffer' in contentElement.dataset\n ) {\n const totalRows = this.getBufferSize(contentElement.dataset);\n if (totalRows == null) {\n throw new Error('FileDiff.trimColumnRows: invalid element');\n }\n if (preTrimCount > 0) {\n const rowsToRemove = Math.min(preTrimCount, totalRows);\n const newSize = totalRows - rowsToRemove;\n if (newSize > 0) {\n this.updateBufferSize(gutterElement, newSize);\n this.updateBufferSize(contentElement, newSize);\n rowCount += rowsToRemove;\n } else {\n gutterElement.remove();\n contentElement.remove();\n rowCount += totalRows;\n }\n preTrimCount -= rowsToRemove;\n if (preTrimCount === 0 && newSize === 0) {\n pendingMetadataTrim = true;\n }\n }\n // If we are in a post clip era...\n else if (hasPostTrim) {\n const bufferStart = visibleLineIndex;\n const bufferEnd = visibleLineIndex + totalRows - 1;\n if (postTrimStart <= bufferStart) {\n gutterElement.remove();\n contentElement.remove();\n rowCount += totalRows;\n } else if (postTrimStart <= bufferEnd) {\n const rowsToRemove = bufferEnd - postTrimStart + 1;\n const newSize = totalRows - rowsToRemove;\n this.updateBufferSize(gutterElement, newSize);\n this.updateBufferSize(contentElement, newSize);\n rowCount += rowsToRemove;\n }\n }\n visibleLineIndex += totalRows;\n continue;\n }\n\n console.error({ gutterElement, contentElement });\n throw new Error('FileDiff.trimColumnRows: unknown row elements');\n }\n\n return rowCount;\n }\n\n private trimColumns({\n columns,\n diffStyle,\n overlapEnd,\n overlapStart,\n previousStart,\n trimEnd,\n trimStart,\n // NOTE(amadeus): If we return -1 it means something went wrong\n // with the trim...\n // oxlint-disable-next-line no-redundant-type-constituents\n }: TrimColumnsToOverlapProps): number | -1 {\n const preTrimCount = Math.max(0, overlapStart - previousStart);\n const postTrimStart = overlapEnd - previousStart;\n if (postTrimStart < 0) {\n throw new Error('FileDiff.trimColumns: overlap ends before previous');\n }\n const shouldTrimStart = trimStart > 0;\n const shouldTrimEnd = trimEnd > 0;\n if (!shouldTrimStart && !shouldTrimEnd) {\n return 0;\n }\n const effectivePreTrimCount = shouldTrimStart ? preTrimCount : 0;\n const effectivePostTrimStart = shouldTrimEnd ? postTrimStart : -1;\n\n if (diffStyle === 'unified' && !Array.isArray(columns)) {\n const removedRows = this.trimColumnRows(\n columns,\n effectivePreTrimCount,\n effectivePostTrimStart\n );\n return removedRows;\n } else if (diffStyle === 'split' && Array.isArray(columns)) {\n const deletionsTrim = this.trimColumnRows(\n columns[0],\n effectivePreTrimCount,\n effectivePostTrimStart\n );\n const additionsTrim = this.trimColumnRows(\n columns[1],\n effectivePreTrimCount,\n effectivePostTrimStart\n );\n // We should avoid the trim validation if we are split but\n // there's only one side\n if (\n columns[0] != null &&\n columns[1] != null &&\n deletionsTrim !== additionsTrim\n ) {\n throw new Error('FileDiff.trimColumns: split columns out of sync');\n }\n return columns[0] != null ? deletionsTrim : additionsTrim;\n } else {\n console.error({ diffStyle, columns });\n throw new Error('FileDiff.trimColumns: Invalid columns for diffType');\n }\n }\n\n private getBufferSize(properties: DOMStringMap): number | undefined {\n const parsed = Number.parseInt(properties?.bufferSize ?? '', 10);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n\n private updateBufferSize(element: HTMLElement, size: number): void {\n element.dataset.bufferSize = `${size}`;\n element.style.setProperty('grid-row', `span ${size}`);\n element.style.setProperty('min-height', `calc(${size} * 1lh)`);\n }\n\n private getCodeColumns(\n diffStyle: 'split' | 'unified',\n codeUnified: HTMLElement | undefined,\n codeDeletions: HTMLElement | undefined,\n codeAdditions: HTMLElement | undefined\n ):\n | [ColumnElements | undefined, ColumnElements | undefined]\n | ColumnElements\n | undefined {\n function getColumns(\n code: HTMLElement | undefined\n ): ColumnElements | undefined {\n if (code == null) {\n return undefined;\n }\n const gutter = code.children[0];\n const content = code.children[1];\n if (\n !(gutter instanceof HTMLElement) ||\n !(content instanceof HTMLElement) ||\n gutter.dataset.gutter == null ||\n content.dataset.content == null\n ) {\n return undefined;\n }\n return { gutter, content };\n }\n\n if (diffStyle === 'unified') {\n return getColumns(codeUnified);\n } else {\n const deletions = getColumns(codeDeletions);\n const additions = getColumns(codeAdditions);\n return deletions != null || additions != null\n ? [deletions, additions]\n : undefined;\n }\n }\n\n private applyBuffers(\n pre: HTMLPreElement,\n renderRange: RenderRange | undefined\n ) {\n if (renderRange == null || this.shouldDisableVirtualizationBuffers()) {\n if (this.bufferBefore != null) {\n this.bufferBefore.remove();\n this.bufferBefore = undefined;\n }\n if (this.bufferAfter != null) {\n this.bufferAfter.remove();\n this.bufferAfter = undefined;\n }\n return;\n }\n // NOTE(amadeus): A very hacky pass at buffers outside the pre elements...\n // i may need to improve this...\n if (renderRange.bufferBefore > 0) {\n if (this.bufferBefore == null) {\n this.bufferBefore = document.createElement('div');\n this.bufferBefore.dataset.virtualizerBuffer = 'before';\n pre.before(this.bufferBefore);\n }\n this.bufferBefore.style.setProperty(\n 'height',\n `${renderRange.bufferBefore}px`\n );\n this.bufferBefore.style.setProperty('contain', 'strict');\n } else if (this.bufferBefore != null) {\n this.bufferBefore.remove();\n this.bufferBefore = undefined;\n }\n\n if (renderRange.bufferAfter > 0) {\n if (this.bufferAfter == null) {\n this.bufferAfter = document.createElement('div');\n this.bufferAfter.dataset.virtualizerBuffer = 'after';\n pre.after(this.bufferAfter);\n }\n this.bufferAfter.style.setProperty(\n 'height',\n `${renderRange.bufferAfter}px`\n );\n this.bufferAfter.style.setProperty('contain', 'strict');\n } else if (this.bufferAfter != null) {\n this.bufferAfter.remove();\n this.bufferAfter = undefined;\n }\n }\n\n protected shouldDisableVirtualizationBuffers(): boolean {\n return this.options.disableVirtualizationBuffers ?? false;\n }\n\n protected applyPreNodeAttributes(\n pre: HTMLPreElement,\n { additionsContentAST, deletionsContentAST, totalLines }: HunksRenderResult,\n customProperties?: CustomPreProperties\n ): void {\n const {\n diffIndicators = 'bars',\n disableBackground = false,\n disableLineNumbers = false,\n overflow = 'scroll',\n diffStyle = 'split',\n } = this.options;\n const preProperties: PrePropertiesConfig = {\n type: 'diff',\n diffIndicators,\n disableBackground,\n disableLineNumbers,\n overflow,\n split:\n diffStyle === 'unified'\n ? false\n : additionsContentAST != null && deletionsContentAST != null,\n totalLines,\n customProperties,\n };\n if (arePrePropertiesEqual(preProperties, this.appliedPreAttributes)) {\n return;\n }\n setPreNodeProperties(pre, preProperties);\n this.appliedPreAttributes = preProperties;\n }\n\n private applyErrorToDOM(error: Error, container: HTMLElement) {\n this.cleanupErrorWrapper();\n this.pre?.remove();\n this.pre = undefined;\n this.appliedPreAttributes = undefined;\n const shadowRoot =\n container.shadowRoot ?? container.attachShadow({ mode: 'open' });\n this.errorWrapper ??= document.createElement('div');\n this.errorWrapper.dataset.errorWrapper = '';\n this.errorWrapper.textContent = '';\n shadowRoot.appendChild(this.errorWrapper);\n const errorMessage = document.createElement('div');\n errorMessage.dataset.errorMessage = '';\n errorMessage.innerText = error.message;\n this.errorWrapper.appendChild(errorMessage);\n const errorStack = document.createElement('pre');\n errorStack.dataset.errorStack = '';\n errorStack.innerText = error.stack ?? 'No Error Stack';\n this.errorWrapper.appendChild(errorStack);\n }\n\n private cleanupErrorWrapper() {\n this.errorWrapper?.remove();\n this.errorWrapper = undefined;\n }\n}\n\ninterface HasContentProps {\n fileDiff: FileDiffMetadata | undefined;\n oldFile: FileContents | undefined;\n newFile: FileContents | undefined;\n}\n\nfunction hasDiffContent({\n fileDiff,\n oldFile,\n newFile,\n}: HasContentProps): boolean {\n return (\n (fileDiff != null && fileDiff.hunks.length > 0) ||\n oldFile != null ||\n newFile != null\n );\n}\n\nfunction hasDiffHeaderContent({\n fileDiff,\n oldFile,\n newFile,\n}: HasContentProps): boolean {\n return fileDiff != null || oldFile != null || newFile != null;\n}\n\nfunction shouldRenderCode(\n pre: HTMLPreElement | undefined,\n hasContent: boolean,\n collapsed = false\n): boolean {\n return !collapsed && pre == null && hasContent;\n}\n\nfunction shouldRenderHeader(\n headerElement: HTMLElement | undefined,\n hasContent: boolean,\n disableFileHeader = false\n): boolean {\n return headerElement == null && hasContent && !disableFileHeader;\n}\n\nfunction getElementChildren(\n node: ElementContent | undefined\n): ElementContent[] | undefined {\n if (node == null || node.type !== 'element') {\n return undefined;\n }\n return node.children ?? [];\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FileContents, NumericScrollLineAnchor, RenderWindow, StickySpecs, VirtualFileMetrics } from "../types.js";
|
|
1
|
+
import { FileContents, NumericScrollLineAnchor, PendingCodeViewLayoutReset, RenderWindow, StickySpecs, ThemeTypes, VirtualFileMetrics } from "../types.js";
|
|
2
2
|
import { WorkerPoolManager } from "../worker/WorkerPoolManager.js";
|
|
3
3
|
import "../worker/index.js";
|
|
4
4
|
import { File, FileOptions, FileRenderProps } from "./File.js";
|
|
@@ -17,14 +17,16 @@ declare class VirtualizedFile<LAnnotation = undefined> extends File<LAnnotation>
|
|
|
17
17
|
private isSetup;
|
|
18
18
|
private layoutDirty;
|
|
19
19
|
private forceRenderOverride;
|
|
20
|
+
private currentCollapsed;
|
|
20
21
|
constructor(options: FileOptions<LAnnotation> | undefined, virtualizer: Virtualizer | CodeView<LAnnotation>, metrics?: VirtualFileMetrics, workerManager?: WorkerPoolManager, isContainerManaged?: boolean);
|
|
21
22
|
setMetrics(metrics: VirtualFileMetrics, force?: boolean): void;
|
|
22
23
|
getLineHeight(lineIndex: number, hasMetadataLine?: boolean): number;
|
|
23
24
|
setOptions(options: FileOptions<LAnnotation> | undefined): void;
|
|
25
|
+
setThemeType(themeType: ThemeTypes): void;
|
|
24
26
|
private resetLayoutCache;
|
|
25
27
|
reconcileHeights(): boolean;
|
|
26
28
|
onRender: (dirty: boolean) => boolean;
|
|
27
|
-
|
|
29
|
+
prepareCodeViewItem(file: FileContents, top: number, reset?: PendingCodeViewLayoutReset): number;
|
|
28
30
|
getLinePosition(lineNumber: number): {
|
|
29
31
|
top: number;
|
|
30
32
|
height: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualizedFile.d.ts","names":["FileContents","NumericScrollLineAnchor","RenderWindow","StickySpecs","VirtualFileMetrics","WorkerPoolManager","CodeView","File","FileOptions","FileRenderProps","Virtualizer","VirtualizedFile","LAnnotation","fileContainer","file","forceRender"],"sources":["../../src/components/VirtualizedFile.d.ts"],"sourcesContent":["import type { FileContents, NumericScrollLineAnchor, RenderWindow, StickySpecs, VirtualFileMetrics } from '../types';\nimport type { WorkerPoolManager } from '../worker';\nimport type { CodeView } from './CodeView';\nimport { File, type FileOptions, type FileRenderProps } from './File';\nimport type { Virtualizer } from './Virtualizer';\nexport declare class VirtualizedFile<LAnnotation = undefined> extends File<LAnnotation> {\n private virtualizer;\n private metrics;\n readonly __id: string;\n top: number | undefined;\n height: number;\n private cache;\n private isVisible;\n private isSetup;\n private layoutDirty;\n private forceRenderOverride;\n constructor(options: FileOptions<LAnnotation> | undefined, virtualizer: Virtualizer | CodeView<LAnnotation>, metrics?: VirtualFileMetrics, workerManager?: WorkerPoolManager, isContainerManaged?: boolean);\n setMetrics(metrics: VirtualFileMetrics, force?: boolean): void;\n getLineHeight(lineIndex: number, hasMetadataLine?: boolean): number;\n setOptions(options: FileOptions<LAnnotation> | undefined): void;\n private resetLayoutCache;\n reconcileHeights(): boolean;\n onRender: (dirty: boolean) => boolean;\n
|
|
1
|
+
{"version":3,"file":"VirtualizedFile.d.ts","names":["FileContents","NumericScrollLineAnchor","PendingCodeViewLayoutReset","RenderWindow","StickySpecs","ThemeTypes","VirtualFileMetrics","WorkerPoolManager","CodeView","File","FileOptions","FileRenderProps","Virtualizer","VirtualizedFile","LAnnotation","fileContainer","file","forceRender"],"sources":["../../src/components/VirtualizedFile.d.ts"],"sourcesContent":["import type { FileContents, NumericScrollLineAnchor, PendingCodeViewLayoutReset, RenderWindow, StickySpecs, ThemeTypes, VirtualFileMetrics } from '../types';\nimport type { WorkerPoolManager } from '../worker';\nimport type { CodeView } from './CodeView';\nimport { File, type FileOptions, type FileRenderProps } from './File';\nimport type { Virtualizer } from './Virtualizer';\nexport declare class VirtualizedFile<LAnnotation = undefined> extends File<LAnnotation> {\n private virtualizer;\n private metrics;\n readonly __id: string;\n top: number | undefined;\n height: number;\n private cache;\n private isVisible;\n private isSetup;\n private layoutDirty;\n private forceRenderOverride;\n private currentCollapsed;\n constructor(options: FileOptions<LAnnotation> | undefined, virtualizer: Virtualizer | CodeView<LAnnotation>, metrics?: VirtualFileMetrics, workerManager?: WorkerPoolManager, isContainerManaged?: boolean);\n setMetrics(metrics: VirtualFileMetrics, force?: boolean): void;\n getLineHeight(lineIndex: number, hasMetadataLine?: boolean): number;\n setOptions(options: FileOptions<LAnnotation> | undefined): void;\n setThemeType(themeType: ThemeTypes): void;\n private resetLayoutCache;\n reconcileHeights(): boolean;\n onRender: (dirty: boolean) => boolean;\n prepareCodeViewItem(file: FileContents, top: number, reset?: PendingCodeViewLayoutReset): number;\n getLinePosition(lineNumber: number): {\n top: number;\n height: number;\n } | undefined;\n getNumericScrollAnchor(localViewportTop: number): NumericScrollLineAnchor | undefined;\n getVirtualizedHeight(): number;\n getAdvancedStickySpecs(windowSpecs?: RenderWindow): StickySpecs | undefined;\n cleanUp(recycle?: boolean): void;\n private computeApproximateSize;\n setVisibility(visible: boolean): void;\n rerender(): void;\n render({ fileContainer, file, forceRender, ...props }: FileRenderProps<LAnnotation>): boolean;\n syncVirtualizedTop(): void;\n protected shouldDisableVirtualizationBuffers(): boolean;\n private isSimpleMode;\n private isAdvancedMode;\n private addLayoutCheckpoint;\n private getLayoutCheckpointBeforeLineIndex;\n private getLayoutCheckpointBeforeTop;\n private getVirtualizedTop;\n private getSimpleVirtualizer;\n private isResizeDebuggingEnabled;\n private computeRenderRangeFromWindow;\n}\n//# sourceMappingURL=VirtualizedFile.d.ts.map"],"mappings":";;;;;;;;cAKqBa,iDAAiDJ,KAAKK;;;EAAtDD,SAAAA,IAAAA,EAAAA,MAAe;EAAuCC,GAAAA,EAAAA,MAAAA,GAAAA,SAAAA;EAYtCA,MAAAA,EAAAA,MAAAA;EAAZJ,QAAAA,KAAAA;EAAmDE,QAAAA,SAAAA;EAAuBE,QAAAA,OAAAA;EAATN,QAAAA,WAAAA;EAAiCF,QAAAA,mBAAAA;EAAoCC,QAAAA,gBAAAA;EACvID,WAAAA,CAAAA,OAAAA,EADCI,WACDJ,CADaQ,WACbR,CAAAA,GAAAA,SAAAA,EAAAA,WAAAA,EADoDM,WACpDN,GADkEE,QAClEF,CAD2EQ,WAC3ER,CAAAA,EAAAA,OAAAA,CAAAA,EADmGA,kBACnGA,EAAAA,aAAAA,CAAAA,EADuIC,iBACvID,EAAAA,kBAAAA,CAAAA,EAAAA,OAAAA;EAEYQ,UAAAA,CAAAA,OAAAA,EAFZR,kBAEYQ,EAAAA,KAAAA,CAAAA,EAAAA,OAAAA,CAAAA,EAAAA,IAAAA;EAAZJ,aAAAA,CAAAA,SAAAA,EAAAA,MAAAA,EAAAA,eAAAA,CAAAA,EAAAA,OAAAA,CAAAA,EAAAA,MAAAA;EACIL,UAAAA,CAAAA,OAAAA,EADJK,WACIL,CADQS,WACRT,CAAAA,GAAAA,SAAAA,CAAAA,EAAAA,IAAAA;EAIEL,YAAAA,CAAAA,SAAAA,EAJFK,UAIEL,CAAAA,EAAAA,IAAAA;EAAmCE,QAAAA,gBAAAA;EAKXD,gBAAAA,CAAAA,CAAAA,EAAAA,OAAAA;EAEbE,QAAAA,EAAAA,CAAAA,KAAAA,EAAAA,OAAAA,EAAAA,GAAAA,OAAAA;EAAeC,mBAAAA,CAAAA,IAAAA,EAP1BJ,YAO0BI,EAAAA,GAAAA,EAAAA,MAAAA,EAAAA,KAAAA,CAAAA,EAPSF,0BAOTE,CAAAA,EAAAA,MAAAA;EAK3CW,eAAAA,CAAAA,UAAAA,EAAAA,MAAAA,CAAAA,EAAAA;IAAeC,GAAAA,EAAAA,MAAAA;IAAMC,MAAAA,EAAAA,MAAAA;EAAyCH,CAAAA,GAAAA,SAAAA;EAAhBH,sBAAAA,CAAAA,gBAAAA,EAAAA,MAAAA,CAAAA,EAPLV,uBAOKU,GAAAA,SAAAA;EAhCWF,oBAAAA,CAAAA,CAAAA,EAAAA,MAAAA;EAAI,sBAAA,CAAA,WAAA,CAAA,EA2BjCN,YA3BiC,CAAA,EA2BlBC,WA3BkB,GAAA,SAAA;;;;;;;;;;KAgCfO,gBAAgBG"}
|
|
@@ -23,6 +23,7 @@ var VirtualizedFile = class extends File {
|
|
|
23
23
|
isSetup = false;
|
|
24
24
|
layoutDirty = true;
|
|
25
25
|
forceRenderOverride;
|
|
26
|
+
currentCollapsed;
|
|
26
27
|
constructor(options, virtualizer, metrics = DEFAULT_VIRTUAL_FILE_METRICS, workerManager, isContainerManaged = false) {
|
|
27
28
|
super(options, workerManager, isContainerManaged);
|
|
28
29
|
this.virtualizer = virtualizer;
|
|
@@ -40,6 +41,7 @@ var VirtualizedFile = class extends File {
|
|
|
40
41
|
return this.metrics.lineHeight * multiplier;
|
|
41
42
|
}
|
|
42
43
|
setOptions(options) {
|
|
44
|
+
if (this.isAdvancedMode()) throw new Error("VirtualizedFile.setOptions cannot be used inside CodeView. Update CodeView options instead.");
|
|
43
45
|
if (options == null) return;
|
|
44
46
|
const { options: previousOptions } = this;
|
|
45
47
|
const optionsChanged = !areOptionsEqual(previousOptions, options);
|
|
@@ -47,13 +49,17 @@ var VirtualizedFile = class extends File {
|
|
|
47
49
|
super.setOptions(options);
|
|
48
50
|
if (layoutChanged) this.resetLayoutCache(true);
|
|
49
51
|
if (optionsChanged) this.forceRenderOverride = true;
|
|
50
|
-
if (optionsChanged
|
|
52
|
+
if (optionsChanged) this.virtualizer.instanceChanged(this, layoutChanged);
|
|
53
|
+
}
|
|
54
|
+
setThemeType(themeType) {
|
|
55
|
+
if (this.isAdvancedMode()) throw new Error("VirtualizedFile.setThemeType cannot be used inside CodeView. Update CodeView options instead.");
|
|
56
|
+
super.setThemeType(themeType);
|
|
51
57
|
}
|
|
52
58
|
resetLayoutCache(recompute = false) {
|
|
53
59
|
this.layoutDirty = true;
|
|
54
|
-
this.cache.heights.clear();
|
|
55
|
-
this.cache.checkpoints =
|
|
56
|
-
this.renderRange = void 0;
|
|
60
|
+
if (this.cache.heights.size > 0) this.cache.heights.clear();
|
|
61
|
+
if (this.cache.checkpoints.length > 0) this.cache.checkpoints.length = 0;
|
|
62
|
+
if (this.renderRange != null) this.renderRange = void 0;
|
|
57
63
|
if (recompute && this.isSimpleMode()) this.computeApproximateSize();
|
|
58
64
|
}
|
|
59
65
|
reconcileHeights() {
|
|
@@ -94,10 +100,21 @@ var VirtualizedFile = class extends File {
|
|
|
94
100
|
if (dirty) this.top = this.getVirtualizedTop();
|
|
95
101
|
return this.render({ file: this.file });
|
|
96
102
|
};
|
|
97
|
-
|
|
103
|
+
prepareCodeViewItem(file, top, reset) {
|
|
104
|
+
let shouldResetLayoutCache = reset?.resetFileLayoutCache === true;
|
|
105
|
+
if (reset?.metrics != null) {
|
|
106
|
+
this.metrics = reset.metrics;
|
|
107
|
+
shouldResetLayoutCache = true;
|
|
108
|
+
}
|
|
109
|
+
const { collapsed = false } = this.options;
|
|
110
|
+
if (this.currentCollapsed !== collapsed) {
|
|
111
|
+
this.currentCollapsed = collapsed;
|
|
112
|
+
shouldResetLayoutCache = true;
|
|
113
|
+
}
|
|
114
|
+
if (shouldResetLayoutCache) this.resetLayoutCache();
|
|
98
115
|
if (this.file !== file) this.layoutDirty = true;
|
|
99
116
|
this.file = file;
|
|
100
|
-
this.top =
|
|
117
|
+
this.top = top;
|
|
101
118
|
this.computeApproximateSize();
|
|
102
119
|
return this.height;
|
|
103
120
|
}
|