import { Disposable, DisposableStore, IDisposable } from "../../base/common/lifecycle.js"; import { DebugLocation, IObservable, IObservableWithChange, IReader, ITransaction } from "../../base/common/observable.js"; import { EditorOption, FindComputedEditorOptionValueById } from "../common/config/editorOptions.js"; import { LineRange } from "../common/core/ranges/lineRange.js"; import { OffsetRange } from "../common/core/ranges/offsetRange.js"; import { Position } from "../common/core/position.js"; import { Selection } from "../common/core/selection.js"; import { ICursorSelectionChangedEvent } from "../common/cursorEvents.js"; import { IModelDeltaDecoration, ITextModel } from "../common/model.js"; import { IModelContentChangedEvent } from "../common/textModelEvents.js"; import { ICodeEditor, IContentWidgetPosition, IEditorMouseEvent, IOverlayWidgetPosition, IPasteEvent } from "./editorBrowser.js"; import { Point } from "../common/core/2d/point.js"; /** * Returns a facade for the code editor that provides observables for various states/events. */ export declare function observableCodeEditor(editor: ICodeEditor): ObservableCodeEditor; export declare class ObservableCodeEditor extends Disposable { readonly editor: ICodeEditor; private static readonly _map; /** * Make sure that editor is not disposed yet! */ static get(editor: ICodeEditor): ObservableCodeEditor; private _updateCounter; private _currentTransaction; private _beginUpdate; private _endUpdate; private constructor(); /** * Batches the transactions started by observableFromEvent. * * If the callback causes the editor to fire an event that updates * an observable value backed by observableFromEvent (such as scrollTop etc.), * then all such updates will be part of the same transaction. */ transaction(cb: (tx: ITransaction) => T): T; forceUpdate(): void; forceUpdate(cb: (tx: ITransaction) => T): T; private _forceUpdate; private readonly _model; readonly model: IObservable; readonly isReadonly: IObservable; private readonly _versionId; readonly versionId: IObservableWithChange; private readonly _selections; readonly selections: IObservableWithChange; readonly positions: IObservable; readonly isFocused: IObservable; readonly isTextFocused: IObservable; readonly inComposition: IObservable; readonly value: import("../../base/common/observable.js").ISettableObservable; readonly valueIsEmpty: IObservableWithChange; readonly cursorSelection: IObservable; readonly cursorPosition: IObservable; readonly cursorLineNumber: IObservableWithChange; readonly onDidType: import("../../base/common/observable.js").IObservableSignal; readonly onDidPaste: import("../../base/common/observable.js").IObservableSignal; readonly scrollTop: IObservable; readonly scrollLeft: IObservable; readonly layoutInfo: IObservable; readonly layoutInfoContentLeft: IObservable; readonly layoutInfoDecorationsLeft: IObservable; readonly layoutInfoWidth: IObservable; readonly layoutInfoHeight: IObservable; readonly layoutInfoMinimap: IObservable; readonly layoutInfoVerticalScrollbarWidth: IObservable; readonly contentWidth: IObservable; readonly contentHeight: IObservable; readonly domNode: IObservableWithChange; getOption(id: T, debugLocation?: DebugLocation): IObservable>; setDecorations(decorations: IObservable): IDisposable; private _widgetCounter; createOverlayWidget(widget: IObservableOverlayWidget): IDisposable; createContentWidget(widget: IObservableContentWidget): IDisposable; observeLineOffsetRange(lineRange: IObservable, store: DisposableStore): IObservable; /** * Uses an approximation if the exact position cannot be determined. */ getLeftOfPosition(position: Position, reader: IReader | undefined): number; observePosition(position: IObservable, store: DisposableStore): IObservable; readonly openedPeekWidgets: import("../../base/common/observable.js").ISettableObservable; isTargetHovered(predicate: (target: IEditorMouseEvent) => boolean, store: DisposableStore): IObservable; observeLineHeightForPosition(position: IObservable | Position): IObservable; observeLineHeightForPosition(position: IObservable): IObservable; observeLineHeightForLine(lineNumber: IObservable | number): IObservable; observeLineHeightForLine(lineNumber: IObservable): IObservable; observeLineHeightsForLineRange(lineNumber: IObservable | LineRange): IObservable; private readonly _onDidChangeViewZones; private readonly _onDidHiddenAreasChanged; private readonly _onDidLineHeightChanged; /** * Tracks whether getWidthOfLine returned 0, indicating the editor may be hidden. * When resize happens and this flag is set, we reset cached line widths. */ private _sawZeroLineWidth; /** * Fires when the editor container resizes. * This is lazily created only when someone subscribes to it. * Useful for detecting when a parent element's display changes from 'none' to 'block'. */ private readonly _onDidContainerResize; /** * Get the width of a line in pixels. * Reading the returned value depends on layoutInfo, value, scrollTop, and container resize events. * The container resize dependency ensures correct values when the editor becomes visible after being hidden. */ getWidthOfLine(lineNumber: number, reader: IReader | undefined): number; /** * Get the vertical position (top offset) for the line's bottom w.r.t. to the first line. */ observeTopForLineNumber(lineNumber: number): IObservable; /** * Get the vertical position (top offset) for the line's bottom w.r.t. to the first line. */ observeBottomForLineNumber(lineNumber: number): IObservable; } interface IObservableOverlayWidget { get domNode(): HTMLElement; readonly position: IObservable; readonly minContentWidthInPx: IObservable; get allowEditorOverflow(): boolean; } interface IObservableContentWidget { get domNode(): HTMLElement; readonly position: IObservable; get allowEditorOverflow(): boolean; } export {};