@pierre/diffs 1.2.0-beta.3 → 1.2.0-beta.4
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/dist/components/CodeView.d.ts +12 -5
- package/dist/components/CodeView.d.ts.map +1 -1
- package/dist/components/CodeView.js +105 -24
- package/dist/components/CodeView.js.map +1 -1
- package/dist/components/File.d.ts +3 -2
- package/dist/components/File.d.ts.map +1 -1
- package/dist/components/File.js +13 -4
- package/dist/components/File.js.map +1 -1
- package/dist/components/FileDiff.d.ts +3 -2
- package/dist/components/FileDiff.d.ts.map +1 -1
- package/dist/components/FileDiff.js +13 -4
- package/dist/components/FileDiff.js.map +1 -1
- package/dist/components/FileStream.js +6 -3
- package/dist/components/FileStream.js.map +1 -1
- package/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
- package/dist/components/web-components.js +4 -0
- package/dist/components/web-components.js.map +1 -1
- package/dist/constants.d.ts +6 -3
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +11 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +3 -3
- package/dist/managers/InteractionManager.d.ts +2 -8
- package/dist/managers/InteractionManager.d.ts.map +1 -1
- package/dist/managers/InteractionManager.js.map +1 -1
- package/dist/react/index.d.ts +2 -2
- package/dist/react/types.d.ts +2 -2
- package/dist/react/types.d.ts.map +1 -1
- package/dist/react/utils/useFileDiffInstance.d.ts +2 -2
- package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileDiffInstance.js.map +1 -1
- package/dist/react/utils/useFileInstance.d.ts +2 -2
- package/dist/react/utils/useFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileInstance.js.map +1 -1
- package/dist/react/utils/useUnresolvedFileInstance.d.ts +2 -2
- package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
- package/dist/ssr/index.d.ts +2 -2
- package/dist/style.js +1 -1
- package/dist/style.js.map +1 -1
- package/dist/types.d.ts +21 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/areSelectionsEqual.d.ts +1 -1
- package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
- package/dist/utils/areSelectionsEqual.js.map +1 -1
- package/dist/utils/cssWrappers.d.ts +3 -2
- package/dist/utils/cssWrappers.d.ts.map +1 -1
- package/dist/utils/cssWrappers.js +13 -2
- package/dist/utils/cssWrappers.js.map +1 -1
- package/dist/utils/getFiletypeFromFileName.js +16 -0
- package/dist/utils/getFiletypeFromFileName.js.map +1 -1
- package/dist/utils/parsePatchFiles.js +15 -0
- package/dist/utils/parsePatchFiles.js.map +1 -1
- package/dist/utils/scrollbarGutter.d.ts +6 -0
- package/dist/utils/scrollbarGutter.d.ts.map +1 -0
- package/dist/utils/scrollbarGutter.js +28 -0
- package/dist/utils/scrollbarGutter.js.map +1 -0
- package/dist/worker/WorkerPoolManager.js.map +1 -1
- package/dist/worker/worker-portable.js +26 -1
- package/dist/worker/worker-portable.js.map +1 -1
- package/dist/worker/worker.js +23 -0
- package/dist/worker/worker.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemVersion,
|
|
2
|
-
import {
|
|
1
|
+
import { CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemVersion, CodeViewLayout, CodeViewScrollTarget, HunkSeparators, SelectedLineRange, SmoothScrollSettings, VirtualFileMetrics, VirtualWindowSpecs } from "../types.js";
|
|
2
|
+
import { SelectionWriteOptions } from "../managers/InteractionManager.js";
|
|
3
3
|
import { WorkerPoolManager } from "../worker/WorkerPoolManager.js";
|
|
4
4
|
import "../worker/index.js";
|
|
5
5
|
import { FileOptions } from "./File.js";
|
|
@@ -89,7 +89,11 @@ interface CodeViewOptions<LAnnotation> extends CodeViewPassThroughOptions<LAnnot
|
|
|
89
89
|
stickyHeaders?: boolean;
|
|
90
90
|
controlledSelection?: boolean;
|
|
91
91
|
onSelectedLinesChange?(selection: CodeViewLineSelection | null): void;
|
|
92
|
-
|
|
92
|
+
layout?: CodeViewLayout;
|
|
93
|
+
/** Internal dev-only check to ensure your `itemMetrics` are correct. Its
|
|
94
|
+
* automatically disabled in a production build because it will hurt
|
|
95
|
+
* performance fairly significantly */
|
|
96
|
+
__devOnlyValidateItemHeights?: boolean;
|
|
93
97
|
}
|
|
94
98
|
declare class CodeView<LAnnotation = undefined> {
|
|
95
99
|
static __STOP: boolean;
|
|
@@ -127,14 +131,16 @@ declare class CodeView<LAnnotation = undefined> {
|
|
|
127
131
|
private workerManager;
|
|
128
132
|
private isContainerManaged;
|
|
129
133
|
constructor(options?: CodeViewOptions<LAnnotation>, workerManager?: WorkerPoolManager | undefined, isContainerManaged?: boolean);
|
|
130
|
-
private
|
|
134
|
+
private getLayout;
|
|
131
135
|
private getItemMetrics;
|
|
132
136
|
private getSmoothScrollSettings;
|
|
133
137
|
private shouldDisablePointerEvents;
|
|
138
|
+
private shouldValidateItemHeights;
|
|
139
|
+
private validateRenderedItemHeight;
|
|
134
140
|
private clearPointerEventsTimer;
|
|
135
141
|
private suspendPointerEvents;
|
|
136
142
|
private restorePointerEvents;
|
|
137
|
-
private
|
|
143
|
+
private syncLayout;
|
|
138
144
|
setup(root: HTMLElement): void;
|
|
139
145
|
reset(): void;
|
|
140
146
|
cleanUp(): void;
|
|
@@ -247,6 +253,7 @@ declare class CodeView<LAnnotation = undefined> {
|
|
|
247
253
|
*/
|
|
248
254
|
private resolveAlignedScrollPosition;
|
|
249
255
|
private getLineScrollPosition;
|
|
256
|
+
private getRangeScrollPosition;
|
|
250
257
|
/**
|
|
251
258
|
* Determine target scroll position for current frame.
|
|
252
259
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeView.d.ts","names":["SelectedLineRange","SelectionWriteOptions","CodeViewDiffItem","CodeViewFileItem","CodeViewItem","CodeViewItemVersion","CodeViewMetrics","CodeViewScrollTarget","HunkSeparators","SmoothScrollSettings","VirtualFileMetrics","VirtualWindowSpecs","WorkerPoolManager","FileOptions","FileDiffOptions","VirtualizedFile","VirtualizedFileDiff","VirtualizerConfig","AdvancedVirtualizedBaseItem","HTMLElement","CodeViewDiffItemContext","LAnnotation","CodeViewFileItemContext","CodeViewRenderedDiffItem","CodeViewRenderedFileItem","CodeViewRenderedItem","CodeViewLineSelection","CodeViewCoordinator","CodeViewScrollListener","CodeView","OverloadCallbackArgs","TCallback","TArgs","CallbackReturn","TReturn","OverloadFileCallbackArgs","TKey","NonNullable","OverloadDiffCallbackArgs","CodeViewOptionCallback","CODE_VIEW_DIFF_OPTION_KEYS","CodeViewDiffOptionKeys","CodeViewPassThroughOptions","Pick","CODE_VIEW_SHARED_CALLBACK_KEYS","CODE_VIEW_SELECTION_CALLBACK_KEYS","CodeViewSharedCallbackKeys","CodeViewSelectionCallbackKeys","CodeViewSharedCallbackOptions","CodeViewSelectionCallbackOptions","CodeViewOptions","Exclude"],"sources":["../../src/components/CodeView.d.ts"],"sourcesContent":["import type { SelectedLineRange, SelectionWriteOptions } from '../managers/InteractionManager';\nimport type { CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemVersion, CodeViewMetrics, CodeViewScrollTarget, HunkSeparators, SmoothScrollSettings, VirtualFileMetrics, VirtualWindowSpecs } from '../types';\nimport type { WorkerPoolManager } from '../worker';\nimport type { FileOptions } from './File';\nimport type { FileDiffOptions } from './FileDiff';\nimport { VirtualizedFile } from './VirtualizedFile';\nimport { VirtualizedFileDiff } from './VirtualizedFileDiff';\nimport type { VirtualizerConfig } from './Virtualizer';\ninterface AdvancedVirtualizedBaseItem {\n /** Current index of this record in the ordered items array. */\n index: number;\n /** Absolute top offset of this item inside the scroll content. */\n top: number;\n /** Total measured height reserved for this item. */\n height: number;\n /** Root <diffs-container> node currently mounted for this item, only exists\n * when rendered. */\n element: HTMLElement | undefined;\n /** Last controlled version observed for this record. */\n version: CodeViewItemVersion | undefined;\n}\ninterface CodeViewDiffItemContext<LAnnotation> extends AdvancedVirtualizedBaseItem {\n type: 'diff';\n /** Latest item snapshot for this record. Controlled updates can replace it. */\n item: CodeViewDiffItem<LAnnotation>;\n /** Virtualized diff instance responsible for rendering this item. */\n instance: VirtualizedFileDiff<LAnnotation>;\n}\ninterface CodeViewFileItemContext<LAnnotation> extends AdvancedVirtualizedBaseItem {\n type: 'file';\n /** Latest item snapshot for this record. Controlled updates can replace it. */\n item: CodeViewFileItem<LAnnotation>;\n /** Virtualized file instance responsible for rendering this item. */\n instance: VirtualizedFile<LAnnotation>;\n}\nexport interface CodeViewRenderedDiffItem<LAnnotation> {\n id: string;\n type: 'diff';\n item: CodeViewDiffItem<LAnnotation>;\n version: CodeViewItemVersion | undefined;\n element: HTMLElement;\n instance: VirtualizedFileDiff<LAnnotation>;\n}\nexport interface CodeViewRenderedFileItem<LAnnotation> {\n id: string;\n type: 'file';\n item: CodeViewFileItem<LAnnotation>;\n version: CodeViewItemVersion | undefined;\n element: HTMLElement;\n instance: VirtualizedFile<LAnnotation>;\n}\nexport type CodeViewRenderedItem<LAnnotation> = CodeViewRenderedDiffItem<LAnnotation> | CodeViewRenderedFileItem<LAnnotation>;\nexport interface CodeViewLineSelection {\n id: string;\n range: SelectedLineRange;\n}\nexport interface CodeViewCoordinator<LAnnotation> {\n hasHeaderRenderers: boolean;\n hasAnnotationRenderer: boolean;\n hasGutterRenderer: boolean;\n onSnapshotChange(snapshot: CodeViewRenderedItem<LAnnotation>[] | undefined): void;\n}\nexport type CodeViewScrollListener<LAnnotation> = (scrollTop: number, viewer: CodeView<LAnnotation>) => void;\ntype OverloadCallbackArgs<TCallback> = TCallback extends (...args: infer TArgs) => unknown ? TArgs : never;\ntype CallbackReturn<TCallback> = TCallback extends (...args: never[]) => infer TReturn ? TReturn : never;\ntype OverloadFileCallbackArgs<LAnnotation, TKey extends keyof FileOptions<LAnnotation>> = OverloadCallbackArgs<NonNullable<FileOptions<LAnnotation>[TKey]>>;\ntype OverloadDiffCallbackArgs<LAnnotation, TKey extends keyof FileDiffOptions<LAnnotation>> = OverloadCallbackArgs<NonNullable<FileDiffOptions<LAnnotation>[TKey]>>;\ntype CodeViewOptionCallback<LAnnotation, TKey extends keyof FileOptions<LAnnotation> & keyof FileDiffOptions<LAnnotation>> = {\n (...args: [\n ...OverloadFileCallbackArgs<LAnnotation, TKey>,\n context: CodeViewFileItemContext<LAnnotation>\n ]): CallbackReturn<NonNullable<FileOptions<LAnnotation>[TKey]>>;\n (...args: [\n ...OverloadDiffCallbackArgs<LAnnotation, TKey>,\n context: CodeViewDiffItemContext<LAnnotation>\n ]): CallbackReturn<NonNullable<FileDiffOptions<LAnnotation>[TKey]>>;\n};\ndeclare const CODE_VIEW_DIFF_OPTION_KEYS: readonly [\"theme\", \"disableLineNumbers\", \"overflow\", \"themeType\", \"disableFileHeader\", \"disableVirtualizationBuffers\", \"preferredHighlighter\", \"useCSSClasses\", \"useTokenTransformer\", \"tokenizeMaxLineLength\", \"tokenizeMaxLength\", \"unsafeCSS\", \"diffStyle\", \"diffIndicators\", \"disableBackground\", \"expandUnchanged\", \"collapsedContextThreshold\", \"lineDiffType\", \"maxLineDiffLength\", \"expansionLineCount\", \"lineHoverHighlight\", \"enableTokenInteractionsOnWhitespace\", \"enableGutterUtility\", \"__debugPointerEvents\", \"enableLineSelection\", \"controlledSelection\", \"disableErrorHandling\"];\ntype CodeViewDiffOptionKeys = (typeof CODE_VIEW_DIFF_OPTION_KEYS)[number];\ntype CodeViewPassThroughOptions<LAnnotation> = Pick<FileDiffOptions<LAnnotation>, CodeViewDiffOptionKeys>;\ndeclare const CODE_VIEW_SHARED_CALLBACK_KEYS: readonly [\"renderCustomHeader\", \"renderHeaderPrefix\", \"renderHeaderMetadata\", \"renderAnnotation\", \"renderGutterUtility\", \"onPostRender\", \"onGutterUtilityClick\", \"onLineClick\", \"onLineNumberClick\", \"onLineEnter\", \"onLineLeave\", \"onTokenClick\", \"onTokenEnter\", \"onTokenLeave\"];\ndeclare const CODE_VIEW_SELECTION_CALLBACK_KEYS: readonly [\"onLineSelected\", \"onLineSelectionStart\", \"onLineSelectionChange\", \"onLineSelectionEnd\"];\ntype CodeViewSharedCallbackKeys = (typeof CODE_VIEW_SHARED_CALLBACK_KEYS)[number];\ntype CodeViewSelectionCallbackKeys = (typeof CODE_VIEW_SELECTION_CALLBACK_KEYS)[number];\ntype CodeViewSharedCallbackOptions<LAnnotation> = {\n [TKey in CodeViewSharedCallbackKeys]?: CodeViewOptionCallback<LAnnotation, TKey>;\n};\ntype CodeViewSelectionCallbackOptions<LAnnotation> = {\n [TKey in CodeViewSelectionCallbackKeys]?: CodeViewOptionCallback<LAnnotation, TKey>;\n};\nexport interface CodeViewOptions<LAnnotation> extends CodeViewPassThroughOptions<LAnnotation>, CodeViewSharedCallbackOptions<LAnnotation>, CodeViewSelectionCallbackOptions<LAnnotation> {\n hunkSeparators?: Exclude<HunkSeparators, 'custom'>;\n itemMetrics?: VirtualFileMetrics;\n pointerEventsOnScroll?: boolean;\n smoothScrollSettings?: SmoothScrollSettings;\n stickyHeaders?: boolean;\n controlledSelection?: boolean;\n onSelectedLinesChange?(selection: CodeViewLineSelection | null): void;\n viewerMetrics?: CodeViewMetrics;\n}\nexport declare class CodeView<LAnnotation = undefined> {\n static __STOP: boolean;\n static __lastScrollPosition: number;\n type: \"advanced\";\n readonly config: VirtualizerConfig;\n private items;\n private idToItem;\n private selectedLines;\n private instanceToItem;\n private layoutDirtyIndex;\n private slotCoordinator;\n private slotSnapshot;\n private scrollListeners;\n private scrollHeight;\n private containerHeight;\n private scrollTop;\n private scrollPageOffset;\n private scrollDirty;\n private pointerEventsRestoreTimer;\n private pointerEventsDisabled;\n private height;\n private heightDirty;\n private windowSpecs;\n private renderState;\n private pendingScrollTarget;\n private pendingLayoutAnchor;\n private scrollAnimation;\n private root;\n private resizeObserver;\n private container;\n private stickyContainer;\n private stickyOffset;\n private options;\n private workerManager;\n private isContainerManaged;\n constructor(options?: CodeViewOptions<LAnnotation>, workerManager?: WorkerPoolManager | undefined, isContainerManaged?: boolean);\n private getViewerMetrics;\n private getItemMetrics;\n private getSmoothScrollSettings;\n private shouldDisablePointerEvents;\n private clearPointerEventsTimer;\n private suspendPointerEvents;\n private restorePointerEvents;\n private syncViewerMetrics;\n setup(root: HTMLElement): void;\n reset(): void;\n cleanUp(): void;\n private cleanAllRenderedItems;\n private resolveEffectiveScrollBehavior;\n scrollTo(target: CodeViewScrollTarget): void;\n setSelectedLines(selection: CodeViewLineSelection | null, options?: SelectionWriteOptions): void;\n getSelectedLines(): CodeViewLineSelection | null;\n clearSelectedLines(options?: SelectionWriteOptions): void;\n getItem(itemId: string): CodeViewItem<LAnnotation> | undefined;\n updateItem(input: CodeViewItem<LAnnotation>): boolean;\n addItem(input: CodeViewItem<LAnnotation>): void;\n addItems(inputs: readonly CodeViewItem<LAnnotation>[]): void;\n setItems(items: readonly CodeViewItem<LAnnotation>[]): void;\n /**\n * Append new records to the viewer while preserving existing layout state.\n * This is the shared path for imperative adds and the append-only reconcile\n * fast path, so it measures new items immediately and only triggers render\n * once at the end.\n */\n private appendItemsInternal;\n private canSkipRenderForAppend;\n setOptions(options: CodeViewOptions<LAnnotation> | undefined): void;\n private capturePendingLayoutAnchor;\n render(immediate?: boolean): void;\n instanceChanged(instance: VirtualizedFile<LAnnotation> | VirtualizedFileDiff<LAnnotation>, layoutDirty: boolean): void;\n getWindowSpecs(): VirtualWindowSpecs;\n getContainerElement(): HTMLElement | undefined;\n getRenderedItems(): CodeViewRenderedItem<LAnnotation>[];\n setSlotCoordinator(coordinator?: CodeViewCoordinator<LAnnotation>): boolean;\n getSlotSnapshot(coordinator: CodeViewCoordinator<LAnnotation>): CodeViewRenderedItem<LAnnotation>[] | undefined;\n subscribeToScroll(listener: CodeViewScrollListener<LAnnotation>): () => void;\n getLocalTopForInstance(instance: VirtualizedFile<LAnnotation> | VirtualizedFileDiff<LAnnotation>): number;\n getTopForItem(id: string): number | undefined;\n private createItem;\n private getItemById;\n private getItemByMode;\n private applySelectedLines;\n private syncSelection;\n private wrapCallbackWithContext;\n private getWrappedOptionCallback;\n private getWrappedSelectionOptionCallback;\n private createOptions;\n /**\n * Track the earliest index whose measured layout may now be stale. Later\n * render passes relayout from this point forward so we do not have to rebuild\n * positions for the whole list after every change.\n */\n private markLayoutDirtyFromIndex;\n /**\n * Mark the earliest affected item as layout-dirty after an imperative change.\n * Each record carries its current array index so this stays O(1) even when\n * the viewer holds a very large number of items.\n */\n private markItemLayoutDirty;\n /**\n * Detect the common controlled-update case where the new list simply extends\n * the existing ordered prefix. When that happens we can reuse every current\n * record in place, sync any versioned payload changes, and append only the new\n * tail instead of rebuilding the whole list.\n */\n private tryAppendItems;\n /**\n * Reconcile a new controlled item list against the existing records by id.\n * This reuses records and instances when type matches, cleans up removed\n * records, rebuilds the lookup maps, and marks layout dirty whenever order,\n * membership, or versioned item data changes.\n */\n private reconcileItems;\n /**\n * Update a reused record from the latest controlled item only when its item\n * version changes. Matching versions mean CodeView keeps the current record\n * snapshot, which lets imperative updates remain in place until the caller\n * intentionally publishes a newer version.\n */\n private syncItemRecord;\n private getMaxScrollTopForHeight;\n private getMaxScrollTop;\n private shouldRebaseScroll;\n private getPagedScrollHeight;\n private getMaxPagedScrollTop;\n private clampPagedScrollTop;\n /**\n * Clamps a logical scroll position to the min/max allowable scroll range\n * based on the full computed content height.\n */\n private clampScrollTop;\n private getMaxScrollPageOffset;\n private clampScrollPageOffset;\n private resolveScrollPageWindow;\n /**\n * Resolve how a logical scrollTop maps onto the reusable paged scroll window\n * without mutating the current page offset.\n */\n private resolvePagedScrollPosition;\n private needsScrollPageUpdate;\n private getPagedLayoutTop;\n private getStickyHeaderOffset;\n private getScrollTargetRect;\n private normalizeScrollTarget;\n /**\n * Resolve a target's scroll position\n \n * Returns `undefined` when we can't resolve a target for whatever reason\n */\n private resolveScrollTargetTop;\n /**\n * Given an existing scroll target (scroll top and height), figure out the\n * correct scroll position to target based on the desired alignment, offset\n * and stickyOffset if necessary\n */\n private resolveAlignedScrollPosition;\n private getLineScrollPosition;\n /**\n * Determine target scroll position for current frame.\n *\n * If there's no pendingScrollTarget then we just return the current scroll\n * position\n *\n * If there's a pendingScrollTarget then we depend on whether there's a\n * smooth scroll animation or not. If not just return the destination, or\n * compute next position given the smooth scroll spring physics\n */\n private computeTargetScrollTopForFrame;\n /**\n * Closed-form critical-damped ODE step.\n *\n * Stable at any dt (Euler would blow up once ω·dt ≳ 1), so this survives\n * big RAF gaps (tab-wake, offscreen frames) and resize-driven ticks that\n * fire outside the normal RAF cadence.\n */\n private computeSpringStep;\n /**\n * For any given pendingScrollTarget, updates any in flight smooth scroll\n * animations and returns the target scrollTop to move towards\n *\n * Resolves the animation based on frame time and adopts any necessary scroll\n * anchoring corrections if necessary\n */\n private advanceScrollAnimation;\n private computeRenderRangeAndEmit;\n private flushManagers;\n private syncContainerHeight;\n private getStickyBounds;\n private applyStickyPositioning;\n private syncPagedScrollScaffolding;\n private reconcileRenderedItems;\n private updateStickyPositioning;\n private handleScroll;\n private clearPendingScroll;\n private handleResize;\n /**\n * Figure out scrollTop accounting for sticky header if enabled and\n * necessary\n */\n private getScrollAnchorViewportTop;\n /**\n * Attempt to find a scroll anchor based on build in metrics of the existing\n * rendered files/diff.\n *\n * A scroll anchor represents the first fully visible element (in other\n * words, the first file or first line who's top is fully in the viewport).\n */\n private getScrollAnchor;\n /**\n * Given a scroll anchor, attempt to resolve a newly updated (and clamped)\n * scroll position to keep the anchored element in place.\n *\n * If we can't resolve a position for whatever reason, we'll return\n * undefined.\n */\n private resolveAnchoredScrollTop;\n /**\n * Apply a device-pixel-rounded scroll position if it differs from the last\n * logical scrollTop synchronized into the paged scroll scaffold.\n */\n private applyScrollFix;\n /**\n * Decide whether a pending programmatic scroll has reached its\n * destination and should be cleared.\n */\n private isPendingTargetSettled;\n getScrollTop(): number;\n getHeight(): number;\n getScrollHeight(): number;\n private flushSlotCoordinator;\n private notifyScroll;\n /**\n * Find the first item whose bottom edge crosses into the viewport window.\n * This lets scroll-time rendering jump directly near the visible range instead\n * of linearly scanning from the start of very large item lists.\n */\n private findFirstVisibleIndex;\n /**\n * Find the last item whose top edge is still within the viewport window.\n * Paired with findFirstVisibleIndex, this bounds the render loop to only the\n * slice of items that can actually intersect the current scroll range.\n */\n private findLastVisibleIndex;\n /**\n * Recompute measured tops and heights starting from the earliest dirty item.\n * Earlier items keep their existing layout, while everything from startIndex\n * onward is remeasured so downstream positions and total scroll height stay\n * consistent after inserts, removals, or versioned item updates.\n */\n private recomputeLayout;\n private resetRenderState;\n private getFitPerfectlyOverscroll;\n}\nexport {};\n//# sourceMappingURL=CodeView.d.ts.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CodeView.d.ts","names":["SelectionWriteOptions","CodeViewDiffItem","CodeViewFileItem","CodeViewItem","CodeViewItemVersion","CodeViewLayout","CodeViewScrollTarget","HunkSeparators","SelectedLineRange","SmoothScrollSettings","VirtualFileMetrics","VirtualWindowSpecs","WorkerPoolManager","FileOptions","FileDiffOptions","VirtualizedFile","VirtualizedFileDiff","VirtualizerConfig","AdvancedVirtualizedBaseItem","HTMLElement","CodeViewDiffItemContext","LAnnotation","CodeViewFileItemContext","CodeViewRenderedDiffItem","CodeViewRenderedFileItem","CodeViewRenderedItem","CodeViewLineSelection","CodeViewCoordinator","CodeViewScrollListener","CodeView","OverloadCallbackArgs","TCallback","TArgs","CallbackReturn","TReturn","OverloadFileCallbackArgs","TKey","NonNullable","OverloadDiffCallbackArgs","CodeViewOptionCallback","CODE_VIEW_DIFF_OPTION_KEYS","CodeViewDiffOptionKeys","CodeViewPassThroughOptions","Pick","CODE_VIEW_SHARED_CALLBACK_KEYS","CODE_VIEW_SELECTION_CALLBACK_KEYS","CodeViewSharedCallbackKeys","CodeViewSelectionCallbackKeys","CodeViewSharedCallbackOptions","CodeViewSelectionCallbackOptions","CodeViewOptions","Exclude"],"sources":["../../src/components/CodeView.d.ts"],"sourcesContent":["import type { SelectionWriteOptions } from '../managers/InteractionManager';\nimport type { CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewItemVersion, CodeViewLayout, CodeViewScrollTarget, HunkSeparators, SelectedLineRange, SmoothScrollSettings, VirtualFileMetrics, VirtualWindowSpecs } from '../types';\nimport type { WorkerPoolManager } from '../worker';\nimport type { FileOptions } from './File';\nimport type { FileDiffOptions } from './FileDiff';\nimport { VirtualizedFile } from './VirtualizedFile';\nimport { VirtualizedFileDiff } from './VirtualizedFileDiff';\nimport type { VirtualizerConfig } from './Virtualizer';\ninterface AdvancedVirtualizedBaseItem {\n /** Current index of this record in the ordered items array. */\n index: number;\n /** Absolute top offset of this item inside the scroll content. */\n top: number;\n /** Total measured height reserved for this item. */\n height: number;\n /** Root <diffs-container> node currently mounted for this item, only exists\n * when rendered. */\n element: HTMLElement | undefined;\n /** Last controlled version observed for this record. */\n version: CodeViewItemVersion | undefined;\n}\ninterface CodeViewDiffItemContext<LAnnotation> extends AdvancedVirtualizedBaseItem {\n type: 'diff';\n /** Latest item snapshot for this record. Controlled updates can replace it. */\n item: CodeViewDiffItem<LAnnotation>;\n /** Virtualized diff instance responsible for rendering this item. */\n instance: VirtualizedFileDiff<LAnnotation>;\n}\ninterface CodeViewFileItemContext<LAnnotation> extends AdvancedVirtualizedBaseItem {\n type: 'file';\n /** Latest item snapshot for this record. Controlled updates can replace it. */\n item: CodeViewFileItem<LAnnotation>;\n /** Virtualized file instance responsible for rendering this item. */\n instance: VirtualizedFile<LAnnotation>;\n}\nexport interface CodeViewRenderedDiffItem<LAnnotation> {\n id: string;\n type: 'diff';\n item: CodeViewDiffItem<LAnnotation>;\n version: CodeViewItemVersion | undefined;\n element: HTMLElement;\n instance: VirtualizedFileDiff<LAnnotation>;\n}\nexport interface CodeViewRenderedFileItem<LAnnotation> {\n id: string;\n type: 'file';\n item: CodeViewFileItem<LAnnotation>;\n version: CodeViewItemVersion | undefined;\n element: HTMLElement;\n instance: VirtualizedFile<LAnnotation>;\n}\nexport type CodeViewRenderedItem<LAnnotation> = CodeViewRenderedDiffItem<LAnnotation> | CodeViewRenderedFileItem<LAnnotation>;\nexport interface CodeViewLineSelection {\n id: string;\n range: SelectedLineRange;\n}\nexport interface CodeViewCoordinator<LAnnotation> {\n hasHeaderRenderers: boolean;\n hasAnnotationRenderer: boolean;\n hasGutterRenderer: boolean;\n onSnapshotChange(snapshot: CodeViewRenderedItem<LAnnotation>[] | undefined): void;\n}\nexport type CodeViewScrollListener<LAnnotation> = (scrollTop: number, viewer: CodeView<LAnnotation>) => void;\ntype OverloadCallbackArgs<TCallback> = TCallback extends (...args: infer TArgs) => unknown ? TArgs : never;\ntype CallbackReturn<TCallback> = TCallback extends (...args: never[]) => infer TReturn ? TReturn : never;\ntype OverloadFileCallbackArgs<LAnnotation, TKey extends keyof FileOptions<LAnnotation>> = OverloadCallbackArgs<NonNullable<FileOptions<LAnnotation>[TKey]>>;\ntype OverloadDiffCallbackArgs<LAnnotation, TKey extends keyof FileDiffOptions<LAnnotation>> = OverloadCallbackArgs<NonNullable<FileDiffOptions<LAnnotation>[TKey]>>;\ntype CodeViewOptionCallback<LAnnotation, TKey extends keyof FileOptions<LAnnotation> & keyof FileDiffOptions<LAnnotation>> = {\n (...args: [\n ...OverloadFileCallbackArgs<LAnnotation, TKey>,\n context: CodeViewFileItemContext<LAnnotation>\n ]): CallbackReturn<NonNullable<FileOptions<LAnnotation>[TKey]>>;\n (...args: [\n ...OverloadDiffCallbackArgs<LAnnotation, TKey>,\n context: CodeViewDiffItemContext<LAnnotation>\n ]): CallbackReturn<NonNullable<FileDiffOptions<LAnnotation>[TKey]>>;\n};\ndeclare const CODE_VIEW_DIFF_OPTION_KEYS: readonly [\"theme\", \"disableLineNumbers\", \"overflow\", \"themeType\", \"disableFileHeader\", \"disableVirtualizationBuffers\", \"preferredHighlighter\", \"useCSSClasses\", \"useTokenTransformer\", \"tokenizeMaxLineLength\", \"tokenizeMaxLength\", \"unsafeCSS\", \"diffStyle\", \"diffIndicators\", \"disableBackground\", \"expandUnchanged\", \"collapsedContextThreshold\", \"lineDiffType\", \"maxLineDiffLength\", \"expansionLineCount\", \"lineHoverHighlight\", \"enableTokenInteractionsOnWhitespace\", \"enableGutterUtility\", \"__debugPointerEvents\", \"enableLineSelection\", \"controlledSelection\", \"disableErrorHandling\"];\ntype CodeViewDiffOptionKeys = (typeof CODE_VIEW_DIFF_OPTION_KEYS)[number];\ntype CodeViewPassThroughOptions<LAnnotation> = Pick<FileDiffOptions<LAnnotation>, CodeViewDiffOptionKeys>;\ndeclare const CODE_VIEW_SHARED_CALLBACK_KEYS: readonly [\"renderCustomHeader\", \"renderHeaderPrefix\", \"renderHeaderMetadata\", \"renderAnnotation\", \"renderGutterUtility\", \"onPostRender\", \"onGutterUtilityClick\", \"onLineClick\", \"onLineNumberClick\", \"onLineEnter\", \"onLineLeave\", \"onTokenClick\", \"onTokenEnter\", \"onTokenLeave\"];\ndeclare const CODE_VIEW_SELECTION_CALLBACK_KEYS: readonly [\"onLineSelected\", \"onLineSelectionStart\", \"onLineSelectionChange\", \"onLineSelectionEnd\"];\ntype CodeViewSharedCallbackKeys = (typeof CODE_VIEW_SHARED_CALLBACK_KEYS)[number];\ntype CodeViewSelectionCallbackKeys = (typeof CODE_VIEW_SELECTION_CALLBACK_KEYS)[number];\ntype CodeViewSharedCallbackOptions<LAnnotation> = {\n [TKey in CodeViewSharedCallbackKeys]?: CodeViewOptionCallback<LAnnotation, TKey>;\n};\ntype CodeViewSelectionCallbackOptions<LAnnotation> = {\n [TKey in CodeViewSelectionCallbackKeys]?: CodeViewOptionCallback<LAnnotation, TKey>;\n};\nexport interface CodeViewOptions<LAnnotation> extends CodeViewPassThroughOptions<LAnnotation>, CodeViewSharedCallbackOptions<LAnnotation>, CodeViewSelectionCallbackOptions<LAnnotation> {\n hunkSeparators?: Exclude<HunkSeparators, 'custom'>;\n itemMetrics?: VirtualFileMetrics;\n pointerEventsOnScroll?: boolean;\n smoothScrollSettings?: SmoothScrollSettings;\n stickyHeaders?: boolean;\n controlledSelection?: boolean;\n onSelectedLinesChange?(selection: CodeViewLineSelection | null): void;\n layout?: CodeViewLayout;\n /** Internal dev-only check to ensure your `itemMetrics` are correct. Its\n * automatically disabled in a production build because it will hurt\n * performance fairly significantly */\n __devOnlyValidateItemHeights?: boolean;\n}\nexport declare class CodeView<LAnnotation = undefined> {\n static __STOP: boolean;\n static __lastScrollPosition: number;\n type: \"advanced\";\n readonly config: VirtualizerConfig;\n private items;\n private idToItem;\n private selectedLines;\n private instanceToItem;\n private layoutDirtyIndex;\n private slotCoordinator;\n private slotSnapshot;\n private scrollListeners;\n private scrollHeight;\n private containerHeight;\n private scrollTop;\n private scrollPageOffset;\n private scrollDirty;\n private pointerEventsRestoreTimer;\n private pointerEventsDisabled;\n private height;\n private heightDirty;\n private windowSpecs;\n private renderState;\n private pendingScrollTarget;\n private pendingLayoutAnchor;\n private scrollAnimation;\n private root;\n private resizeObserver;\n private container;\n private stickyContainer;\n private stickyOffset;\n private options;\n private workerManager;\n private isContainerManaged;\n constructor(options?: CodeViewOptions<LAnnotation>, workerManager?: WorkerPoolManager | undefined, isContainerManaged?: boolean);\n private getLayout;\n private getItemMetrics;\n private getSmoothScrollSettings;\n private shouldDisablePointerEvents;\n private shouldValidateItemHeights;\n private validateRenderedItemHeight;\n private clearPointerEventsTimer;\n private suspendPointerEvents;\n private restorePointerEvents;\n private syncLayout;\n setup(root: HTMLElement): void;\n reset(): void;\n cleanUp(): void;\n private cleanAllRenderedItems;\n private resolveEffectiveScrollBehavior;\n scrollTo(target: CodeViewScrollTarget): void;\n setSelectedLines(selection: CodeViewLineSelection | null, options?: SelectionWriteOptions): void;\n getSelectedLines(): CodeViewLineSelection | null;\n clearSelectedLines(options?: SelectionWriteOptions): void;\n getItem(itemId: string): CodeViewItem<LAnnotation> | undefined;\n updateItem(input: CodeViewItem<LAnnotation>): boolean;\n addItem(input: CodeViewItem<LAnnotation>): void;\n addItems(inputs: readonly CodeViewItem<LAnnotation>[]): void;\n setItems(items: readonly CodeViewItem<LAnnotation>[]): void;\n /**\n * Append new records to the viewer while preserving existing layout state.\n * This is the shared path for imperative adds and the append-only reconcile\n * fast path, so it measures new items immediately and only triggers render\n * once at the end.\n */\n private appendItemsInternal;\n private canSkipRenderForAppend;\n setOptions(options: CodeViewOptions<LAnnotation> | undefined): void;\n private capturePendingLayoutAnchor;\n render(immediate?: boolean): void;\n instanceChanged(instance: VirtualizedFile<LAnnotation> | VirtualizedFileDiff<LAnnotation>, layoutDirty: boolean): void;\n getWindowSpecs(): VirtualWindowSpecs;\n getContainerElement(): HTMLElement | undefined;\n getRenderedItems(): CodeViewRenderedItem<LAnnotation>[];\n setSlotCoordinator(coordinator?: CodeViewCoordinator<LAnnotation>): boolean;\n getSlotSnapshot(coordinator: CodeViewCoordinator<LAnnotation>): CodeViewRenderedItem<LAnnotation>[] | undefined;\n subscribeToScroll(listener: CodeViewScrollListener<LAnnotation>): () => void;\n getLocalTopForInstance(instance: VirtualizedFile<LAnnotation> | VirtualizedFileDiff<LAnnotation>): number;\n getTopForItem(id: string): number | undefined;\n private createItem;\n private getItemById;\n private getItemByMode;\n private applySelectedLines;\n private syncSelection;\n private wrapCallbackWithContext;\n private getWrappedOptionCallback;\n private getWrappedSelectionOptionCallback;\n private createOptions;\n /**\n * Track the earliest index whose measured layout may now be stale. Later\n * render passes relayout from this point forward so we do not have to rebuild\n * positions for the whole list after every change.\n */\n private markLayoutDirtyFromIndex;\n /**\n * Mark the earliest affected item as layout-dirty after an imperative change.\n * Each record carries its current array index so this stays O(1) even when\n * the viewer holds a very large number of items.\n */\n private markItemLayoutDirty;\n /**\n * Detect the common controlled-update case where the new list simply extends\n * the existing ordered prefix. When that happens we can reuse every current\n * record in place, sync any versioned payload changes, and append only the new\n * tail instead of rebuilding the whole list.\n */\n private tryAppendItems;\n /**\n * Reconcile a new controlled item list against the existing records by id.\n * This reuses records and instances when type matches, cleans up removed\n * records, rebuilds the lookup maps, and marks layout dirty whenever order,\n * membership, or versioned item data changes.\n */\n private reconcileItems;\n /**\n * Update a reused record from the latest controlled item only when its item\n * version changes. Matching versions mean CodeView keeps the current record\n * snapshot, which lets imperative updates remain in place until the caller\n * intentionally publishes a newer version.\n */\n private syncItemRecord;\n private getMaxScrollTopForHeight;\n private getMaxScrollTop;\n private shouldRebaseScroll;\n private getPagedScrollHeight;\n private getMaxPagedScrollTop;\n private clampPagedScrollTop;\n /**\n * Clamps a logical scroll position to the min/max allowable scroll range\n * based on the full computed content height.\n */\n private clampScrollTop;\n private getMaxScrollPageOffset;\n private clampScrollPageOffset;\n private resolveScrollPageWindow;\n /**\n * Resolve how a logical scrollTop maps onto the reusable paged scroll window\n * without mutating the current page offset.\n */\n private resolvePagedScrollPosition;\n private needsScrollPageUpdate;\n private getPagedLayoutTop;\n private getStickyHeaderOffset;\n private getScrollTargetRect;\n private normalizeScrollTarget;\n /**\n * Resolve a target's scroll position\n \n * Returns `undefined` when we can't resolve a target for whatever reason\n */\n private resolveScrollTargetTop;\n /**\n * Given an existing scroll target (scroll top and height), figure out the\n * correct scroll position to target based on the desired alignment, offset\n * and stickyOffset if necessary\n */\n private resolveAlignedScrollPosition;\n private getLineScrollPosition;\n private getRangeScrollPosition;\n /**\n * Determine target scroll position for current frame.\n *\n * If there's no pendingScrollTarget then we just return the current scroll\n * position\n *\n * If there's a pendingScrollTarget then we depend on whether there's a\n * smooth scroll animation or not. If not just return the destination, or\n * compute next position given the smooth scroll spring physics\n */\n private computeTargetScrollTopForFrame;\n /**\n * Closed-form critical-damped ODE step.\n *\n * Stable at any dt (Euler would blow up once ω·dt ≳ 1), so this survives\n * big RAF gaps (tab-wake, offscreen frames) and resize-driven ticks that\n * fire outside the normal RAF cadence.\n */\n private computeSpringStep;\n /**\n * For any given pendingScrollTarget, updates any in flight smooth scroll\n * animations and returns the target scrollTop to move towards\n *\n * Resolves the animation based on frame time and adopts any necessary scroll\n * anchoring corrections if necessary\n */\n private advanceScrollAnimation;\n private computeRenderRangeAndEmit;\n private flushManagers;\n private syncContainerHeight;\n private getStickyBounds;\n private applyStickyPositioning;\n private syncPagedScrollScaffolding;\n private reconcileRenderedItems;\n private updateStickyPositioning;\n private handleScroll;\n private clearPendingScroll;\n private handleResize;\n /**\n * Figure out scrollTop accounting for sticky header if enabled and\n * necessary\n */\n private getScrollAnchorViewportTop;\n /**\n * Attempt to find a scroll anchor based on build in metrics of the existing\n * rendered files/diff.\n *\n * A scroll anchor represents the first fully visible element (in other\n * words, the first file or first line who's top is fully in the viewport).\n */\n private getScrollAnchor;\n /**\n * Given a scroll anchor, attempt to resolve a newly updated (and clamped)\n * scroll position to keep the anchored element in place.\n *\n * If we can't resolve a position for whatever reason, we'll return\n * undefined.\n */\n private resolveAnchoredScrollTop;\n /**\n * Apply a device-pixel-rounded scroll position if it differs from the last\n * logical scrollTop synchronized into the paged scroll scaffold.\n */\n private applyScrollFix;\n /**\n * Decide whether a pending programmatic scroll has reached its\n * destination and should be cleared.\n */\n private isPendingTargetSettled;\n getScrollTop(): number;\n getHeight(): number;\n getScrollHeight(): number;\n private flushSlotCoordinator;\n private notifyScroll;\n /**\n * Find the first item whose bottom edge crosses into the viewport window.\n * This lets scroll-time rendering jump directly near the visible range instead\n * of linearly scanning from the start of very large item lists.\n */\n private findFirstVisibleIndex;\n /**\n * Find the last item whose top edge is still within the viewport window.\n * Paired with findFirstVisibleIndex, this bounds the render loop to only the\n * slice of items that can actually intersect the current scroll range.\n */\n private findLastVisibleIndex;\n /**\n * Recompute measured tops and heights starting from the earliest dirty item.\n * Earlier items keep their existing layout, while everything from startIndex\n * onward is remeasured so downstream positions and total scroll height stay\n * consistent after inserts, removals, or versioned item updates.\n */\n private recomputeLayout;\n private resetRenderState;\n private getFitPerfectlyOverscroll;\n}\nexport {};\n//# sourceMappingURL=CodeView.d.ts.map"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DEFAULT_CODE_VIEW_FILE_METRICS,
|
|
1
|
+
import { DEFAULT_CODE_VIEW_FILE_METRICS, DEFAULT_CODE_VIEW_LAYOUT, DEFAULT_SMOOTH_SCROLL_SETTINGS, DEFAULT_THEMES, DIFFS_DEVELOPMENT_BUILD, DIFFS_TAG_NAME } from "../constants.js";
|
|
2
2
|
import { dequeueRender, queueRender } from "../managers/UniversalRenderingManager.js";
|
|
3
3
|
import { areObjectsEqual } from "../utils/areObjectsEqual.js";
|
|
4
4
|
import { areSelectionsEqual } from "../utils/areSelectionsEqual.js";
|
|
@@ -147,8 +147,8 @@ var CodeView = class CodeView {
|
|
|
147
147
|
this.stickyContainer.style.display = "flex";
|
|
148
148
|
this.stickyContainer.style.flexDirection = "column";
|
|
149
149
|
}
|
|
150
|
-
|
|
151
|
-
return this.options.
|
|
150
|
+
getLayout() {
|
|
151
|
+
return this.options.layout ?? DEFAULT_CODE_VIEW_LAYOUT;
|
|
152
152
|
}
|
|
153
153
|
getItemMetrics() {
|
|
154
154
|
return this.options.itemMetrics ?? DEFAULT_CODE_VIEW_FILE_METRICS;
|
|
@@ -159,6 +159,33 @@ var CodeView = class CodeView {
|
|
|
159
159
|
shouldDisablePointerEvents() {
|
|
160
160
|
return this.options.pointerEventsOnScroll !== true;
|
|
161
161
|
}
|
|
162
|
+
shouldValidateItemHeights() {
|
|
163
|
+
return DIFFS_DEVELOPMENT_BUILD && this.options.__devOnlyValidateItemHeights === true;
|
|
164
|
+
}
|
|
165
|
+
validateRenderedItemHeight(item) {
|
|
166
|
+
if (!this.shouldValidateItemHeights() || item.element == null) return;
|
|
167
|
+
const stickySpecs = item.instance.getAdvancedStickySpecs();
|
|
168
|
+
if (stickySpecs == null) return;
|
|
169
|
+
const expectedHeight = stickySpecs.height;
|
|
170
|
+
const actualHeight = item.element.getBoundingClientRect().height;
|
|
171
|
+
if (expectedHeight === actualHeight) return;
|
|
172
|
+
console.error("CodeView: reconciled item height does not match DOM height", {
|
|
173
|
+
id: item.item.id,
|
|
174
|
+
type: item.type,
|
|
175
|
+
index: item.index,
|
|
176
|
+
version: item.version,
|
|
177
|
+
expectedHeight,
|
|
178
|
+
actualHeight,
|
|
179
|
+
delta: actualHeight - expectedHeight,
|
|
180
|
+
stickyTopOffset: stickySpecs.topOffset,
|
|
181
|
+
virtualizedHeight: item.instance.getVirtualizedHeight(),
|
|
182
|
+
top: item.top,
|
|
183
|
+
scrollTop: this.getScrollTop(),
|
|
184
|
+
windowSpecs: { ...this.windowSpecs },
|
|
185
|
+
element: item.element,
|
|
186
|
+
instance: item.instance
|
|
187
|
+
});
|
|
188
|
+
}
|
|
162
189
|
clearPointerEventsTimer() {
|
|
163
190
|
if (this.pointerEventsRestoreTimer != null) {
|
|
164
191
|
clearTimeout(this.pointerEventsRestoreTimer);
|
|
@@ -180,8 +207,8 @@ var CodeView = class CodeView {
|
|
|
180
207
|
this.stickyContainer.style.removeProperty("pointer-events");
|
|
181
208
|
this.pointerEventsDisabled = false;
|
|
182
209
|
};
|
|
183
|
-
|
|
184
|
-
const { gap, paddingBottom, paddingTop } = this.
|
|
210
|
+
syncLayout() {
|
|
211
|
+
const { gap, paddingBottom, paddingTop } = this.getLayout();
|
|
185
212
|
this.stickyContainer.style.gap = `${gap}px`;
|
|
186
213
|
this.container?.style.setProperty("margin-top", `${paddingTop}px`);
|
|
187
214
|
this.container?.style.setProperty("margin-bottom", `${paddingBottom}px`);
|
|
@@ -192,7 +219,7 @@ var CodeView = class CodeView {
|
|
|
192
219
|
this.root.style.overflowAnchor = "none";
|
|
193
220
|
this.container ??= document.createElement("div");
|
|
194
221
|
this.container.style.contain = "layout style";
|
|
195
|
-
this.
|
|
222
|
+
this.syncLayout();
|
|
196
223
|
this.container.appendChild(this.stickyOffset);
|
|
197
224
|
this.container.appendChild(this.stickyContainer);
|
|
198
225
|
this.root.appendChild(this.container);
|
|
@@ -342,8 +369,8 @@ var CodeView = class CodeView {
|
|
|
342
369
|
*/
|
|
343
370
|
appendItemsInternal(inputs, render = true) {
|
|
344
371
|
if (inputs.length === 0) return;
|
|
345
|
-
const
|
|
346
|
-
let nextTop = this.items.length === 0 ? 0 : this.scrollHeight +
|
|
372
|
+
const layout = this.getLayout();
|
|
373
|
+
let nextTop = this.items.length === 0 ? 0 : this.scrollHeight + layout.gap;
|
|
347
374
|
const appendedTop = nextTop;
|
|
348
375
|
for (let index = 0; index < inputs.length; index++) {
|
|
349
376
|
const input = inputs[index];
|
|
@@ -354,9 +381,9 @@ var CodeView = class CodeView {
|
|
|
354
381
|
this.idToItem.set(item.item.id, item);
|
|
355
382
|
this.instanceToItem.set(item.instance, item);
|
|
356
383
|
item.height = prepareItemInstance(item);
|
|
357
|
-
nextTop += item.height +
|
|
384
|
+
nextTop += item.height + layout.gap;
|
|
358
385
|
}
|
|
359
|
-
this.scrollHeight = nextTop -
|
|
386
|
+
this.scrollHeight = nextTop - layout.gap;
|
|
360
387
|
this.scrollDirty = true;
|
|
361
388
|
if (render) if (this.canSkipRenderForAppend(appendedTop)) this.syncContainerHeight();
|
|
362
389
|
else this.render();
|
|
@@ -367,12 +394,12 @@ var CodeView = class CodeView {
|
|
|
367
394
|
setOptions(options) {
|
|
368
395
|
if (options == null) return;
|
|
369
396
|
this.capturePendingLayoutAnchor();
|
|
370
|
-
const
|
|
397
|
+
const previousLayout = this.getLayout();
|
|
371
398
|
const previousItemMetrics = this.getItemMetrics();
|
|
372
399
|
this.options = options;
|
|
373
400
|
const nextItemMetrics = this.getItemMetrics();
|
|
374
401
|
const itemMetricsChanged = !areObjectsEqual(previousItemMetrics, nextItemMetrics);
|
|
375
|
-
if (!areObjectsEqual(
|
|
402
|
+
if (!areObjectsEqual(previousLayout, this.getLayout())) this.syncLayout();
|
|
376
403
|
for (let index = 0; index < this.items.length; index++) {
|
|
377
404
|
const item = this.items[index];
|
|
378
405
|
if (item == null) throw new Error("CodeView.setOptions: invalid item index");
|
|
@@ -456,7 +483,7 @@ var CodeView = class CodeView {
|
|
|
456
483
|
getTopForItem(id) {
|
|
457
484
|
const item = this.idToItem.get(id);
|
|
458
485
|
if (item == null) return;
|
|
459
|
-
return item.top + this.
|
|
486
|
+
return item.top + this.getLayout().paddingTop;
|
|
460
487
|
}
|
|
461
488
|
createItem(input, index, top) {
|
|
462
489
|
const itemMetrics = this.getItemMetrics();
|
|
@@ -668,7 +695,7 @@ var CodeView = class CodeView {
|
|
|
668
695
|
return true;
|
|
669
696
|
}
|
|
670
697
|
getMaxScrollTopForHeight(scrollHeight) {
|
|
671
|
-
const { paddingBottom, paddingTop } = this.
|
|
698
|
+
const { paddingBottom, paddingTop } = this.getLayout();
|
|
672
699
|
return Math.max(paddingTop + scrollHeight + paddingBottom - this.getHeight(), 0);
|
|
673
700
|
}
|
|
674
701
|
getMaxScrollTop() {
|
|
@@ -755,6 +782,17 @@ var CodeView = class CodeView {
|
|
|
755
782
|
top: item.top,
|
|
756
783
|
height: item.height
|
|
757
784
|
};
|
|
785
|
+
if (target.type === "range") {
|
|
786
|
+
const rangePosition = this.getRangeScrollPosition(item, target);
|
|
787
|
+
if (rangePosition == null) {
|
|
788
|
+
console.warn(`CodeView.scrollTo: unable to resolve range ${formatSelectedLineRange(target.range)} for item "${target.id}"`);
|
|
789
|
+
return;
|
|
790
|
+
}
|
|
791
|
+
return {
|
|
792
|
+
top: item.top + rangePosition.top,
|
|
793
|
+
height: rangePosition.height
|
|
794
|
+
};
|
|
795
|
+
}
|
|
758
796
|
const linePosition = this.getLineScrollPosition(item, target);
|
|
759
797
|
if (linePosition == null) {
|
|
760
798
|
console.warn(`CodeView.scrollTo: unable to resolve line ${target.lineNumber} for item "${target.id}"`);
|
|
@@ -770,10 +808,10 @@ var CodeView = class CodeView {
|
|
|
770
808
|
const rect = this.getScrollTargetRect(target);
|
|
771
809
|
if (rect == null) return;
|
|
772
810
|
const offset = target.offset ?? 0;
|
|
773
|
-
const targetTop = this.
|
|
811
|
+
const targetTop = this.getLayout().paddingTop + rect.top;
|
|
774
812
|
const targetBottom = targetTop + rect.height;
|
|
775
813
|
const currentTop = this.getScrollTop();
|
|
776
|
-
const visibleTop = currentTop + (target.type === "line" ? this.getStickyHeaderOffset() : 0);
|
|
814
|
+
const visibleTop = currentTop + (target.type === "line" || target.type === "range" ? this.getStickyHeaderOffset() : 0);
|
|
777
815
|
const visibleBottom = currentTop + this.getHeight();
|
|
778
816
|
if (targetTop - offset <= visibleTop && targetBottom + offset >= visibleBottom) return;
|
|
779
817
|
if (targetTop - offset < visibleTop) return {
|
|
@@ -801,6 +839,14 @@ var CodeView = class CodeView {
|
|
|
801
839
|
return;
|
|
802
840
|
}
|
|
803
841
|
if (target.type === "item") return this.clampScrollTop(this.resolveAlignedScrollPosition(item.top, item.height, target.align, target.offset));
|
|
842
|
+
if (target.type === "range") {
|
|
843
|
+
const rangePosition = this.getRangeScrollPosition(item, target);
|
|
844
|
+
if (rangePosition == null) {
|
|
845
|
+
console.warn(`CodeView.scrollTo: unable to resolve range ${formatSelectedLineRange(target.range)} for item "${target.id}"`);
|
|
846
|
+
return;
|
|
847
|
+
}
|
|
848
|
+
return this.clampScrollTop(this.resolveAlignedScrollPosition(item.top + rangePosition.top, rangePosition.height, target.align, target.offset, this.getStickyHeaderOffset()));
|
|
849
|
+
}
|
|
804
850
|
const linePosition = this.getLineScrollPosition(item, target);
|
|
805
851
|
if (linePosition == null) {
|
|
806
852
|
console.warn(`CodeView.scrollTo: unable to resolve line ${target.lineNumber} for item "${target.id}"`);
|
|
@@ -814,7 +860,7 @@ var CodeView = class CodeView {
|
|
|
814
860
|
* and stickyOffset if necessary
|
|
815
861
|
*/
|
|
816
862
|
resolveAlignedScrollPosition(targetTop, targetHeight, align, offset = 0, stickyOffset = 0) {
|
|
817
|
-
targetTop += this.
|
|
863
|
+
targetTop += this.getLayout().paddingTop;
|
|
818
864
|
const viewportHeight = this.getHeight();
|
|
819
865
|
if (align === "center" && targetHeight + offset < viewportHeight) return targetTop - (viewportHeight - targetHeight) / 2 + offset;
|
|
820
866
|
if (align === "end") return targetTop - (viewportHeight - targetHeight) + offset;
|
|
@@ -824,6 +870,31 @@ var CodeView = class CodeView {
|
|
|
824
870
|
if (item.type === "diff") return item.instance.getLinePosition(target.lineNumber, target.side);
|
|
825
871
|
return item.instance.getLinePosition(target.lineNumber);
|
|
826
872
|
}
|
|
873
|
+
getRangeScrollPosition(item, target) {
|
|
874
|
+
const { range } = target;
|
|
875
|
+
const startPosition = this.getLineScrollPosition(item, {
|
|
876
|
+
type: "line",
|
|
877
|
+
id: target.id,
|
|
878
|
+
lineNumber: range.start,
|
|
879
|
+
side: range.side
|
|
880
|
+
});
|
|
881
|
+
const endPosition = this.getLineScrollPosition(item, {
|
|
882
|
+
type: "line",
|
|
883
|
+
id: target.id,
|
|
884
|
+
lineNumber: range.end,
|
|
885
|
+
side: range.endSide ?? range.side
|
|
886
|
+
});
|
|
887
|
+
if (startPosition == null || endPosition == null) return;
|
|
888
|
+
const startTop = startPosition.top;
|
|
889
|
+
const startBottom = startTop + startPosition.height;
|
|
890
|
+
const endTop = endPosition.top;
|
|
891
|
+
const endBottom = endTop + endPosition.height;
|
|
892
|
+
const top = Math.min(startTop, endTop);
|
|
893
|
+
return {
|
|
894
|
+
top,
|
|
895
|
+
height: Math.max(startBottom, endBottom) - top
|
|
896
|
+
};
|
|
897
|
+
}
|
|
827
898
|
/**
|
|
828
899
|
* Determine target scroll position for current frame.
|
|
829
900
|
*
|
|
@@ -1050,9 +1121,10 @@ var CodeView = class CodeView {
|
|
|
1050
1121
|
heightChanged = true;
|
|
1051
1122
|
item.height = item.instance.getVirtualizedHeight();
|
|
1052
1123
|
}
|
|
1124
|
+
this.validateRenderedItemHeight(item);
|
|
1053
1125
|
}
|
|
1054
1126
|
currentTop += item.instance.getVirtualizedHeight();
|
|
1055
|
-
if (index < this.items.length - 1) currentTop += this.
|
|
1127
|
+
if (index < this.items.length - 1) currentTop += this.getLayout().gap;
|
|
1056
1128
|
}
|
|
1057
1129
|
if (heightChanged && currentTop != null) {
|
|
1058
1130
|
this.scrollDirty = true;
|
|
@@ -1125,7 +1197,7 @@ var CodeView = class CodeView {
|
|
|
1125
1197
|
for (let index = firstIndex; index <= lastIndex; index++) {
|
|
1126
1198
|
const item = this.items[index];
|
|
1127
1199
|
if (item == null) continue;
|
|
1128
|
-
const absoluteItemTop = this.
|
|
1200
|
+
const absoluteItemTop = this.getLayout().paddingTop + item.top;
|
|
1129
1201
|
if (absoluteItemTop + item.height <= scrollTop) continue;
|
|
1130
1202
|
if (absoluteItemTop >= scrollTop + viewportHeight) break;
|
|
1131
1203
|
if (absoluteItemTop >= scrollTop) return {
|
|
@@ -1157,7 +1229,7 @@ var CodeView = class CodeView {
|
|
|
1157
1229
|
resolveAnchoredScrollTop(anchor) {
|
|
1158
1230
|
const item = this.idToItem.get(anchor.id);
|
|
1159
1231
|
if (item == null) return;
|
|
1160
|
-
const { paddingTop } = this.
|
|
1232
|
+
const { paddingTop } = this.getLayout();
|
|
1161
1233
|
if (anchor.type === "item") {
|
|
1162
1234
|
const absoluteItemTop = paddingTop + item.top;
|
|
1163
1235
|
return this.clampScrollTop(absoluteItemTop - anchor.viewportOffset);
|
|
@@ -1283,12 +1355,12 @@ var CodeView = class CodeView {
|
|
|
1283
1355
|
this.scrollHeight = 0;
|
|
1284
1356
|
return;
|
|
1285
1357
|
}
|
|
1286
|
-
const
|
|
1358
|
+
const layout = this.getLayout();
|
|
1287
1359
|
let runningTop = 0;
|
|
1288
1360
|
if (startIndex > 0) {
|
|
1289
1361
|
const previousItem = this.items[startIndex - 1];
|
|
1290
1362
|
if (previousItem == null) throw new Error("CodeView.recomputeLayout: invalid dirty index");
|
|
1291
|
-
runningTop = previousItem.top + previousItem.height +
|
|
1363
|
+
runningTop = previousItem.top + previousItem.height + layout.gap;
|
|
1292
1364
|
}
|
|
1293
1365
|
for (let index = startIndex; index < this.items.length; index++) {
|
|
1294
1366
|
const item = this.items[index];
|
|
@@ -1297,7 +1369,7 @@ var CodeView = class CodeView {
|
|
|
1297
1369
|
if (item.type === "diff") item.height = item.instance.prepareVirtualizedItem(item.item.fileDiff);
|
|
1298
1370
|
else item.height = item.instance.prepareVirtualizedItem(item.item.file);
|
|
1299
1371
|
runningTop += item.height;
|
|
1300
|
-
if (index < this.items.length - 1) runningTop +=
|
|
1372
|
+
if (index < this.items.length - 1) runningTop += layout.gap;
|
|
1301
1373
|
}
|
|
1302
1374
|
if (runningTop !== this.scrollHeight) this.scrollDirty = true;
|
|
1303
1375
|
this.scrollHeight = runningTop;
|
|
@@ -1311,7 +1383,7 @@ var CodeView = class CodeView {
|
|
|
1311
1383
|
this.renderState.stickyBottom = -1;
|
|
1312
1384
|
}
|
|
1313
1385
|
getFitPerfectlyOverscroll() {
|
|
1314
|
-
return this.
|
|
1386
|
+
return this.getLayout().gap + this.getItemMetrics().diffHeaderHeight;
|
|
1315
1387
|
}
|
|
1316
1388
|
};
|
|
1317
1389
|
function cleanRenderedItem(item) {
|
|
@@ -1324,6 +1396,15 @@ function prepareItemInstance(item) {
|
|
|
1324
1396
|
if (item.type === "diff") return item.instance.prepareVirtualizedItem(item.item.fileDiff);
|
|
1325
1397
|
else return item.instance.prepareVirtualizedItem(item.item.file);
|
|
1326
1398
|
}
|
|
1399
|
+
function formatSelectedLineRange(range) {
|
|
1400
|
+
const start = formatSelectedLinePoint(range.start, range.side);
|
|
1401
|
+
const end = formatSelectedLinePoint(range.end, range.endSide ?? range.side);
|
|
1402
|
+
return start === end ? start : `${start}-${end}`;
|
|
1403
|
+
}
|
|
1404
|
+
function formatSelectedLinePoint(lineNumber, side) {
|
|
1405
|
+
if (side == null) return `${lineNumber}`;
|
|
1406
|
+
return `${side === "deletions" ? "D" : "A"}${lineNumber}`;
|
|
1407
|
+
}
|
|
1327
1408
|
function renderItem(item, fileContainer) {
|
|
1328
1409
|
if (item.type === "diff") return item.instance.render({
|
|
1329
1410
|
deferManagers: true,
|