@pierre/diffs
Version:
523 lines (522 loc) • 25.7 kB
TypeScript
import { CodeViewDiffItem, CodeViewFileItem, CodeViewItem, CodeViewLayout, CodeViewScrollTarget, HunkSeparators, SelectedLineRange, SmoothScrollSettings, VirtualFileMetrics, VirtualWindowSpecs } from "../types.js";
import { EditCompletionDecision, EditorChangeEvent, EditorType, FileDiffEditCompleteEvent, FileEditCompleteEvent } from "../editor/types.js";
import { SelectionWriteOptions } from "../managers/InteractionManager.js";
import { WorkerPoolManager } from "../worker/WorkerPoolManager.js";
import { FileOptions } from "./File.js";
import { FileDiffOptions } from "./FileDiff.js";
import { Editor, EditorOptions } from "../editor/editor.js";
import { VirtualizerConfig } from "./Virtualizer.js";
import { VirtualizedFile } from "./VirtualizedFile.js";
import { VirtualizedFileDiff } from "./VirtualizedFileDiff.js";
//#region src/components/CodeView.d.ts
type CodeViewCreateEditorOptions<EType extends EditorType, LAnnotation, Caret> = Required<Pick<EditorOptions<EType, LAnnotation, Caret>, 'onChange'>>;
type CodeViewEditor<LAnnotation, Caret> = Editor<'file', LAnnotation, Caret> | Editor<'file-diff', LAnnotation, Caret>;
interface AdvancedVirtualizedBaseItem {
/** Current index of this record in the ordered items array. */
index: number;
/** Absolute top offset of this item inside the scroll content. */
top: number;
/** Total measured height reserved for this item. */
height: number;
/** Root <diffs-container> node currently mounted for this item, only exists
* when rendered. */
element: HTMLElement | undefined;
/** Last controlled version observed for this record. */
version: number | undefined;
/** Last CodeView option revision this item rendered with. */
renderedOptionsRevision: number;
}
interface CodeViewVirtualizedInstanceKey {
readonly __id: string;
readonly renderType: 'virtualized';
}
interface CodeViewDiffItemContext<LAnnotation, Caret> extends AdvancedVirtualizedBaseItem {
type: 'diff';
/** Latest item snapshot for this record. Controlled updates can replace it. */
item: CodeViewDiffItem<LAnnotation>;
/** Virtualized diff instance responsible for rendering this item. */
instance: VirtualizedFileDiff<LAnnotation, Caret>;
}
interface CodeViewFileItemContext<LAnnotation, Caret> extends AdvancedVirtualizedBaseItem {
type: 'file';
/** Latest item snapshot for this record. Controlled updates can replace it. */
item: CodeViewFileItem<LAnnotation>;
/** Virtualized file instance responsible for rendering this item. */
instance: VirtualizedFile<LAnnotation, Caret>;
}
type CodeViewContextItem<LAnnotation, Caret> = CodeViewDiffItemContext<LAnnotation, Caret> | CodeViewFileItemContext<LAnnotation, Caret>;
interface CodeViewRenderedDiffItem<LAnnotation, Caret> {
id: string;
type: 'diff';
item: CodeViewDiffItem<LAnnotation>;
version: number | undefined;
element: HTMLElement;
instance: VirtualizedFileDiff<LAnnotation, Caret>;
}
interface CodeViewRenderedFileItem<LAnnotation, Caret> {
id: string;
type: 'file';
item: CodeViewFileItem<LAnnotation>;
version: number | undefined;
element: HTMLElement;
instance: VirtualizedFile<LAnnotation, Caret>;
}
type CodeViewRenderedItem<LAnnotation, Caret> = CodeViewRenderedDiffItem<LAnnotation, Caret> | CodeViewRenderedFileItem<LAnnotation, Caret>;
interface CodeViewSlotSnapshot<LAnnotation, Caret> {
items: CodeViewRenderedItem<LAnnotation, Caret>[] | undefined;
header: HTMLElement | undefined;
footer: HTMLElement | undefined;
}
interface CodeViewLineSelection {
id: string;
range: SelectedLineRange;
}
interface CodeViewCoordinator<LAnnotation, Caret> {
hasHeaderRenderers: boolean;
hasAnnotationRenderer: boolean;
hasGutterRenderer: boolean;
onSnapshotChange(snapshot: CodeViewSlotSnapshot<LAnnotation, Caret> | undefined): void;
}
type CodeViewScrollListener<LAnnotation, Caret> = (scrollTop: number, viewer: CodeView<LAnnotation, Caret>) => void;
type OverloadCallbackArgs<TCallback> = TCallback extends ((...args: infer TArgs) => unknown) ? TArgs : never;
type CallbackReturn<TCallback> = TCallback extends ((...args: never[]) => infer TReturn) ? TReturn : never;
type OverloadFileCallbackArgs<LAnnotation, Caret, TKey extends keyof FileOptions<LAnnotation, Caret>> = OverloadCallbackArgs<NonNullable<FileOptions<LAnnotation, Caret>[TKey]>>;
type OverloadDiffCallbackArgs<LAnnotation, Caret, TKey extends keyof FileDiffOptions<LAnnotation, Caret>> = OverloadCallbackArgs<NonNullable<FileDiffOptions<LAnnotation, Caret>[TKey]>>;
type CodeViewOptionCallback<LAnnotation, Caret, TKey extends keyof FileOptions<LAnnotation, Caret> & keyof FileDiffOptions<LAnnotation, Caret>> = {
(...args: [...OverloadFileCallbackArgs<LAnnotation, Caret, TKey>, context: CodeViewFileItemContext<LAnnotation, Caret>]): CallbackReturn<NonNullable<FileOptions<LAnnotation, Caret>[TKey]>>;
(...args: [...OverloadDiffCallbackArgs<LAnnotation, Caret, TKey>, context: CodeViewDiffItemContext<LAnnotation, Caret>]): CallbackReturn<NonNullable<FileDiffOptions<LAnnotation, Caret>[TKey]>>;
};
declare const CODE_VIEW_DIFF_OPTION_KEYS: readonly ['theme', 'disableLineNumbers', 'overflow', 'themeType', 'disableFileHeader', 'disableVirtualizationBuffers', 'preferredHighlighter', 'useCSSClasses', 'useTokenTransformer', 'tokenizeMaxLineLength', 'tokenizeMaxLength', 'unsafeCSS', 'diffStyle', 'diffIndicators', 'disableBackground', 'expandUnchanged', 'loadDiffFiles', 'collapsedContextThreshold', 'lineDiffType', 'maxLineDiffLength', 'expansionLineCount', 'lineHoverHighlight', 'enableTokenInteractionsOnWhitespace', 'enableGutterUtility', '__debugPointerEvents', 'enableLineSelection', 'controlledSelection', 'disableErrorHandling'];
type CodeViewDiffOptionKeys = (typeof CODE_VIEW_DIFF_OPTION_KEYS)[number];
declare const CODE_VIEW_FILE_OPTION_KEYS: readonly ['theme', 'disableLineNumbers', 'overflow', 'themeType', 'disableFileHeader', 'disableVirtualizationBuffers', 'preferredHighlighter', 'useCSSClasses', 'useTokenTransformer', 'tokenizeMaxLineLength', 'tokenizeMaxLength', 'unsafeCSS', 'lineHoverHighlight', 'enableTokenInteractionsOnWhitespace', 'enableGutterUtility', '__debugPointerEvents', 'enableLineSelection', 'controlledSelection', 'disableErrorHandling'];
type CodeViewPassThroughOptions<LAnnotation, Caret> = Pick<FileDiffOptions<LAnnotation, Caret>, CodeViewDiffOptionKeys>;
type CodeViewMode = 'file' | 'diff';
interface CodeViewItemEditCompleteEventMap<LAnnotation, Caret> {
file: FileEditCompleteEvent<LAnnotation, Caret>;
diff: FileDiffEditCompleteEvent<LAnnotation, Caret>;
}
interface CodeViewModeItemMap<LAnnotation> {
file: CodeViewFileItem<LAnnotation>;
diff: CodeViewDiffItem<LAnnotation>;
}
type CodeViewItemEditCompleteHandler<LAnnotation, Caret> = <TMode extends CodeViewMode>(event: CodeViewItemEditCompleteEventMap<LAnnotation, Caret>[TMode], item: CodeViewModeItemMap<LAnnotation>[TMode], nextItem: CodeViewModeItemMap<LAnnotation>[TMode]) => EditCompletionDecision;
declare const CODE_VIEW_SHARED_CALLBACK_KEYS: readonly ['renderCustomHeader', 'renderHeaderPrefix', 'renderHeaderFilenameSuffix', 'renderHeaderMetadata', 'renderAnnotation', 'renderGutterUtility', 'onPostRender', 'onGutterUtilityClick', 'onLineClick', 'onLineNumberClick', 'onLineEnter', 'onLineLeave', 'onTokenClick', 'onTokenEnter', 'onTokenLeave'];
declare const CODE_VIEW_SELECTION_CALLBACK_KEYS: readonly ['onLineSelected', 'onLineSelectionStart', 'onLineSelectionChange', 'onLineSelectionEnd'];
type CodeViewSharedCallbackKeys = (typeof CODE_VIEW_SHARED_CALLBACK_KEYS)[number];
type CodeViewSelectionCallbackKeys = (typeof CODE_VIEW_SELECTION_CALLBACK_KEYS)[number];
type CodeViewSharedCallbackOptions<LAnnotation, Caret> = { [TKey in CodeViewSharedCallbackKeys]?: CodeViewOptionCallback<LAnnotation, Caret, TKey> };
type CodeViewSelectionCallbackOptions<LAnnotation, Caret> = { [TKey in CodeViewSelectionCallbackKeys]?: CodeViewOptionCallback<LAnnotation, Caret, TKey> };
interface CodeViewOptions<LAnnotation, Caret> extends CodeViewPassThroughOptions<LAnnotation, Caret>, CodeViewSharedCallbackOptions<LAnnotation, Caret>, CodeViewSelectionCallbackOptions<LAnnotation, Caret> {
hunkSeparators?: Exclude<HunkSeparators, 'custom'>;
itemMetrics?: Partial<VirtualFileMetrics>;
pointerEventsOnScroll?: boolean;
smoothScrollSettings?: SmoothScrollSettings;
stickyHeaders?: boolean;
controlledSelection?: boolean;
onSelectedLinesChange?(selection: CodeViewLineSelection | null): void;
layout?: CodeViewLayout;
/**
* Return an in-memory retention key for an item's editable draft and
* undo/redo history. Called only when CodeView creates the item's editor.
*/
getEditStateKey?(item: CodeViewItem<LAnnotation>): string | undefined;
/**
* Create an editor for an item entering edit mode (`edit: true`). Providing
* this option is what enables item editing. Pass the given options into the
* editor constructor — `new Editor(editorType, options, editStateKey)` —
* so CodeView can route document changes to `onItemEditChange` and retain
* history when requested. CodeView owns the returned editor's lifecycle: it
* associates with the edited item, suspends and resumes rendering across
* virtualization unmounts and collapse, and tears the editor down when the
* session ends (edit off or removal).
*/
createEditor?<EType extends EditorType>(editorType: EType, options: CodeViewCreateEditorOptions<EType, LAnnotation, Caret>, editStateKey?: string): Editor<EType, LAnnotation, Caret>;
/**
* Called with the editor's `EditorChangeEvent` and the owning item whenever
* the edited document changes, from internal (edit) changes or external
* (CodeViewItem) changes. The event contains that same attached editor.
*
* Do not feed these changes back into item state.
*/
onItemEditChange?(event: EditorChangeEvent<EditorType, LAnnotation, Caret>, item: CodeViewItem<LAnnotation>): void;
/**
* Called once when an edit session ends: edit to false, the item is removed
* from items, or the viewer tears down (`reset()`/`cleanUp()`, where the
* result is not installed because the viewer is going away). Collapse does
* not call it because the session remains active until the item expands.
*
* The event carries the completed `file`/`fileDiff` built from the edit
* session. `item` is the item that owned the session, and `nextItem` is
* the accepted replacement CodeView built from it: the event's completed
* value and annotations, `edit: false`, and a bumped `version`. Return
* `'accept'` to install the edit — CodeView applies `nextItem` through the
* item update path when the item still exists, and a controlled owner puts
* the same `nextItem` into its state — or `'reject'` to revert. The event is
* frozen; re-key the accepted value in place (`event.fileDiff.cacheKey =
* '…'`) before accepting. The event contains the detached editor with its
* final pre-detach state.
*/
onItemEditComplete?: CodeViewItemEditCompleteHandler<LAnnotation, Caret>;
/** Render a non-virtualized element at the very start of the scroll content,
* before the first item. It is always rendered and scrolls with the content.
* Return the same element across calls and mutate it in place to update;
* height changes are measured automatically. */
renderCodeViewHeader?(): HTMLElement | undefined;
/** Render a non-virtualized element at the very end of the scroll content,
* after the last item. Always rendered; height changes are measured
* automatically. */
renderCodeViewFooter?(): HTMLElement | undefined;
/** Internal dev-only check to ensure your `itemMetrics` are correct. Its
* automatically disabled in a production build because it will hurt
* performance fairly significantly */
__devOnlyValidateItemHeights?: boolean;
}
type CodeViewItemMap<LAnnotation, Caret> = Map<string, CodeViewContextItem<LAnnotation, Caret>>;
declare class CodeView<LAnnotation = undefined, Caret = undefined> {
static __STOP: boolean;
static __lastScrollPosition: number;
type: 'advanced';
readonly config: VirtualizerConfig;
private items;
private idToItem;
private selectedLines;
private itemEditors;
private attachedEditors;
private instanceToItem;
private layoutDirtyIndex;
private pendingLayoutReset;
private renderOptionsRevision;
private slotCoordinator;
private slotSnapshot;
private scrollListeners;
private scrollHeight;
private containerHeight;
private scrollTop;
private scrollPageOffset;
private scrollDirty;
private scrollInteractionFixTimer;
private pointerEventsDisabled;
private codeOverflowFix;
private height;
private heightDirty;
private windowSpecs;
private renderState;
private itemMetricsCache;
private readonly fileOptionsPrototype;
private readonly diffOptionsPrototype;
private pendingScrollTarget;
private pendingLayoutAnchor;
private shouldFixContainerFocus;
private scrollAnimation;
private root;
private resizeObserver;
private container;
private stickyContainer;
private stickyOffset;
private header;
private footer;
private elementPool;
private elementPoolVersion;
private elementPoolTracker;
private pendingElementPool;
private options;
private workerManager;
private isReadySubscription;
private pendingHighlighterTheme;
private isContainerManaged;
constructor(options?: CodeViewOptions<LAnnotation, Caret>, workerManager?: WorkerPoolManager | undefined, isContainerManaged?: boolean);
private getLayout;
private getItemTopOffset;
private computeMetricsCache;
private getSmoothScrollSettings;
private shouldDisablePointerEvents;
private shouldValidateItemHeights;
private validateRenderedItemHeight;
private validateStickyContainerHeight;
private clearScrollInteractionTimer;
private suspendScrollInteractions;
private restoreScrollInteractions;
private syncLayout;
private reconcileHeaderFooterHosts;
private reconcileHost;
private setHostHeight;
private measureMountedHosts;
setup(root: HTMLElement): void;
reset(): void;
cleanUp(): void;
private cleanAllRenderedItems;
private primeScrollTarget;
private getElementPoolLimit;
private acquireElement;
private releaseRenderedItem;
private renderedItemOwnsFocus;
private fixContainerFocus;
private cleanElement;
private queueElementForPool;
private promotePendingPooledElements;
private isElementClean;
private getElementPoolSize;
private clearElementPool;
private invalidateElementPool;
private markElementPoolGenerationCurrent;
private isElementPoolGenerationCurrent;
private resolveEffectiveScrollBehavior;
scrollTo(target: CodeViewScrollTarget): void;
setSelectedLines(selection: CodeViewLineSelection | null, options?: SelectionWriteOptions): void;
getSelectedLines(): CodeViewLineSelection | null;
clearSelectedLines(options?: SelectionWriteOptions): void;
getItem(itemId: string): CodeViewItem<LAnnotation> | undefined;
/**
* Get the live editor for an item currently in edit mode. Use this to drive
* editor APIs CodeView does not wrap (applyEdits, undo, setMarkers, …).
* Returns undefined once the item's session ends (edit off or removal); a
* collapsed item keeps its suspended editor.
*/
getEditor(itemId: string): CodeViewEditor<LAnnotation, Caret> | undefined;
updateItem(input: CodeViewItem<LAnnotation>): boolean;
updateItemId(oldId: string, newId: string): boolean;
addItem(input: CodeViewItem<LAnnotation>): void;
addItems(inputs: readonly CodeViewItem<LAnnotation>[]): void;
removeItem(itemId: string): boolean;
setItems(items: readonly CodeViewItem<LAnnotation>[]): void;
/**
* Append new records to the viewer while preserving existing layout state.
* This is the shared path for imperative adds and the append-only reconcile
* fast path, so it measures new items immediately and only triggers render
* once at the end.
*/
private appendItemsInternal;
private canSkipRenderForAppend;
onThemeChange(): void;
setOptions(options: CodeViewOptions<LAnnotation, Caret> | undefined): void;
capturePendingLayoutAnchor(nextItems?: Readonly<CodeViewItemMap<LAnnotation, Caret>>): void;
render(immediate?: boolean): void;
private isReady;
private clearReadySubscription;
private isSharedHighlighterReady;
instanceChanged(instance: CodeViewVirtualizedInstanceKey, layoutDirty: boolean): void;
getWindowSpecs(): VirtualWindowSpecs;
getContainerElement(): HTMLElement | undefined;
getHeaderElement(): HTMLElement | undefined;
getFooterElement(): HTMLElement | undefined;
getRenderedItems(): CodeViewRenderedItem<LAnnotation, Caret>[];
setSlotCoordinator(coordinator?: CodeViewCoordinator<LAnnotation, Caret>): boolean;
getSlotSnapshot(coordinator: CodeViewCoordinator<LAnnotation, Caret>): CodeViewSlotSnapshot<LAnnotation, Caret> | undefined;
private buildSlotSnapshot;
subscribeToScroll(listener: CodeViewScrollListener<LAnnotation, Caret>): () => void;
getLocalTopForInstance(instance: CodeViewVirtualizedInstanceKey): number;
getTopForItem(id: string): number | undefined;
private createItem;
private applySelectedLines;
private syncSelection;
private isItemInEditMode;
/**
* Lazily create and attach the editor for a mounted edit-mode item. Called
* from the render loop so every mounted item passes through it: fresh
* mounts, remounts after virtualization released the item, and items whose
* edit flag was just turned on. Editors persist across unmounts, so a
* remounted item resumes its existing editor and retained document; the
* instance retains its private session model so the remount
* paints the edited text without changing the host input.
*/
private attachItemEditor;
/**
* Reconcile the editors CodeView is holding: complete sessions for items
* whose edit turned off or that were removed, and suspend sessions for
* collapsed items (the editor tears down, the record and the instance's
* session stay for the next expand). Attachment happens in the render loop
* via attachItemEditor.
*/
private syncItemEditors;
private requireItemFromState;
/**
* Item-instance `onEditComplete` adapter for file items: builds the
* accepted next item, hands it to `onItemEditComplete` alongside the event
* and the owning item, and translates the identity of the returned item to
* the component return contract.
*/
private completeFileItemEdit;
/**
* Item-instance `onEditComplete` adapter for diff items; see
* completeFileItemEdit.
*/
private completeDiffItemEdit;
private renamePendingScrollTarget;
private renamePendingLayoutAnchor;
private createFileOptionsPrototype;
private createDiffOptionsPrototype;
private createFileOptions;
private createDiffOptions;
private updateItemOptionsId;
private getItemOptions;
private defineItemSharedCallback;
private defineItemSelectionCallback;
/**
* Track the earliest index whose measured layout may now be stale. Later
* render passes relayout from this point forward so we do not have to rebuild
* positions for the whole list after every change.
*/
private markLayoutDirtyFromIndex;
/**
* Mark the earliest affected item as layout-dirty after an imperative change.
* Each record carries its current array index so this stays O(1) even when
* the viewer holds a very large number of items.
*/
private markItemLayoutDirty;
/**
* Detect the common controlled-update case where the new list simply extends
* the existing ordered prefix. When that happens we can reuse every current
* record in place, sync any versioned payload changes, and append only the new
* tail instead of rebuilding the whole list.
*/
private tryAppendItems;
/**
* Reconcile a new controlled item list against the existing records by id.
* This reuses records and instances when type matches, cleans up removed
* records, rebuilds the lookup maps, and marks layout dirty whenever order,
* membership, or versioned item data changes.
*/
private reconcileItems;
/**
* Update a reused record from the latest controlled item only when its item
* version changes. Matching versions mean CodeView keeps the current record
* snapshot, which lets imperative updates remain in place until the caller
* intentionally publishes a newer version.
*/
private syncItemRecord;
private getMaxScrollTopForHeight;
private getMaxScrollTop;
private shouldRebaseScroll;
private getPagedScrollHeight;
private getMaxPagedScrollTop;
private clampPagedScrollTop;
/**
* Clamps a logical scroll position to the min/max allowable scroll range
* based on the full computed content height.
*/
private clampScrollTop;
private getMaxScrollPageOffset;
private clampScrollPageOffset;
private resolveScrollPageWindow;
/**
* Resolve how a logical scrollTop maps onto the reusable paged scroll window
* without mutating the current page offset.
*/
private resolvePagedScrollPosition;
private needsScrollPageUpdate;
private getPagedLayoutTop;
private getStickyHeaderOffset;
private getScrollTargetRect;
private normalizeScrollTarget;
/**
* Resolve a target's scroll position
* Returns `undefined` when we can't resolve a target for whatever reason
*/
private resolveScrollTargetTop;
/**
* Given an existing scroll target (scroll top and height), figure out the
* correct scroll position to target based on the desired alignment, offset
* and stickyOffset if necessary
*/
private resolveAlignedScrollPosition;
private getLineScrollPosition;
private getRangeScrollPosition;
/**
* Determine target scroll position for current frame.
*
* If there's no pendingScrollTarget then we just return the current scroll
* position
*
* If there's a pendingScrollTarget then we depend on whether there's a
* smooth scroll animation or not. If not just return the destination, or
* compute next position given the smooth scroll spring physics
*/
private computeTargetScrollTopForFrame;
/**
* Closed-form critical-damped ODE step.
*
* Stable at any dt (Euler would blow up once ω·dt ≳ 1), so this survives
* big RAF gaps (tab-wake, offscreen frames) and resize-driven ticks that
* fire outside the normal RAF cadence.
*/
private computeSpringStep;
/**
* For any given pendingScrollTarget, updates any in flight smooth scroll
* animations and returns the target scrollTop to move towards
*
* Resolves the animation based on frame time and adopts any necessary scroll
* anchoring corrections if necessary
*/
private advanceScrollAnimation;
private computeRenderRangeAndEmit;
private flushManagers;
private syncContainerHeight;
private getStickyBounds;
private applyStickyPositioning;
private syncPagedScrollScaffolding;
private reconcileRenderedItems;
private updateStickyPositioning;
private handleScroll;
private clearPendingScroll;
private handleResize;
/**
* Figure out scrollTop accounting for sticky header if enabled and
* necessary
*/
private getScrollAnchorViewportTop;
/**
* Attempt to find a scroll anchor based on build in metrics of the existing
* rendered files/diff.
*
* A scroll anchor represents the first fully visible element (in other
* words, the first file or first line who's top is fully in the viewport).
*/
private getScrollAnchor;
/**
* Given a scroll anchor, attempt to resolve a newly updated (and clamped)
* scroll position to keep the anchored element in place.
*
* If we can't resolve a position for whatever reason, we'll return
* undefined.
*/
private resolveAnchoredScrollTop;
/**
* Apply a device-pixel-rounded scroll position if it differs from the last
* logical scrollTop synchronized into the paged scroll scaffold.
*/
private applyScrollFix;
/**
* Decide whether a pending programmatic scroll has reached its
* destination and should be cleared.
*/
private isPendingTargetSettled;
getScrollTop(): number;
getHeight(): number;
getScrollHeight(): number;
private flushSlotCoordinator;
private notifyScroll;
/**
* Find the first item whose bottom edge crosses into the viewport window.
* This lets scroll-time rendering jump directly near the visible range instead
* of linearly scanning from the start of very large item lists.
*/
private findFirstVisibleIndex;
/**
* Find the last item whose top edge is still within the viewport window.
* Paired with findFirstVisibleIndex, this bounds the render loop to only the
* slice of items that can actually intersect the current scroll range.
*/
private findLastVisibleIndex;
/**
* Recompute measured tops and heights starting from the earliest dirty item.
* Earlier items keep their existing layout, while everything from startIndex
* onward is remeasured so downstream positions and total scroll height stay
* consistent after inserts, removals, or versioned item updates.
*/
private recomputeLayout;
private resetRenderState;
private getFitPerfectlyOverscroll;
}
//#endregion
export { CODE_VIEW_DIFF_OPTION_KEYS, CODE_VIEW_FILE_OPTION_KEYS, CodeView, CodeViewCoordinator, CodeViewCreateEditorOptions, CodeViewItemEditCompleteEventMap, CodeViewItemEditCompleteHandler, CodeViewLineSelection, CodeViewMode, CodeViewModeItemMap, CodeViewOptions, CodeViewRenderedDiffItem, CodeViewRenderedFileItem, CodeViewRenderedItem, CodeViewScrollListener, CodeViewSlotSnapshot };
//# sourceMappingURL=CodeView.d.ts.map