import { DiffFile, SplitSide, type DiffHighlighter, type MultiSelectResult, type LineRange, type MultiSelectState } from '@git-diff-view/core'; import { DiffModeEnum } from '../utils/symbol.js'; import { default as DiffView } from './DiffView.svelte'; import { default as DiffViewWithMultiSelect } from './DiffViewWithMultiSelect.svelte'; import type { Snippet } from 'svelte'; import type { HTMLAttributes } from 'svelte/elements'; export interface DiffViewProps { data?: { oldFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null; }; newFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null; }; hunks: string[]; }; extendData?: { oldFile?: Record; newFile?: Record; }; initialWidgetState?: { side: SplitSide; lineNumber: number; }; diffFile?: DiffFile; class?: string; style?: HTMLAttributes['style']; registerHighlighter?: Omit; diffViewMode?: DiffModeEnum; diffViewWrap?: boolean; diffViewTheme?: 'light' | 'dark'; diffViewFontSize?: number; diffViewHighlight?: boolean; diffViewAddWidget?: boolean; renderWidgetLine?: Snippet<[ { lineNumber: number; side: SplitSide; diffFile: DiffFile; onClose: () => void; } ]>; renderExtendLine?: Snippet<[ { lineNumber: number; side: SplitSide; data: T; diffFile: DiffFile; onUpdate: () => void; } ]>; onAddWidgetClick?: (lineNumber: number, side: SplitSide) => void; onDiffFileCreated?: (diffFile: DiffFile | null) => void; } export interface DiffViewWithMultiSelectProps { data?: { oldFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null; }; newFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null; }; hunks: string[]; }; extendData?: { oldFile?: Record; newFile?: Record; }; initialWidgetState?: { side: SplitSide; lineNumber: number; }; diffFile?: DiffFile; class?: string; style?: HTMLAttributes['style']; registerHighlighter?: Omit; diffViewMode?: DiffModeEnum; diffViewWrap?: boolean; diffViewTheme?: 'light' | 'dark'; diffViewFontSize?: number; diffViewHighlight?: boolean; diffViewAddWidget?: boolean; /** * Enable multi-select feature * @default true */ enableMultiSelect?: boolean; /** * Callback when multi-line selection is complete */ onMultiSelectComplete?: (result: MultiSelectResult) => void; /** * Callback when selection changes (during drag) */ onMultiSelectChange?: (range: LineRange | null, state: MultiSelectState) => void; /** * Custom function to scope selection to one hunk */ scopeMultiSelectToHunk?: (range: LineRange) => LineRange | null; onAddWidgetClick?: (props: { lineNumber: number; fromLineNumber?: number; side: SplitSide; }) => void; renderWidgetLine?: Snippet<[ { lineNumber: number; fromLineNumber: number; side: SplitSide; diffFile: DiffFile; onClose: () => void; } ]>; renderExtendLine?: Snippet<[ { lineNumber: number; side: SplitSide; data: T; diffFile: DiffFile; onUpdate: () => void; } ]>; } export interface DiffViewWithMultiSelectRef { getDiffFileInstance: () => DiffFile | null; getSelectionResult: () => MultiSelectResult | null; getSelectionState: () => MultiSelectState; clearSelection: () => void; setPreselectedLines: (lines: { old: number[]; new: number[]; }) => void; } export { SplitSide, DiffModeEnum }; export { DiffView, DiffViewWithMultiSelect };