monaco-editor-core 0.56.0-dev-20260121 → 0.56.0-dev-20260122
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/esm/nls.messages.cs.js +1 -1
- package/esm/nls.messages.de.js +1 -1
- package/esm/nls.messages.es.js +1 -1
- package/esm/nls.messages.fr.js +1 -1
- package/esm/nls.messages.it.js +1 -1
- package/esm/nls.messages.ja.js +1 -1
- package/esm/nls.messages.ko.js +1 -1
- package/esm/nls.messages.pl.js +1 -1
- package/esm/nls.messages.pt-br.js +1 -1
- package/esm/nls.messages.ru.js +1 -1
- package/esm/nls.messages.tr.js +1 -1
- package/esm/nls.messages.zh-cn.js +1 -1
- package/esm/nls.messages.zh-tw.js +1 -1
- package/esm/vs/base/browser/markdownRenderer.js +0 -1
- package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
- package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/esm/vs/base/common/codiconsLibrary.js +2 -0
- package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
- package/esm/vs/base/common/network.js +0 -2
- package/esm/vs/base/common/network.js.map +1 -1
- package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
- package/esm/vs/editor/browser/observableCodeEditor.js +41 -0
- package/esm/vs/editor/browser/observableCodeEditor.js.map +1 -1
- package/esm/vs/editor/browser/view.js +3 -0
- package/esm/vs/editor/browser/view.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/viewLines/viewLine.js +14 -0
- package/esm/vs/editor/browser/viewParts/viewLines/viewLine.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js +7 -0
- package/esm/vs/editor/browser/viewParts/viewLines/viewLines.js.map +1 -1
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +6 -0
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/style.css +2 -41
- package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +2 -1
- package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.js +54 -45
- package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js +2 -8
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js.map +1 -1
- package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js +2 -1
- package/esm/vs/editor/standalone/browser/services/standaloneWebWorkerService.js.map +1 -1
- package/esm/vs/platform/actionWidget/browser/actionList.js +5 -5
- package/esm/vs/platform/actionWidget/browser/actionList.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/observableCodeEditor.ts","vs/editor/browser/observableCodeEditor.ts"],"names":[],"mappings":"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","file":"observableCodeEditor.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { equalsIfDefinedC, arrayEqualsC } from '../../base/common/equals.js';\nimport { Disposable, DisposableStore, IDisposable, toDisposable } from '../../base/common/lifecycle.js';\nimport { DebugLocation, IObservable, IObservableWithChange, IReader, ITransaction, TransactionImpl, autorun, autorunOpts, derived, derivedOpts, derivedWithSetter, observableFromEvent, observableFromEventOpts, observableSignal, observableSignalFromEvent, observableValue, observableValueOpts } from '../../base/common/observable.js';\nimport { EditorOption, FindComputedEditorOptionValueById } from '../common/config/editorOptions.js';\nimport { LineRange } from '../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../common/core/ranges/offsetRange.js';\nimport { Position } from '../common/core/position.js';\nimport { Selection } from '../common/core/selection.js';\nimport { ICursorSelectionChangedEvent } from '../common/cursorEvents.js';\nimport { IModelDeltaDecoration, ITextModel } from '../common/model.js';\nimport { IModelContentChangedEvent } from '../common/textModelEvents.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent, IOverlayWidget, IOverlayWidgetPosition, IPasteEvent } from './editorBrowser.js';\nimport { Point } from '../common/core/2d/point.js';\n\n/**\n * Returns a facade for the code editor that provides observables for various states/events.\n*/\nexport function observableCodeEditor(editor: ICodeEditor): ObservableCodeEditor {\n\treturn ObservableCodeEditor.get(editor);\n}\n\nexport class ObservableCodeEditor extends Disposable {\n\tprivate static readonly _map = new Map<ICodeEditor, ObservableCodeEditor>();\n\n\t/**\n\t * Make sure that editor is not disposed yet!\n\t*/\n\tpublic static get(editor: ICodeEditor): ObservableCodeEditor {\n\t\tlet result = ObservableCodeEditor._map.get(editor);\n\t\tif (!result) {\n\t\t\tresult = new ObservableCodeEditor(editor);\n\t\t\tObservableCodeEditor._map.set(editor, result);\n\t\t\tconst d = editor.onDidDispose(() => {\n\t\t\t\tconst item = ObservableCodeEditor._map.get(editor);\n\t\t\t\tif (item) {\n\t\t\t\t\tObservableCodeEditor._map.delete(editor);\n\t\t\t\t\titem.dispose();\n\t\t\t\t\td.dispose();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _updateCounter;\n\tprivate _currentTransaction: TransactionImpl | undefined;\n\n\tprivate _beginUpdate(): void {\n\t\tthis._updateCounter++;\n\t\tif (this._updateCounter === 1) {\n\t\t\tthis._currentTransaction = new TransactionImpl(() => {\n\t\t\t\t/** @description Update editor state */\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _endUpdate(): void {\n\t\tthis._updateCounter--;\n\t\tif (this._updateCounter === 0) {\n\t\t\tconst t = this._currentTransaction!;\n\t\t\tthis._currentTransaction = undefined;\n\t\t\tt.finish();\n\t\t}\n\t}\n\n\tprivate constructor(public readonly editor: ICodeEditor) {\n\t\tsuper();\n\t\tthis._updateCounter = 0;\n\t\tthis._currentTransaction = undefined;\n\t\tthis._model = observableValue(this, this.editor.getModel());\n\t\tthis.model = this._model;\n\t\tthis.isReadonly = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.readOnly));\n\t\tthis._versionId = observableValueOpts<number | null, IModelContentChangedEvent | undefined>({ owner: this, lazy: true }, this.editor.getModel()?.getVersionId() ?? null);\n\t\tthis.versionId = this._versionId;\n\t\tthis._selections = observableValueOpts<Selection[] | null, ICursorSelectionChangedEvent | undefined>(\n\t\t\t{ owner: this, equalsFn: equalsIfDefinedC(arrayEqualsC(Selection.selectionsEqual)), lazy: true },\n\t\t\tthis.editor.getSelections() ?? null\n\t\t);\n\t\tthis.selections = this._selections;\n\t\tthis.positions = derivedOpts<readonly Position[] | null>(\n\t\t\t{ owner: this, equalsFn: equalsIfDefinedC(arrayEqualsC(Position.equals)) },\n\t\t\treader => this.selections.read(reader)?.map(s => s.getStartPosition()) ?? null\n\t\t);\n\t\tthis.isFocused = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, e => {\n\t\t\tconst d1 = this.editor.onDidFocusEditorWidget(e);\n\t\t\tconst d2 = this.editor.onDidBlurEditorWidget(e);\n\t\t\treturn {\n\t\t\t\tdispose() {\n\t\t\t\t\td1.dispose();\n\t\t\t\t\td2.dispose();\n\t\t\t\t}\n\t\t\t};\n\t\t}, () => this.editor.hasWidgetFocus());\n\t\tthis.isTextFocused = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, e => {\n\t\t\tconst d1 = this.editor.onDidFocusEditorText(e);\n\t\t\tconst d2 = this.editor.onDidBlurEditorText(e);\n\t\t\treturn {\n\t\t\t\tdispose() {\n\t\t\t\t\td1.dispose();\n\t\t\t\t\td2.dispose();\n\t\t\t\t}\n\t\t\t};\n\t\t}, () => this.editor.hasTextFocus());\n\t\tthis.inComposition = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, e => {\n\t\t\tconst d1 = this.editor.onDidCompositionStart(() => {\n\t\t\t\te(undefined);\n\t\t\t});\n\t\t\tconst d2 = this.editor.onDidCompositionEnd(() => {\n\t\t\t\te(undefined);\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdispose() {\n\t\t\t\t\td1.dispose();\n\t\t\t\t\td2.dispose();\n\t\t\t\t}\n\t\t\t};\n\t\t}, () => this.editor.inComposition);\n\t\tthis.value = derivedWithSetter(this,\n\t\t\treader => { this.versionId.read(reader); return this.model.read(reader)?.getValue() ?? ''; },\n\t\t\t(value, tx) => {\n\t\t\t\tconst model = this.model.get();\n\t\t\t\tif (model !== null) {\n\t\t\t\t\tif (value !== model.getValue()) {\n\t\t\t\t\t\tmodel.setValue(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t\tthis.valueIsEmpty = derived(this, reader => { this.versionId.read(reader); return this.editor.getModel()?.getValueLength() === 0; });\n\t\tthis.cursorSelection = derivedOpts({ owner: this, equalsFn: equalsIfDefinedC(Selection.selectionsEqual) }, reader => this.selections.read(reader)?.[0] ?? null);\n\t\tthis.cursorPosition = derivedOpts({ owner: this, equalsFn: Position.equals }, reader => this.selections.read(reader)?.[0]?.getPosition() ?? null);\n\t\tthis.cursorLineNumber = derived<number | null>(this, reader => this.cursorPosition.read(reader)?.lineNumber ?? null);\n\t\tthis.onDidType = observableSignal<string>(this);\n\t\tthis.onDidPaste = observableSignal<IPasteEvent>(this);\n\t\tthis.scrollTop = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidScrollChange, () => this.editor.getScrollTop());\n\t\tthis.scrollLeft = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidScrollChange, () => this.editor.getScrollLeft());\n\t\tthis.layoutInfo = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidLayoutChange, () => this.editor.getLayoutInfo());\n\t\tthis.layoutInfoContentLeft = this.layoutInfo.map(l => l.contentLeft);\n\t\tthis.layoutInfoDecorationsLeft = this.layoutInfo.map(l => l.decorationsLeft);\n\t\tthis.layoutInfoWidth = this.layoutInfo.map(l => l.width);\n\t\tthis.layoutInfoHeight = this.layoutInfo.map(l => l.height);\n\t\tthis.layoutInfoMinimap = this.layoutInfo.map(l => l.minimap);\n\t\tthis.layoutInfoVerticalScrollbarWidth = this.layoutInfo.map(l => l.verticalScrollbarWidth);\n\t\tthis.contentWidth = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidContentSizeChange, () => this.editor.getContentWidth());\n\t\tthis.contentHeight = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidContentSizeChange, () => this.editor.getContentHeight());\n\t\tthis._onDidChangeViewZones = observableSignalFromEvent(this, this.editor.onDidChangeViewZones);\n\t\tthis._onDidHiddenAreasChanged = observableSignalFromEvent(this, this.editor.onDidChangeHiddenAreas);\n\t\tthis._onDidLineHeightChanged = observableSignalFromEvent(this, this.editor.onDidChangeLineHeight);\n\n\t\tthis._widgetCounter = 0;\n\t\tthis.openedPeekWidgets = observableValue(this, 0);\n\n\t\tthis._register(this.editor.onBeginUpdate(() => this._beginUpdate()));\n\t\tthis._register(this.editor.onEndUpdate(() => this._endUpdate()));\n\n\t\tthis._register(this.editor.onDidChangeModel(() => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._model.set(this.editor.getModel(), this._currentTransaction);\n\t\t\t\tthis._forceUpdate();\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidType((e) => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._forceUpdate();\n\t\t\t\tthis.onDidType.trigger(this._currentTransaction, e);\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidPaste((e) => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._forceUpdate();\n\t\t\t\tthis.onDidPaste.trigger(this._currentTransaction, e);\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidChangeModelContent(e => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._versionId.set(this.editor.getModel()?.getVersionId() ?? null, this._currentTransaction, e);\n\t\t\t\tthis._forceUpdate();\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidChangeCursorSelection(e => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._selections.set(this.editor.getSelections(), this._currentTransaction, e);\n\t\t\t\tthis._forceUpdate();\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis.domNode = derived(reader => {\n\t\t\tthis.model.read(reader);\n\t\t\treturn this.editor.getDomNode();\n\t\t});\n\t}\n\n\t/**\n\t * Batches the transactions started by observableFromEvent.\n\t *\n\t * If the callback causes the editor to fire an event that updates\n\t * an observable value backed by observableFromEvent (such as scrollTop etc.),\n\t * then all such updates will be part of the same transaction.\n\t*/\n\tpublic transaction<T>(cb: (tx: ITransaction) => T): T {\n\t\tthis._beginUpdate();\n\t\ttry {\n\t\t\treturn cb(this._currentTransaction!);\n\t\t} finally {\n\t\t\tthis._endUpdate();\n\t\t}\n\t}\n\n\tpublic forceUpdate(): void;\n\tpublic forceUpdate<T>(cb: (tx: ITransaction) => T): T;\n\tpublic forceUpdate<T>(cb?: (tx: ITransaction) => T): T {\n\t\tthis._beginUpdate();\n\t\ttry {\n\t\t\tthis._forceUpdate();\n\t\t\tif (!cb) { return undefined as T; }\n\t\t\treturn cb(this._currentTransaction!);\n\t\t} finally {\n\t\t\tthis._endUpdate();\n\t\t}\n\t}\n\n\tprivate _forceUpdate(): void {\n\t\tthis._beginUpdate();\n\t\ttry {\n\t\t\tthis._model.set(this.editor.getModel(), this._currentTransaction);\n\t\t\tthis._versionId.set(this.editor.getModel()?.getVersionId() ?? null, this._currentTransaction, undefined);\n\t\t\tthis._selections.set(this.editor.getSelections(), this._currentTransaction, undefined);\n\t\t} finally {\n\t\t\tthis._endUpdate();\n\t\t}\n\t}\n\n\tprivate readonly _model;\n\tpublic readonly model: IObservable<ITextModel | null>;\n\n\tpublic readonly isReadonly;\n\n\tprivate readonly _versionId;\n\tpublic readonly versionId: IObservableWithChange<number | null, IModelContentChangedEvent | undefined>;\n\n\tprivate readonly _selections;\n\tpublic readonly selections: IObservableWithChange<Selection[] | null, ICursorSelectionChangedEvent | undefined>;\n\n\n\tpublic readonly positions;\n\n\tpublic readonly isFocused;\n\n\tpublic readonly isTextFocused;\n\n\tpublic readonly inComposition;\n\n\tpublic readonly value;\n\tpublic readonly valueIsEmpty;\n\tpublic readonly cursorSelection;\n\tpublic readonly cursorPosition;\n\tpublic readonly cursorLineNumber;\n\n\tpublic readonly onDidType;\n\tpublic readonly onDidPaste;\n\n\tpublic readonly scrollTop;\n\tpublic readonly scrollLeft;\n\n\tpublic readonly layoutInfo;\n\tpublic readonly layoutInfoContentLeft;\n\tpublic readonly layoutInfoDecorationsLeft;\n\tpublic readonly layoutInfoWidth;\n\tpublic readonly layoutInfoHeight;\n\tpublic readonly layoutInfoMinimap;\n\tpublic readonly layoutInfoVerticalScrollbarWidth;\n\n\tpublic readonly contentWidth;\n\tpublic readonly contentHeight;\n\n\tpublic readonly domNode;\n\n\tpublic getOption<T extends EditorOption>(id: T, debugLocation = DebugLocation.ofCaller()): IObservable<FindComputedEditorOptionValueById<T>> {\n\t\treturn observableFromEvent(this, cb => this.editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(id)) { cb(undefined); }\n\t\t}), () => this.editor.getOption(id), debugLocation);\n\t}\n\n\tpublic setDecorations(decorations: IObservable<IModelDeltaDecoration[]>): IDisposable {\n\t\tconst d = new DisposableStore();\n\t\tconst decorationsCollection = this.editor.createDecorationsCollection();\n\t\td.add(autorunOpts({ owner: this, debugName: () => `Apply decorations from ${decorations.debugName}` }, reader => {\n\t\t\tconst d = decorations.read(reader);\n\t\t\tdecorationsCollection.set(d);\n\t\t}));\n\t\td.add({\n\t\t\tdispose: () => {\n\t\t\t\tdecorationsCollection.clear();\n\t\t\t}\n\t\t});\n\t\treturn d;\n\t}\n\n\tprivate _widgetCounter;\n\n\tpublic createOverlayWidget(widget: IObservableOverlayWidget): IDisposable {\n\t\tconst overlayWidgetId = 'observableOverlayWidget' + (this._widgetCounter++);\n\t\tconst w: IOverlayWidget = {\n\t\t\tgetDomNode: () => widget.domNode,\n\t\t\tgetPosition: () => widget.position.get(),\n\t\t\tgetId: () => overlayWidgetId,\n\t\t\tallowEditorOverflow: widget.allowEditorOverflow,\n\t\t\tgetMinContentWidthInPx: () => widget.minContentWidthInPx.get(),\n\t\t};\n\t\tthis.editor.addOverlayWidget(w);\n\t\tconst d = autorun(reader => {\n\t\t\twidget.position.read(reader);\n\t\t\twidget.minContentWidthInPx.read(reader);\n\t\t\tthis.editor.layoutOverlayWidget(w);\n\t\t});\n\t\treturn toDisposable(() => {\n\t\t\td.dispose();\n\t\t\tthis.editor.removeOverlayWidget(w);\n\t\t});\n\t}\n\n\tpublic createContentWidget(widget: IObservableContentWidget): IDisposable {\n\t\tconst contentWidgetId = 'observableContentWidget' + (this._widgetCounter++);\n\t\tconst w: IContentWidget = {\n\t\t\tgetDomNode: () => widget.domNode,\n\t\t\tgetPosition: () => widget.position.get(),\n\t\t\tgetId: () => contentWidgetId,\n\t\t\tallowEditorOverflow: widget.allowEditorOverflow,\n\t\t};\n\t\tthis.editor.addContentWidget(w);\n\t\tconst d = autorun(reader => {\n\t\t\twidget.position.read(reader);\n\t\t\tthis.editor.layoutContentWidget(w);\n\t\t});\n\t\treturn toDisposable(() => {\n\t\t\td.dispose();\n\t\t\tthis.editor.removeContentWidget(w);\n\t\t});\n\t}\n\n\tpublic observeLineOffsetRange(lineRange: IObservable<LineRange>, store: DisposableStore): IObservable<OffsetRange> {\n\t\tconst start = this.observePosition(lineRange.map(r => new Position(r.startLineNumber, 1)), store);\n\t\tconst end = this.observePosition(lineRange.map(r => new Position(r.endLineNumberExclusive + 1, 1)), store);\n\n\t\treturn derived(reader => {\n\t\t\tstart.read(reader);\n\t\t\tend.read(reader);\n\t\t\tconst range = lineRange.read(reader);\n\t\t\tconst lineCount = this.model.read(reader)?.getLineCount();\n\t\t\tconst s = (\n\t\t\t\t(typeof lineCount !== 'undefined' && range.startLineNumber > lineCount\n\t\t\t\t\t? this.editor.getBottomForLineNumber(lineCount)\n\t\t\t\t\t: this.editor.getTopForLineNumber(range.startLineNumber)\n\t\t\t\t)\n\t\t\t\t- this.scrollTop.read(reader)\n\t\t\t);\n\t\t\tconst e = range.isEmpty ? s : (this.editor.getBottomForLineNumber(range.endLineNumberExclusive - 1) - this.scrollTop.read(reader));\n\t\t\treturn new OffsetRange(s, e);\n\t\t});\n\t}\n\n\t/**\n\t * Uses an approximation if the exact position cannot be determined.\n\t */\n\tgetLeftOfPosition(position: Position, reader: IReader | undefined): number {\n\t\tthis.layoutInfo.read(reader);\n\t\tthis.value.read(reader);\n\n\t\tlet offset = this.editor.getOffsetForColumn(position.lineNumber, position.column);\n\t\tif (offset === -1) {\n\t\t\t// approximation\n\t\t\tconst typicalHalfwidthCharacterWidth = this.editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\t\tconst approximation = position.column * typicalHalfwidthCharacterWidth;\n\t\t\toffset = approximation;\n\t\t}\n\t\treturn offset;\n\t}\n\n\tpublic observePosition(position: IObservable<Position | null>, store: DisposableStore): IObservable<Point | null> {\n\t\tlet pos = position.get();\n\t\tconst result = observableValueOpts<Point | null>({ owner: this, debugName: () => `topLeftOfPosition${pos?.toString()}`, equalsFn: equalsIfDefinedC(Point.equals) }, new Point(0, 0));\n\t\tconst contentWidgetId = `observablePositionWidget` + (this._widgetCounter++);\n\t\tconst domNode = document.createElement('div');\n\t\tconst w: IContentWidget = {\n\t\t\tgetDomNode: () => domNode,\n\t\t\tgetPosition: () => {\n\t\t\t\treturn pos ? { preference: [ContentWidgetPositionPreference.EXACT], position: position.get() } : null;\n\t\t\t},\n\t\t\tgetId: () => contentWidgetId,\n\t\t\tallowEditorOverflow: false,\n\t\t\tuseDisplayNone: true,\n\t\t\tafterRender: (position, coordinate) => {\n\t\t\t\tconst model = this._model.get();\n\t\t\t\tif (model && pos && pos.lineNumber > model.getLineCount()) {\n\t\t\t\t\t// the position is after the last line\n\t\t\t\t\tresult.set(new Point(0, this.editor.getBottomForLineNumber(model.getLineCount()) - this.scrollTop.get()), undefined);\n\t\t\t\t} else {\n\t\t\t\t\tresult.set(coordinate ? new Point(coordinate.left, coordinate.top) : null, undefined);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tthis.editor.addContentWidget(w);\n\t\tstore.add(autorun(reader => {\n\t\t\tpos = position.read(reader);\n\t\t\tthis.editor.layoutContentWidget(w);\n\t\t}));\n\t\tstore.add(toDisposable(() => {\n\t\t\tthis.editor.removeContentWidget(w);\n\t\t}));\n\t\treturn result;\n\t}\n\n\tpublic readonly openedPeekWidgets;\n\n\tisTargetHovered(predicate: (target: IEditorMouseEvent) => boolean, store: DisposableStore): IObservable<boolean> {\n\t\tconst isHovered = observableValue('isInjectedTextHovered', false);\n\t\tstore.add(this.editor.onMouseMove(e => {\n\t\t\tconst val = predicate(e);\n\t\t\tisHovered.set(val, undefined);\n\t\t}));\n\n\t\tstore.add(this.editor.onMouseLeave(E => {\n\t\t\tisHovered.set(false, undefined);\n\t\t}));\n\t\treturn isHovered;\n\t}\n\n\tobserveLineHeightForPosition(position: IObservable<Position> | Position): IObservable<number>;\n\tobserveLineHeightForPosition(position: IObservable<null>): IObservable<null>;\n\tobserveLineHeightForPosition(position: IObservable<Position | null> | Position): IObservable<number | null> {\n\t\treturn derived(reader => {\n\t\t\tconst pos = position instanceof Position ? position : position.read(reader);\n\t\t\tif (pos === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tthis.getOption(EditorOption.lineHeight).read(reader);\n\n\t\t\treturn this.editor.getLineHeightForPosition(pos);\n\t\t});\n\t}\n\n\tobserveLineHeightForLine(lineNumber: IObservable<number> | number): IObservable<number>;\n\tobserveLineHeightForLine(lineNumber: IObservable<null>): IObservable<null>;\n\tobserveLineHeightForLine(lineNumber: IObservable<number | null> | number): IObservable<number | null> {\n\t\tif (typeof lineNumber === 'number') {\n\t\t\treturn this.observeLineHeightForPosition(new Position(lineNumber, 1));\n\t\t}\n\n\t\treturn derived(reader => {\n\t\t\tconst line = lineNumber.read(reader);\n\t\t\tif (line === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn this.observeLineHeightForPosition(new Position(line, 1)).read(reader);\n\t\t});\n\t}\n\n\tobserveLineHeightsForLineRange(lineNumber: IObservable<LineRange> | LineRange): IObservable<number[]> {\n\t\treturn derived(reader => {\n\t\t\tconst range = lineNumber instanceof LineRange ? lineNumber : lineNumber.read(reader);\n\n\t\t\tconst heights: number[] = [];\n\t\t\tfor (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) {\n\t\t\t\theights.push(this.observeLineHeightForLine(i).read(reader));\n\t\t\t}\n\t\t\treturn heights;\n\t\t});\n\t}\n\n\tprivate readonly _onDidChangeViewZones;\n\tprivate readonly _onDidHiddenAreasChanged;\n\tprivate readonly _onDidLineHeightChanged;\n\n\t/**\n\t * Get the vertical position (top offset) for the line's bottom w.r.t. to the first line.\n\t */\n\tobserveTopForLineNumber(lineNumber: number): IObservable<number> {\n\t\treturn derived(reader => {\n\t\t\tthis.layoutInfo.read(reader);\n\t\t\tthis._onDidChangeViewZones.read(reader);\n\t\t\tthis._onDidHiddenAreasChanged.read(reader);\n\t\t\tthis._onDidLineHeightChanged.read(reader);\n\t\t\tthis._versionId.read(reader);\n\t\t\treturn this.editor.getTopForLineNumber(lineNumber);\n\t\t});\n\t}\n}\n\ninterface IObservableOverlayWidget {\n\tget domNode(): HTMLElement;\n\treadonly position: IObservable<IOverlayWidgetPosition | null>;\n\treadonly minContentWidthInPx: IObservable<number>;\n\tget allowEditorOverflow(): boolean;\n}\n\ninterface IObservableContentWidget {\n\tget domNode(): HTMLElement;\n\treadonly position: IObservable<IContentWidgetPosition | null>;\n\tget allowEditorOverflow(): boolean;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { equalsIfDefinedC, arrayEqualsC } from '../../base/common/equals.js';\nimport { Disposable, DisposableStore, IDisposable, toDisposable } from '../../base/common/lifecycle.js';\nimport { DebugLocation, IObservable, IObservableWithChange, IReader, ITransaction, TransactionImpl, autorun, autorunOpts, derived, derivedOpts, derivedWithSetter, observableFromEvent, observableFromEventOpts, observableSignal, observableSignalFromEvent, observableValue, observableValueOpts } from '../../base/common/observable.js';\nimport { EditorOption, FindComputedEditorOptionValueById } from '../common/config/editorOptions.js';\nimport { LineRange } from '../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../common/core/ranges/offsetRange.js';\nimport { Position } from '../common/core/position.js';\nimport { Selection } from '../common/core/selection.js';\nimport { ICursorSelectionChangedEvent } from '../common/cursorEvents.js';\nimport { IModelDeltaDecoration, ITextModel } from '../common/model.js';\nimport { IModelContentChangedEvent } from '../common/textModelEvents.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent, IOverlayWidget, IOverlayWidgetPosition, IPasteEvent } from './editorBrowser.js';\nimport { Point } from '../common/core/2d/point.js';\n\n/**\n * Returns a facade for the code editor that provides observables for various states/events.\n*/\nexport function observableCodeEditor(editor: ICodeEditor): ObservableCodeEditor {\n\treturn ObservableCodeEditor.get(editor);\n}\n\nexport class ObservableCodeEditor extends Disposable {\n\tprivate static readonly _map = new Map<ICodeEditor, ObservableCodeEditor>();\n\n\t/**\n\t * Make sure that editor is not disposed yet!\n\t*/\n\tpublic static get(editor: ICodeEditor): ObservableCodeEditor {\n\t\tlet result = ObservableCodeEditor._map.get(editor);\n\t\tif (!result) {\n\t\t\tresult = new ObservableCodeEditor(editor);\n\t\t\tObservableCodeEditor._map.set(editor, result);\n\t\t\tconst d = editor.onDidDispose(() => {\n\t\t\t\tconst item = ObservableCodeEditor._map.get(editor);\n\t\t\t\tif (item) {\n\t\t\t\t\tObservableCodeEditor._map.delete(editor);\n\t\t\t\t\titem.dispose();\n\t\t\t\t\td.dispose();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _updateCounter;\n\tprivate _currentTransaction: TransactionImpl | undefined;\n\n\tprivate _beginUpdate(): void {\n\t\tthis._updateCounter++;\n\t\tif (this._updateCounter === 1) {\n\t\t\tthis._currentTransaction = new TransactionImpl(() => {\n\t\t\t\t/** @description Update editor state */\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _endUpdate(): void {\n\t\tthis._updateCounter--;\n\t\tif (this._updateCounter === 0) {\n\t\t\tconst t = this._currentTransaction!;\n\t\t\tthis._currentTransaction = undefined;\n\t\t\tt.finish();\n\t\t}\n\t}\n\n\tprivate constructor(public readonly editor: ICodeEditor) {\n\t\tsuper();\n\t\tthis._updateCounter = 0;\n\t\tthis._currentTransaction = undefined;\n\t\tthis._model = observableValue(this, this.editor.getModel());\n\t\tthis.model = this._model;\n\t\tthis.isReadonly = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.readOnly));\n\t\tthis._versionId = observableValueOpts<number | null, IModelContentChangedEvent | undefined>({ owner: this, lazy: true }, this.editor.getModel()?.getVersionId() ?? null);\n\t\tthis.versionId = this._versionId;\n\t\tthis._selections = observableValueOpts<Selection[] | null, ICursorSelectionChangedEvent | undefined>(\n\t\t\t{ owner: this, equalsFn: equalsIfDefinedC(arrayEqualsC(Selection.selectionsEqual)), lazy: true },\n\t\t\tthis.editor.getSelections() ?? null\n\t\t);\n\t\tthis.selections = this._selections;\n\t\tthis.positions = derivedOpts<readonly Position[] | null>(\n\t\t\t{ owner: this, equalsFn: equalsIfDefinedC(arrayEqualsC(Position.equals)) },\n\t\t\treader => this.selections.read(reader)?.map(s => s.getStartPosition()) ?? null\n\t\t);\n\t\tthis.isFocused = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, e => {\n\t\t\tconst d1 = this.editor.onDidFocusEditorWidget(e);\n\t\t\tconst d2 = this.editor.onDidBlurEditorWidget(e);\n\t\t\treturn {\n\t\t\t\tdispose() {\n\t\t\t\t\td1.dispose();\n\t\t\t\t\td2.dispose();\n\t\t\t\t}\n\t\t\t};\n\t\t}, () => this.editor.hasWidgetFocus());\n\t\tthis.isTextFocused = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, e => {\n\t\t\tconst d1 = this.editor.onDidFocusEditorText(e);\n\t\t\tconst d2 = this.editor.onDidBlurEditorText(e);\n\t\t\treturn {\n\t\t\t\tdispose() {\n\t\t\t\t\td1.dispose();\n\t\t\t\t\td2.dispose();\n\t\t\t\t}\n\t\t\t};\n\t\t}, () => this.editor.hasTextFocus());\n\t\tthis.inComposition = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, e => {\n\t\t\tconst d1 = this.editor.onDidCompositionStart(() => {\n\t\t\t\te(undefined);\n\t\t\t});\n\t\t\tconst d2 = this.editor.onDidCompositionEnd(() => {\n\t\t\t\te(undefined);\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdispose() {\n\t\t\t\t\td1.dispose();\n\t\t\t\t\td2.dispose();\n\t\t\t\t}\n\t\t\t};\n\t\t}, () => this.editor.inComposition);\n\t\tthis.value = derivedWithSetter(this,\n\t\t\treader => { this.versionId.read(reader); return this.model.read(reader)?.getValue() ?? ''; },\n\t\t\t(value, tx) => {\n\t\t\t\tconst model = this.model.get();\n\t\t\t\tif (model !== null) {\n\t\t\t\t\tif (value !== model.getValue()) {\n\t\t\t\t\t\tmodel.setValue(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t\tthis.valueIsEmpty = derived(this, reader => { this.versionId.read(reader); return this.editor.getModel()?.getValueLength() === 0; });\n\t\tthis.cursorSelection = derivedOpts({ owner: this, equalsFn: equalsIfDefinedC(Selection.selectionsEqual) }, reader => this.selections.read(reader)?.[0] ?? null);\n\t\tthis.cursorPosition = derivedOpts({ owner: this, equalsFn: Position.equals }, reader => this.selections.read(reader)?.[0]?.getPosition() ?? null);\n\t\tthis.cursorLineNumber = derived<number | null>(this, reader => this.cursorPosition.read(reader)?.lineNumber ?? null);\n\t\tthis.onDidType = observableSignal<string>(this);\n\t\tthis.onDidPaste = observableSignal<IPasteEvent>(this);\n\t\tthis.scrollTop = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidScrollChange, () => this.editor.getScrollTop());\n\t\tthis.scrollLeft = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidScrollChange, () => this.editor.getScrollLeft());\n\t\tthis.layoutInfo = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidLayoutChange, () => this.editor.getLayoutInfo());\n\t\tthis.layoutInfoContentLeft = this.layoutInfo.map(l => l.contentLeft);\n\t\tthis.layoutInfoDecorationsLeft = this.layoutInfo.map(l => l.decorationsLeft);\n\t\tthis.layoutInfoWidth = this.layoutInfo.map(l => l.width);\n\t\tthis.layoutInfoHeight = this.layoutInfo.map(l => l.height);\n\t\tthis.layoutInfoMinimap = this.layoutInfo.map(l => l.minimap);\n\t\tthis.layoutInfoVerticalScrollbarWidth = this.layoutInfo.map(l => l.verticalScrollbarWidth);\n\t\tthis.contentWidth = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidContentSizeChange, () => this.editor.getContentWidth());\n\t\tthis.contentHeight = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidContentSizeChange, () => this.editor.getContentHeight());\n\t\tthis._onDidChangeViewZones = observableSignalFromEvent(this, this.editor.onDidChangeViewZones);\n\t\tthis._onDidHiddenAreasChanged = observableSignalFromEvent(this, this.editor.onDidChangeHiddenAreas);\n\t\tthis._onDidLineHeightChanged = observableSignalFromEvent(this, this.editor.onDidChangeLineHeight);\n\n\t\tthis._widgetCounter = 0;\n\t\tthis.openedPeekWidgets = observableValue(this, 0);\n\n\t\tthis._register(this.editor.onBeginUpdate(() => this._beginUpdate()));\n\t\tthis._register(this.editor.onEndUpdate(() => this._endUpdate()));\n\n\t\tthis._register(this.editor.onDidChangeModel(() => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._model.set(this.editor.getModel(), this._currentTransaction);\n\t\t\t\tthis._forceUpdate();\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidType((e) => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._forceUpdate();\n\t\t\t\tthis.onDidType.trigger(this._currentTransaction, e);\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidPaste((e) => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._forceUpdate();\n\t\t\t\tthis.onDidPaste.trigger(this._currentTransaction, e);\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidChangeModelContent(e => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._versionId.set(this.editor.getModel()?.getVersionId() ?? null, this._currentTransaction, e);\n\t\t\t\tthis._forceUpdate();\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidChangeCursorSelection(e => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._selections.set(this.editor.getSelections(), this._currentTransaction, e);\n\t\t\t\tthis._forceUpdate();\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis.domNode = derived(reader => {\n\t\t\tthis.model.read(reader);\n\t\t\treturn this.editor.getDomNode();\n\t\t});\n\t}\n\n\t/**\n\t * Batches the transactions started by observableFromEvent.\n\t *\n\t * If the callback causes the editor to fire an event that updates\n\t * an observable value backed by observableFromEvent (such as scrollTop etc.),\n\t * then all such updates will be part of the same transaction.\n\t*/\n\tpublic transaction<T>(cb: (tx: ITransaction) => T): T {\n\t\tthis._beginUpdate();\n\t\ttry {\n\t\t\treturn cb(this._currentTransaction!);\n\t\t} finally {\n\t\t\tthis._endUpdate();\n\t\t}\n\t}\n\n\tpublic forceUpdate(): void;\n\tpublic forceUpdate<T>(cb: (tx: ITransaction) => T): T;\n\tpublic forceUpdate<T>(cb?: (tx: ITransaction) => T): T {\n\t\tthis._beginUpdate();\n\t\ttry {\n\t\t\tthis._forceUpdate();\n\t\t\tif (!cb) { return undefined as T; }\n\t\t\treturn cb(this._currentTransaction!);\n\t\t} finally {\n\t\t\tthis._endUpdate();\n\t\t}\n\t}\n\n\tprivate _forceUpdate(): void {\n\t\tthis._beginUpdate();\n\t\ttry {\n\t\t\tthis._model.set(this.editor.getModel(), this._currentTransaction);\n\t\t\tthis._versionId.set(this.editor.getModel()?.getVersionId() ?? null, this._currentTransaction, undefined);\n\t\t\tthis._selections.set(this.editor.getSelections(), this._currentTransaction, undefined);\n\t\t} finally {\n\t\t\tthis._endUpdate();\n\t\t}\n\t}\n\n\tprivate readonly _model;\n\tpublic readonly model: IObservable<ITextModel | null>;\n\n\tpublic readonly isReadonly;\n\n\tprivate readonly _versionId;\n\tpublic readonly versionId: IObservableWithChange<number | null, IModelContentChangedEvent | undefined>;\n\n\tprivate readonly _selections;\n\tpublic readonly selections: IObservableWithChange<Selection[] | null, ICursorSelectionChangedEvent | undefined>;\n\n\n\tpublic readonly positions;\n\n\tpublic readonly isFocused;\n\n\tpublic readonly isTextFocused;\n\n\tpublic readonly inComposition;\n\n\tpublic readonly value;\n\tpublic readonly valueIsEmpty;\n\tpublic readonly cursorSelection;\n\tpublic readonly cursorPosition;\n\tpublic readonly cursorLineNumber;\n\n\tpublic readonly onDidType;\n\tpublic readonly onDidPaste;\n\n\tpublic readonly scrollTop;\n\tpublic readonly scrollLeft;\n\n\tpublic readonly layoutInfo;\n\tpublic readonly layoutInfoContentLeft;\n\tpublic readonly layoutInfoDecorationsLeft;\n\tpublic readonly layoutInfoWidth;\n\tpublic readonly layoutInfoHeight;\n\tpublic readonly layoutInfoMinimap;\n\tpublic readonly layoutInfoVerticalScrollbarWidth;\n\n\tpublic readonly contentWidth;\n\tpublic readonly contentHeight;\n\n\tpublic readonly domNode;\n\n\tpublic getOption<T extends EditorOption>(id: T, debugLocation = DebugLocation.ofCaller()): IObservable<FindComputedEditorOptionValueById<T>> {\n\t\treturn observableFromEvent(this, cb => this.editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(id)) { cb(undefined); }\n\t\t}), () => this.editor.getOption(id), debugLocation);\n\t}\n\n\tpublic setDecorations(decorations: IObservable<IModelDeltaDecoration[]>): IDisposable {\n\t\tconst d = new DisposableStore();\n\t\tconst decorationsCollection = this.editor.createDecorationsCollection();\n\t\td.add(autorunOpts({ owner: this, debugName: () => `Apply decorations from ${decorations.debugName}` }, reader => {\n\t\t\tconst d = decorations.read(reader);\n\t\t\tdecorationsCollection.set(d);\n\t\t}));\n\t\td.add({\n\t\t\tdispose: () => {\n\t\t\t\tdecorationsCollection.clear();\n\t\t\t}\n\t\t});\n\t\treturn d;\n\t}\n\n\tprivate _widgetCounter;\n\n\tpublic createOverlayWidget(widget: IObservableOverlayWidget): IDisposable {\n\t\tconst overlayWidgetId = 'observableOverlayWidget' + (this._widgetCounter++);\n\t\tconst w: IOverlayWidget = {\n\t\t\tgetDomNode: () => widget.domNode,\n\t\t\tgetPosition: () => widget.position.get(),\n\t\t\tgetId: () => overlayWidgetId,\n\t\t\tallowEditorOverflow: widget.allowEditorOverflow,\n\t\t\tgetMinContentWidthInPx: () => widget.minContentWidthInPx.get(),\n\t\t};\n\t\tthis.editor.addOverlayWidget(w);\n\t\tconst d = autorun(reader => {\n\t\t\twidget.position.read(reader);\n\t\t\twidget.minContentWidthInPx.read(reader);\n\t\t\tthis.editor.layoutOverlayWidget(w);\n\t\t});\n\t\treturn toDisposable(() => {\n\t\t\td.dispose();\n\t\t\tthis.editor.removeOverlayWidget(w);\n\t\t});\n\t}\n\n\tpublic createContentWidget(widget: IObservableContentWidget): IDisposable {\n\t\tconst contentWidgetId = 'observableContentWidget' + (this._widgetCounter++);\n\t\tconst w: IContentWidget = {\n\t\t\tgetDomNode: () => widget.domNode,\n\t\t\tgetPosition: () => widget.position.get(),\n\t\t\tgetId: () => contentWidgetId,\n\t\t\tallowEditorOverflow: widget.allowEditorOverflow,\n\t\t};\n\t\tthis.editor.addContentWidget(w);\n\t\tconst d = autorun(reader => {\n\t\t\twidget.position.read(reader);\n\t\t\tthis.editor.layoutContentWidget(w);\n\t\t});\n\t\treturn toDisposable(() => {\n\t\t\td.dispose();\n\t\t\tthis.editor.removeContentWidget(w);\n\t\t});\n\t}\n\n\tpublic observeLineOffsetRange(lineRange: IObservable<LineRange>, store: DisposableStore): IObservable<OffsetRange> {\n\t\tconst start = this.observePosition(lineRange.map(r => new Position(r.startLineNumber, 1)), store);\n\t\tconst end = this.observePosition(lineRange.map(r => new Position(r.endLineNumberExclusive + 1, 1)), store);\n\n\t\treturn derived(reader => {\n\t\t\tstart.read(reader);\n\t\t\tend.read(reader);\n\t\t\tconst range = lineRange.read(reader);\n\t\t\tconst lineCount = this.model.read(reader)?.getLineCount();\n\t\t\tconst s = (\n\t\t\t\t(typeof lineCount !== 'undefined' && range.startLineNumber > lineCount\n\t\t\t\t\t? this.editor.getBottomForLineNumber(lineCount)\n\t\t\t\t\t: this.editor.getTopForLineNumber(range.startLineNumber)\n\t\t\t\t)\n\t\t\t\t- this.scrollTop.read(reader)\n\t\t\t);\n\t\t\tconst e = range.isEmpty ? s : (this.editor.getBottomForLineNumber(range.endLineNumberExclusive - 1) - this.scrollTop.read(reader));\n\t\t\treturn new OffsetRange(s, e);\n\t\t});\n\t}\n\n\t/**\n\t * Uses an approximation if the exact position cannot be determined.\n\t */\n\tgetLeftOfPosition(position: Position, reader: IReader | undefined): number {\n\t\tthis.layoutInfo.read(reader);\n\t\tthis.value.read(reader);\n\n\t\tlet offset = this.editor.getOffsetForColumn(position.lineNumber, position.column);\n\t\tif (offset === -1) {\n\t\t\t// approximation\n\t\t\tconst typicalHalfwidthCharacterWidth = this.editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\t\tconst approximation = position.column * typicalHalfwidthCharacterWidth;\n\t\t\toffset = approximation;\n\t\t}\n\t\treturn offset;\n\t}\n\n\tpublic observePosition(position: IObservable<Position | null>, store: DisposableStore): IObservable<Point | null> {\n\t\tlet pos = position.get();\n\t\tconst result = observableValueOpts<Point | null>({ owner: this, debugName: () => `topLeftOfPosition${pos?.toString()}`, equalsFn: equalsIfDefinedC(Point.equals) }, new Point(0, 0));\n\t\tconst contentWidgetId = `observablePositionWidget` + (this._widgetCounter++);\n\t\tconst domNode = document.createElement('div');\n\t\tconst w: IContentWidget = {\n\t\t\tgetDomNode: () => domNode,\n\t\t\tgetPosition: () => {\n\t\t\t\treturn pos ? { preference: [ContentWidgetPositionPreference.EXACT], position: position.get() } : null;\n\t\t\t},\n\t\t\tgetId: () => contentWidgetId,\n\t\t\tallowEditorOverflow: false,\n\t\t\tuseDisplayNone: true,\n\t\t\tafterRender: (position, coordinate) => {\n\t\t\t\tconst model = this._model.get();\n\t\t\t\tif (model && pos && pos.lineNumber > model.getLineCount()) {\n\t\t\t\t\t// the position is after the last line\n\t\t\t\t\tresult.set(new Point(0, this.editor.getBottomForLineNumber(model.getLineCount()) - this.scrollTop.get()), undefined);\n\t\t\t\t} else {\n\t\t\t\t\tresult.set(coordinate ? new Point(coordinate.left, coordinate.top) : null, undefined);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tthis.editor.addContentWidget(w);\n\t\tstore.add(autorun(reader => {\n\t\t\tpos = position.read(reader);\n\t\t\tthis.editor.layoutContentWidget(w);\n\t\t}));\n\t\tstore.add(toDisposable(() => {\n\t\t\tthis.editor.removeContentWidget(w);\n\t\t}));\n\t\treturn result;\n\t}\n\n\tpublic readonly openedPeekWidgets;\n\n\tisTargetHovered(predicate: (target: IEditorMouseEvent) => boolean, store: DisposableStore): IObservable<boolean> {\n\t\tconst isHovered = observableValue('isInjectedTextHovered', false);\n\t\tstore.add(this.editor.onMouseMove(e => {\n\t\t\tconst val = predicate(e);\n\t\t\tisHovered.set(val, undefined);\n\t\t}));\n\n\t\tstore.add(this.editor.onMouseLeave(E => {\n\t\t\tisHovered.set(false, undefined);\n\t\t}));\n\t\treturn isHovered;\n\t}\n\n\tobserveLineHeightForPosition(position: IObservable<Position> | Position): IObservable<number>;\n\tobserveLineHeightForPosition(position: IObservable<null>): IObservable<null>;\n\tobserveLineHeightForPosition(position: IObservable<Position | null> | Position): IObservable<number | null> {\n\t\treturn derived(reader => {\n\t\t\tconst pos = position instanceof Position ? position : position.read(reader);\n\t\t\tif (pos === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tthis.getOption(EditorOption.lineHeight).read(reader);\n\n\t\t\treturn this.editor.getLineHeightForPosition(pos);\n\t\t});\n\t}\n\n\tobserveLineHeightForLine(lineNumber: IObservable<number> | number): IObservable<number>;\n\tobserveLineHeightForLine(lineNumber: IObservable<null>): IObservable<null>;\n\tobserveLineHeightForLine(lineNumber: IObservable<number | null> | number): IObservable<number | null> {\n\t\tif (typeof lineNumber === 'number') {\n\t\t\treturn this.observeLineHeightForPosition(new Position(lineNumber, 1));\n\t\t}\n\n\t\treturn derived(reader => {\n\t\t\tconst line = lineNumber.read(reader);\n\t\t\tif (line === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn this.observeLineHeightForPosition(new Position(line, 1)).read(reader);\n\t\t});\n\t}\n\n\tobserveLineHeightsForLineRange(lineNumber: IObservable<LineRange> | LineRange): IObservable<number[]> {\n\t\treturn derived(reader => {\n\t\t\tconst range = lineNumber instanceof LineRange ? lineNumber : lineNumber.read(reader);\n\n\t\t\tconst heights: number[] = [];\n\t\t\tfor (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) {\n\t\t\t\theights.push(this.observeLineHeightForLine(i).read(reader));\n\t\t\t}\n\t\t\treturn heights;\n\t\t});\n\t}\n\n\tprivate readonly _onDidChangeViewZones;\n\tprivate readonly _onDidHiddenAreasChanged;\n\tprivate readonly _onDidLineHeightChanged;\n\n\t/**\n\t * Get the vertical position (top offset) for the line's bottom w.r.t. to the first line.\n\t */\n\tobserveTopForLineNumber(lineNumber: number): IObservable<number> {\n\t\treturn derived(reader => {\n\t\t\tthis.layoutInfo.read(reader);\n\t\t\tthis._onDidChangeViewZones.read(reader);\n\t\t\tthis._onDidHiddenAreasChanged.read(reader);\n\t\t\tthis._onDidLineHeightChanged.read(reader);\n\t\t\tthis._versionId.read(reader);\n\t\t\treturn this.editor.getTopForLineNumber(lineNumber);\n\t\t});\n\t}\n}\n\ninterface IObservableOverlayWidget {\n\tget domNode(): HTMLElement;\n\treadonly position: IObservable<IOverlayWidgetPosition | null>;\n\treadonly minContentWidthInPx: IObservable<number>;\n\tget allowEditorOverflow(): boolean;\n}\n\ninterface IObservableContentWidget {\n\tget domNode(): HTMLElement;\n\treadonly position: IObservable<IContentWidgetPosition | null>;\n\tget allowEditorOverflow(): boolean;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/observableCodeEditor.ts","vs/editor/browser/observableCodeEditor.ts"],"names":[],"mappings":"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","file":"observableCodeEditor.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { equalsIfDefinedC, arrayEqualsC } from '../../base/common/equals.js';\nimport { Disposable, DisposableStore, IDisposable, toDisposable } from '../../base/common/lifecycle.js';\nimport { DebugLocation, IObservable, IObservableWithChange, IReader, ITransaction, TransactionImpl, autorun, autorunOpts, derived, derivedOpts, derivedWithSetter, observableFromEvent, observableFromEventOpts, observableSignal, observableSignalFromEvent, observableValue, observableValueOpts } from '../../base/common/observable.js';\nimport { EditorOption, FindComputedEditorOptionValueById } from '../common/config/editorOptions.js';\nimport { LineRange } from '../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../common/core/ranges/offsetRange.js';\nimport { Position } from '../common/core/position.js';\nimport { Selection } from '../common/core/selection.js';\nimport { ICursorSelectionChangedEvent } from '../common/cursorEvents.js';\nimport { IModelDeltaDecoration, ITextModel } from '../common/model.js';\nimport { IModelContentChangedEvent } from '../common/textModelEvents.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent, IOverlayWidget, IOverlayWidgetPosition, IPasteEvent } from './editorBrowser.js';\nimport { Point } from '../common/core/2d/point.js';\n\n/**\n * Returns a facade for the code editor that provides observables for various states/events.\n*/\nexport function observableCodeEditor(editor: ICodeEditor): ObservableCodeEditor {\n\treturn ObservableCodeEditor.get(editor);\n}\n\nexport class ObservableCodeEditor extends Disposable {\n\tprivate static readonly _map = new Map<ICodeEditor, ObservableCodeEditor>();\n\n\t/**\n\t * Make sure that editor is not disposed yet!\n\t*/\n\tpublic static get(editor: ICodeEditor): ObservableCodeEditor {\n\t\tlet result = ObservableCodeEditor._map.get(editor);\n\t\tif (!result) {\n\t\t\tresult = new ObservableCodeEditor(editor);\n\t\t\tObservableCodeEditor._map.set(editor, result);\n\t\t\tconst d = editor.onDidDispose(() => {\n\t\t\t\tconst item = ObservableCodeEditor._map.get(editor);\n\t\t\t\tif (item) {\n\t\t\t\t\tObservableCodeEditor._map.delete(editor);\n\t\t\t\t\titem.dispose();\n\t\t\t\t\td.dispose();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _updateCounter;\n\tprivate _currentTransaction: TransactionImpl | undefined;\n\n\tprivate _beginUpdate(): void {\n\t\tthis._updateCounter++;\n\t\tif (this._updateCounter === 1) {\n\t\t\tthis._currentTransaction = new TransactionImpl(() => {\n\t\t\t\t/** @description Update editor state */\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _endUpdate(): void {\n\t\tthis._updateCounter--;\n\t\tif (this._updateCounter === 0) {\n\t\t\tconst t = this._currentTransaction!;\n\t\t\tthis._currentTransaction = undefined;\n\t\t\tt.finish();\n\t\t}\n\t}\n\n\tprivate constructor(public readonly editor: ICodeEditor) {\n\t\tsuper();\n\t\tthis._updateCounter = 0;\n\t\tthis._currentTransaction = undefined;\n\t\tthis._model = observableValue(this, this.editor.getModel());\n\t\tthis.model = this._model;\n\t\tthis.isReadonly = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.readOnly));\n\t\tthis._versionId = observableValueOpts<number | null, IModelContentChangedEvent | undefined>({ owner: this, lazy: true }, this.editor.getModel()?.getVersionId() ?? null);\n\t\tthis.versionId = this._versionId;\n\t\tthis._selections = observableValueOpts<Selection[] | null, ICursorSelectionChangedEvent | undefined>(\n\t\t\t{ owner: this, equalsFn: equalsIfDefinedC(arrayEqualsC(Selection.selectionsEqual)), lazy: true },\n\t\t\tthis.editor.getSelections() ?? null\n\t\t);\n\t\tthis.selections = this._selections;\n\t\tthis.positions = derivedOpts<readonly Position[] | null>(\n\t\t\t{ owner: this, equalsFn: equalsIfDefinedC(arrayEqualsC(Position.equals)) },\n\t\t\treader => this.selections.read(reader)?.map(s => s.getStartPosition()) ?? null\n\t\t);\n\t\tthis.isFocused = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, e => {\n\t\t\tconst d1 = this.editor.onDidFocusEditorWidget(e);\n\t\t\tconst d2 = this.editor.onDidBlurEditorWidget(e);\n\t\t\treturn {\n\t\t\t\tdispose() {\n\t\t\t\t\td1.dispose();\n\t\t\t\t\td2.dispose();\n\t\t\t\t}\n\t\t\t};\n\t\t}, () => this.editor.hasWidgetFocus());\n\t\tthis.isTextFocused = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, e => {\n\t\t\tconst d1 = this.editor.onDidFocusEditorText(e);\n\t\t\tconst d2 = this.editor.onDidBlurEditorText(e);\n\t\t\treturn {\n\t\t\t\tdispose() {\n\t\t\t\t\td1.dispose();\n\t\t\t\t\td2.dispose();\n\t\t\t\t}\n\t\t\t};\n\t\t}, () => this.editor.hasTextFocus());\n\t\tthis.inComposition = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, e => {\n\t\t\tconst d1 = this.editor.onDidCompositionStart(() => {\n\t\t\t\te(undefined);\n\t\t\t});\n\t\t\tconst d2 = this.editor.onDidCompositionEnd(() => {\n\t\t\t\te(undefined);\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdispose() {\n\t\t\t\t\td1.dispose();\n\t\t\t\t\td2.dispose();\n\t\t\t\t}\n\t\t\t};\n\t\t}, () => this.editor.inComposition);\n\t\tthis.value = derivedWithSetter(this,\n\t\t\treader => { this.versionId.read(reader); return this.model.read(reader)?.getValue() ?? ''; },\n\t\t\t(value, tx) => {\n\t\t\t\tconst model = this.model.get();\n\t\t\t\tif (model !== null) {\n\t\t\t\t\tif (value !== model.getValue()) {\n\t\t\t\t\t\tmodel.setValue(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t\tthis.valueIsEmpty = derived(this, reader => { this.versionId.read(reader); return this.editor.getModel()?.getValueLength() === 0; });\n\t\tthis.cursorSelection = derivedOpts({ owner: this, equalsFn: equalsIfDefinedC(Selection.selectionsEqual) }, reader => this.selections.read(reader)?.[0] ?? null);\n\t\tthis.cursorPosition = derivedOpts({ owner: this, equalsFn: Position.equals }, reader => this.selections.read(reader)?.[0]?.getPosition() ?? null);\n\t\tthis.cursorLineNumber = derived<number | null>(this, reader => this.cursorPosition.read(reader)?.lineNumber ?? null);\n\t\tthis.onDidType = observableSignal<string>(this);\n\t\tthis.onDidPaste = observableSignal<IPasteEvent>(this);\n\t\tthis.scrollTop = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidScrollChange, () => this.editor.getScrollTop());\n\t\tthis.scrollLeft = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidScrollChange, () => this.editor.getScrollLeft());\n\t\tthis.layoutInfo = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidLayoutChange, () => this.editor.getLayoutInfo());\n\t\tthis.layoutInfoContentLeft = this.layoutInfo.map(l => l.contentLeft);\n\t\tthis.layoutInfoDecorationsLeft = this.layoutInfo.map(l => l.decorationsLeft);\n\t\tthis.layoutInfoWidth = this.layoutInfo.map(l => l.width);\n\t\tthis.layoutInfoHeight = this.layoutInfo.map(l => l.height);\n\t\tthis.layoutInfoMinimap = this.layoutInfo.map(l => l.minimap);\n\t\tthis.layoutInfoVerticalScrollbarWidth = this.layoutInfo.map(l => l.verticalScrollbarWidth);\n\t\tthis.contentWidth = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidContentSizeChange, () => this.editor.getContentWidth());\n\t\tthis.contentHeight = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidContentSizeChange, () => this.editor.getContentHeight());\n\t\tthis._onDidChangeViewZones = observableSignalFromEvent(this, this.editor.onDidChangeViewZones);\n\t\tthis._onDidHiddenAreasChanged = observableSignalFromEvent(this, this.editor.onDidChangeHiddenAreas);\n\t\tthis._onDidLineHeightChanged = observableSignalFromEvent(this, this.editor.onDidChangeLineHeight);\n\n\t\tthis._widgetCounter = 0;\n\t\tthis.openedPeekWidgets = observableValue(this, 0);\n\n\t\tthis._register(this.editor.onBeginUpdate(() => this._beginUpdate()));\n\t\tthis._register(this.editor.onEndUpdate(() => this._endUpdate()));\n\n\t\tthis._register(this.editor.onDidChangeModel(() => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._model.set(this.editor.getModel(), this._currentTransaction);\n\t\t\t\tthis._forceUpdate();\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidType((e) => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._forceUpdate();\n\t\t\t\tthis.onDidType.trigger(this._currentTransaction, e);\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidPaste((e) => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._forceUpdate();\n\t\t\t\tthis.onDidPaste.trigger(this._currentTransaction, e);\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidChangeModelContent(e => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._versionId.set(this.editor.getModel()?.getVersionId() ?? null, this._currentTransaction, e);\n\t\t\t\tthis._forceUpdate();\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidChangeCursorSelection(e => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._selections.set(this.editor.getSelections(), this._currentTransaction, e);\n\t\t\t\tthis._forceUpdate();\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis.domNode = derived(reader => {\n\t\t\tthis.model.read(reader);\n\t\t\treturn this.editor.getDomNode();\n\t\t});\n\t}\n\n\t/**\n\t * Batches the transactions started by observableFromEvent.\n\t *\n\t * If the callback causes the editor to fire an event that updates\n\t * an observable value backed by observableFromEvent (such as scrollTop etc.),\n\t * then all such updates will be part of the same transaction.\n\t*/\n\tpublic transaction<T>(cb: (tx: ITransaction) => T): T {\n\t\tthis._beginUpdate();\n\t\ttry {\n\t\t\treturn cb(this._currentTransaction!);\n\t\t} finally {\n\t\t\tthis._endUpdate();\n\t\t}\n\t}\n\n\tpublic forceUpdate(): void;\n\tpublic forceUpdate<T>(cb: (tx: ITransaction) => T): T;\n\tpublic forceUpdate<T>(cb?: (tx: ITransaction) => T): T {\n\t\tthis._beginUpdate();\n\t\ttry {\n\t\t\tthis._forceUpdate();\n\t\t\tif (!cb) { return undefined as T; }\n\t\t\treturn cb(this._currentTransaction!);\n\t\t} finally {\n\t\t\tthis._endUpdate();\n\t\t}\n\t}\n\n\tprivate _forceUpdate(): void {\n\t\tthis._beginUpdate();\n\t\ttry {\n\t\t\tthis._model.set(this.editor.getModel(), this._currentTransaction);\n\t\t\tthis._versionId.set(this.editor.getModel()?.getVersionId() ?? null, this._currentTransaction, undefined);\n\t\t\tthis._selections.set(this.editor.getSelections(), this._currentTransaction, undefined);\n\t\t} finally {\n\t\t\tthis._endUpdate();\n\t\t}\n\t}\n\n\tprivate readonly _model;\n\tpublic readonly model: IObservable<ITextModel | null>;\n\n\tpublic readonly isReadonly;\n\n\tprivate readonly _versionId;\n\tpublic readonly versionId: IObservableWithChange<number | null, IModelContentChangedEvent | undefined>;\n\n\tprivate readonly _selections;\n\tpublic readonly selections: IObservableWithChange<Selection[] | null, ICursorSelectionChangedEvent | undefined>;\n\n\n\tpublic readonly positions;\n\n\tpublic readonly isFocused;\n\n\tpublic readonly isTextFocused;\n\n\tpublic readonly inComposition;\n\n\tpublic readonly value;\n\tpublic readonly valueIsEmpty;\n\tpublic readonly cursorSelection;\n\tpublic readonly cursorPosition;\n\tpublic readonly cursorLineNumber;\n\n\tpublic readonly onDidType;\n\tpublic readonly onDidPaste;\n\n\tpublic readonly scrollTop;\n\tpublic readonly scrollLeft;\n\n\tpublic readonly layoutInfo;\n\tpublic readonly layoutInfoContentLeft;\n\tpublic readonly layoutInfoDecorationsLeft;\n\tpublic readonly layoutInfoWidth;\n\tpublic readonly layoutInfoHeight;\n\tpublic readonly layoutInfoMinimap;\n\tpublic readonly layoutInfoVerticalScrollbarWidth;\n\n\tpublic readonly contentWidth;\n\tpublic readonly contentHeight;\n\n\tpublic readonly domNode;\n\n\tpublic getOption<T extends EditorOption>(id: T, debugLocation = DebugLocation.ofCaller()): IObservable<FindComputedEditorOptionValueById<T>> {\n\t\treturn observableFromEvent(this, cb => this.editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(id)) { cb(undefined); }\n\t\t}), () => this.editor.getOption(id), debugLocation);\n\t}\n\n\tpublic setDecorations(decorations: IObservable<IModelDeltaDecoration[]>): IDisposable {\n\t\tconst d = new DisposableStore();\n\t\tconst decorationsCollection = this.editor.createDecorationsCollection();\n\t\td.add(autorunOpts({ owner: this, debugName: () => `Apply decorations from ${decorations.debugName}` }, reader => {\n\t\t\tconst d = decorations.read(reader);\n\t\t\tdecorationsCollection.set(d);\n\t\t}));\n\t\td.add({\n\t\t\tdispose: () => {\n\t\t\t\tdecorationsCollection.clear();\n\t\t\t}\n\t\t});\n\t\treturn d;\n\t}\n\n\tprivate _widgetCounter;\n\n\tpublic createOverlayWidget(widget: IObservableOverlayWidget): IDisposable {\n\t\tconst overlayWidgetId = 'observableOverlayWidget' + (this._widgetCounter++);\n\t\tconst w: IOverlayWidget = {\n\t\t\tgetDomNode: () => widget.domNode,\n\t\t\tgetPosition: () => widget.position.get(),\n\t\t\tgetId: () => overlayWidgetId,\n\t\t\tallowEditorOverflow: widget.allowEditorOverflow,\n\t\t\tgetMinContentWidthInPx: () => widget.minContentWidthInPx.get(),\n\t\t};\n\t\tthis.editor.addOverlayWidget(w);\n\t\tconst d = autorun(reader => {\n\t\t\twidget.position.read(reader);\n\t\t\twidget.minContentWidthInPx.read(reader);\n\t\t\tthis.editor.layoutOverlayWidget(w);\n\t\t});\n\t\treturn toDisposable(() => {\n\t\t\td.dispose();\n\t\t\tthis.editor.removeOverlayWidget(w);\n\t\t});\n\t}\n\n\tpublic createContentWidget(widget: IObservableContentWidget): IDisposable {\n\t\tconst contentWidgetId = 'observableContentWidget' + (this._widgetCounter++);\n\t\tconst w: IContentWidget = {\n\t\t\tgetDomNode: () => widget.domNode,\n\t\t\tgetPosition: () => widget.position.get(),\n\t\t\tgetId: () => contentWidgetId,\n\t\t\tallowEditorOverflow: widget.allowEditorOverflow,\n\t\t};\n\t\tthis.editor.addContentWidget(w);\n\t\tconst d = autorun(reader => {\n\t\t\twidget.position.read(reader);\n\t\t\tthis.editor.layoutContentWidget(w);\n\t\t});\n\t\treturn toDisposable(() => {\n\t\t\td.dispose();\n\t\t\tthis.editor.removeContentWidget(w);\n\t\t});\n\t}\n\n\tpublic observeLineOffsetRange(lineRange: IObservable<LineRange>, store: DisposableStore): IObservable<OffsetRange> {\n\t\tconst start = this.observePosition(lineRange.map(r => new Position(r.startLineNumber, 1)), store);\n\t\tconst end = this.observePosition(lineRange.map(r => new Position(r.endLineNumberExclusive + 1, 1)), store);\n\n\t\treturn derived(reader => {\n\t\t\tstart.read(reader);\n\t\t\tend.read(reader);\n\t\t\tconst range = lineRange.read(reader);\n\t\t\tconst lineCount = this.model.read(reader)?.getLineCount();\n\t\t\tconst s = (\n\t\t\t\t(typeof lineCount !== 'undefined' && range.startLineNumber > lineCount\n\t\t\t\t\t? this.editor.getBottomForLineNumber(lineCount)\n\t\t\t\t\t: this.editor.getTopForLineNumber(range.startLineNumber)\n\t\t\t\t)\n\t\t\t\t- this.scrollTop.read(reader)\n\t\t\t);\n\t\t\tconst e = range.isEmpty ? s : (this.editor.getBottomForLineNumber(range.endLineNumberExclusive - 1) - this.scrollTop.read(reader));\n\t\t\treturn new OffsetRange(s, e);\n\t\t});\n\t}\n\n\t/**\n\t * Uses an approximation if the exact position cannot be determined.\n\t */\n\tgetLeftOfPosition(position: Position, reader: IReader | undefined): number {\n\t\tthis.layoutInfo.read(reader);\n\t\tthis.value.read(reader);\n\n\t\tlet offset = this.editor.getOffsetForColumn(position.lineNumber, position.column);\n\t\tif (offset === -1) {\n\t\t\t// approximation\n\t\t\tconst typicalHalfwidthCharacterWidth = this.editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\t\tconst approximation = position.column * typicalHalfwidthCharacterWidth;\n\t\t\toffset = approximation;\n\t\t}\n\t\treturn offset;\n\t}\n\n\tpublic observePosition(position: IObservable<Position | null>, store: DisposableStore): IObservable<Point | null> {\n\t\tlet pos = position.get();\n\t\tconst result = observableValueOpts<Point | null>({ owner: this, debugName: () => `topLeftOfPosition${pos?.toString()}`, equalsFn: equalsIfDefinedC(Point.equals) }, new Point(0, 0));\n\t\tconst contentWidgetId = `observablePositionWidget` + (this._widgetCounter++);\n\t\tconst domNode = document.createElement('div');\n\t\tconst w: IContentWidget = {\n\t\t\tgetDomNode: () => domNode,\n\t\t\tgetPosition: () => {\n\t\t\t\treturn pos ? { preference: [ContentWidgetPositionPreference.EXACT], position: position.get() } : null;\n\t\t\t},\n\t\t\tgetId: () => contentWidgetId,\n\t\t\tallowEditorOverflow: false,\n\t\t\tuseDisplayNone: true,\n\t\t\tafterRender: (position, coordinate) => {\n\t\t\t\tconst model = this._model.get();\n\t\t\t\tif (model && pos && pos.lineNumber > model.getLineCount()) {\n\t\t\t\t\t// the position is after the last line\n\t\t\t\t\tresult.set(new Point(0, this.editor.getBottomForLineNumber(model.getLineCount()) - this.scrollTop.get()), undefined);\n\t\t\t\t} else {\n\t\t\t\t\tresult.set(coordinate ? new Point(coordinate.left, coordinate.top) : null, undefined);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tthis.editor.addContentWidget(w);\n\t\tstore.add(autorun(reader => {\n\t\t\tpos = position.read(reader);\n\t\t\tthis.editor.layoutContentWidget(w);\n\t\t}));\n\t\tstore.add(toDisposable(() => {\n\t\t\tthis.editor.removeContentWidget(w);\n\t\t}));\n\t\treturn result;\n\t}\n\n\tpublic readonly openedPeekWidgets;\n\n\tisTargetHovered(predicate: (target: IEditorMouseEvent) => boolean, store: DisposableStore): IObservable<boolean> {\n\t\tconst isHovered = observableValue('isInjectedTextHovered', false);\n\t\tstore.add(this.editor.onMouseMove(e => {\n\t\t\tconst val = predicate(e);\n\t\t\tisHovered.set(val, undefined);\n\t\t}));\n\n\t\tstore.add(this.editor.onMouseLeave(E => {\n\t\t\tisHovered.set(false, undefined);\n\t\t}));\n\t\treturn isHovered;\n\t}\n\n\tobserveLineHeightForPosition(position: IObservable<Position> | Position): IObservable<number>;\n\tobserveLineHeightForPosition(position: IObservable<null>): IObservable<null>;\n\tobserveLineHeightForPosition(position: IObservable<Position | null> | Position): IObservable<number | null> {\n\t\treturn derived(reader => {\n\t\t\tconst pos = position instanceof Position ? position : position.read(reader);\n\t\t\tif (pos === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tthis.getOption(EditorOption.lineHeight).read(reader);\n\n\t\t\treturn this.editor.getLineHeightForPosition(pos);\n\t\t});\n\t}\n\n\tobserveLineHeightForLine(lineNumber: IObservable<number> | number): IObservable<number>;\n\tobserveLineHeightForLine(lineNumber: IObservable<null>): IObservable<null>;\n\tobserveLineHeightForLine(lineNumber: IObservable<number | null> | number): IObservable<number | null> {\n\t\tif (typeof lineNumber === 'number') {\n\t\t\treturn this.observeLineHeightForPosition(new Position(lineNumber, 1));\n\t\t}\n\n\t\treturn derived(reader => {\n\t\t\tconst line = lineNumber.read(reader);\n\t\t\tif (line === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn this.observeLineHeightForPosition(new Position(line, 1)).read(reader);\n\t\t});\n\t}\n\n\tobserveLineHeightsForLineRange(lineNumber: IObservable<LineRange> | LineRange): IObservable<number[]> {\n\t\treturn derived(reader => {\n\t\t\tconst range = lineNumber instanceof LineRange ? lineNumber : lineNumber.read(reader);\n\n\t\t\tconst heights: number[] = [];\n\t\t\tfor (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) {\n\t\t\t\theights.push(this.observeLineHeightForLine(i).read(reader));\n\t\t\t}\n\t\t\treturn heights;\n\t\t});\n\t}\n\n\tprivate readonly _onDidChangeViewZones;\n\tprivate readonly _onDidHiddenAreasChanged;\n\tprivate readonly _onDidLineHeightChanged;\n\n\t/**\n\t * Tracks whether getWidthOfLine returned 0, indicating the editor may be hidden.\n\t * When resize happens and this flag is set, we reset cached line widths.\n\t */\n\tprivate _sawZeroLineWidth = false;\n\n\t/**\n\t * Fires when the editor container resizes.\n\t * This is lazily created only when someone subscribes to it.\n\t * Useful for detecting when a parent element's display changes from 'none' to 'block'.\n\t */\n\tprivate readonly _onDidContainerResize = observableFromEventOpts(\n\t\t{ owner: this, getTransaction: () => this._currentTransaction },\n\t\te => {\n\t\t\tconst container = this.editor.getContainerDomNode();\n\t\t\tconst resizeObserver = new ResizeObserver(() => {\n\t\t\t\t// If we previously saw a 0 width, the editor was likely hidden.\n\t\t\t\t// Now that it resized (became visible), flush the cached widths.\n\t\t\t\tif (this._sawZeroLineWidth) {\n\t\t\t\t\tthis._sawZeroLineWidth = false;\n\t\t\t\t\tthis.editor.resetLineWidthCaches();\n\t\t\t\t}\n\t\t\t\te(undefined);\n\t\t\t});\n\t\t\tresizeObserver.observe(container);\n\t\t\treturn { dispose: () => resizeObserver.disconnect() };\n\t\t},\n\t\t() => ({}) // Return new object each time to ensure change detection\n\t);\n\n\t/**\n\t * Get the width of a line in pixels.\n\t * Reading the returned value depends on layoutInfo, value, scrollTop, and container resize events.\n\t * The container resize dependency ensures correct values when the editor becomes visible after being hidden.\n\t */\n\tgetWidthOfLine(lineNumber: number, reader: IReader | undefined): number {\n\t\tthis.layoutInfo.read(reader);\n\t\tthis.value.read(reader);\n\t\tthis.scrollTop.read(reader);\n\t\tconst width = this.editor.getWidthOfLine(lineNumber);\n\t\tthis._onDidContainerResize.read(reader);\n\t\tif (width === 0) {\n\t\t\tthis._sawZeroLineWidth = true;\n\t\t}\n\t\treturn width;\n\t}\n\n\t/**\n\t * Get the vertical position (top offset) for the line's bottom w.r.t. to the first line.\n\t */\n\tobserveTopForLineNumber(lineNumber: number): IObservable<number> {\n\t\treturn derived(reader => {\n\t\t\tthis.layoutInfo.read(reader);\n\t\t\tthis._onDidChangeViewZones.read(reader);\n\t\t\tthis._onDidHiddenAreasChanged.read(reader);\n\t\t\tthis._onDidLineHeightChanged.read(reader);\n\t\t\tthis._versionId.read(reader);\n\t\t\treturn this.editor.getTopForLineNumber(lineNumber);\n\t\t});\n\t}\n}\n\ninterface IObservableOverlayWidget {\n\tget domNode(): HTMLElement;\n\treadonly position: IObservable<IOverlayWidgetPosition | null>;\n\treadonly minContentWidthInPx: IObservable<number>;\n\tget allowEditorOverflow(): boolean;\n}\n\ninterface IObservableContentWidget {\n\tget domNode(): HTMLElement;\n\treadonly position: IObservable<IContentWidgetPosition | null>;\n\tget allowEditorOverflow(): boolean;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { equalsIfDefinedC, arrayEqualsC } from '../../base/common/equals.js';\nimport { Disposable, DisposableStore, IDisposable, toDisposable } from '../../base/common/lifecycle.js';\nimport { DebugLocation, IObservable, IObservableWithChange, IReader, ITransaction, TransactionImpl, autorun, autorunOpts, derived, derivedOpts, derivedWithSetter, observableFromEvent, observableFromEventOpts, observableSignal, observableSignalFromEvent, observableValue, observableValueOpts } from '../../base/common/observable.js';\nimport { EditorOption, FindComputedEditorOptionValueById } from '../common/config/editorOptions.js';\nimport { LineRange } from '../common/core/ranges/lineRange.js';\nimport { OffsetRange } from '../common/core/ranges/offsetRange.js';\nimport { Position } from '../common/core/position.js';\nimport { Selection } from '../common/core/selection.js';\nimport { ICursorSelectionChangedEvent } from '../common/cursorEvents.js';\nimport { IModelDeltaDecoration, ITextModel } from '../common/model.js';\nimport { IModelContentChangedEvent } from '../common/textModelEvents.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent, IOverlayWidget, IOverlayWidgetPosition, IPasteEvent } from './editorBrowser.js';\nimport { Point } from '../common/core/2d/point.js';\n\n/**\n * Returns a facade for the code editor that provides observables for various states/events.\n*/\nexport function observableCodeEditor(editor: ICodeEditor): ObservableCodeEditor {\n\treturn ObservableCodeEditor.get(editor);\n}\n\nexport class ObservableCodeEditor extends Disposable {\n\tprivate static readonly _map = new Map<ICodeEditor, ObservableCodeEditor>();\n\n\t/**\n\t * Make sure that editor is not disposed yet!\n\t*/\n\tpublic static get(editor: ICodeEditor): ObservableCodeEditor {\n\t\tlet result = ObservableCodeEditor._map.get(editor);\n\t\tif (!result) {\n\t\t\tresult = new ObservableCodeEditor(editor);\n\t\t\tObservableCodeEditor._map.set(editor, result);\n\t\t\tconst d = editor.onDidDispose(() => {\n\t\t\t\tconst item = ObservableCodeEditor._map.get(editor);\n\t\t\t\tif (item) {\n\t\t\t\t\tObservableCodeEditor._map.delete(editor);\n\t\t\t\t\titem.dispose();\n\t\t\t\t\td.dispose();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _updateCounter;\n\tprivate _currentTransaction: TransactionImpl | undefined;\n\n\tprivate _beginUpdate(): void {\n\t\tthis._updateCounter++;\n\t\tif (this._updateCounter === 1) {\n\t\t\tthis._currentTransaction = new TransactionImpl(() => {\n\t\t\t\t/** @description Update editor state */\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _endUpdate(): void {\n\t\tthis._updateCounter--;\n\t\tif (this._updateCounter === 0) {\n\t\t\tconst t = this._currentTransaction!;\n\t\t\tthis._currentTransaction = undefined;\n\t\t\tt.finish();\n\t\t}\n\t}\n\n\tprivate constructor(public readonly editor: ICodeEditor) {\n\t\tsuper();\n\t\tthis._updateCounter = 0;\n\t\tthis._currentTransaction = undefined;\n\t\tthis._model = observableValue(this, this.editor.getModel());\n\t\tthis.model = this._model;\n\t\tthis.isReadonly = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.readOnly));\n\t\tthis._versionId = observableValueOpts<number | null, IModelContentChangedEvent | undefined>({ owner: this, lazy: true }, this.editor.getModel()?.getVersionId() ?? null);\n\t\tthis.versionId = this._versionId;\n\t\tthis._selections = observableValueOpts<Selection[] | null, ICursorSelectionChangedEvent | undefined>(\n\t\t\t{ owner: this, equalsFn: equalsIfDefinedC(arrayEqualsC(Selection.selectionsEqual)), lazy: true },\n\t\t\tthis.editor.getSelections() ?? null\n\t\t);\n\t\tthis.selections = this._selections;\n\t\tthis.positions = derivedOpts<readonly Position[] | null>(\n\t\t\t{ owner: this, equalsFn: equalsIfDefinedC(arrayEqualsC(Position.equals)) },\n\t\t\treader => this.selections.read(reader)?.map(s => s.getStartPosition()) ?? null\n\t\t);\n\t\tthis.isFocused = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, e => {\n\t\t\tconst d1 = this.editor.onDidFocusEditorWidget(e);\n\t\t\tconst d2 = this.editor.onDidBlurEditorWidget(e);\n\t\t\treturn {\n\t\t\t\tdispose() {\n\t\t\t\t\td1.dispose();\n\t\t\t\t\td2.dispose();\n\t\t\t\t}\n\t\t\t};\n\t\t}, () => this.editor.hasWidgetFocus());\n\t\tthis.isTextFocused = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, e => {\n\t\t\tconst d1 = this.editor.onDidFocusEditorText(e);\n\t\t\tconst d2 = this.editor.onDidBlurEditorText(e);\n\t\t\treturn {\n\t\t\t\tdispose() {\n\t\t\t\t\td1.dispose();\n\t\t\t\t\td2.dispose();\n\t\t\t\t}\n\t\t\t};\n\t\t}, () => this.editor.hasTextFocus());\n\t\tthis.inComposition = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, e => {\n\t\t\tconst d1 = this.editor.onDidCompositionStart(() => {\n\t\t\t\te(undefined);\n\t\t\t});\n\t\t\tconst d2 = this.editor.onDidCompositionEnd(() => {\n\t\t\t\te(undefined);\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdispose() {\n\t\t\t\t\td1.dispose();\n\t\t\t\t\td2.dispose();\n\t\t\t\t}\n\t\t\t};\n\t\t}, () => this.editor.inComposition);\n\t\tthis.value = derivedWithSetter(this,\n\t\t\treader => { this.versionId.read(reader); return this.model.read(reader)?.getValue() ?? ''; },\n\t\t\t(value, tx) => {\n\t\t\t\tconst model = this.model.get();\n\t\t\t\tif (model !== null) {\n\t\t\t\t\tif (value !== model.getValue()) {\n\t\t\t\t\t\tmodel.setValue(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t\tthis.valueIsEmpty = derived(this, reader => { this.versionId.read(reader); return this.editor.getModel()?.getValueLength() === 0; });\n\t\tthis.cursorSelection = derivedOpts({ owner: this, equalsFn: equalsIfDefinedC(Selection.selectionsEqual) }, reader => this.selections.read(reader)?.[0] ?? null);\n\t\tthis.cursorPosition = derivedOpts({ owner: this, equalsFn: Position.equals }, reader => this.selections.read(reader)?.[0]?.getPosition() ?? null);\n\t\tthis.cursorLineNumber = derived<number | null>(this, reader => this.cursorPosition.read(reader)?.lineNumber ?? null);\n\t\tthis.onDidType = observableSignal<string>(this);\n\t\tthis.onDidPaste = observableSignal<IPasteEvent>(this);\n\t\tthis.scrollTop = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidScrollChange, () => this.editor.getScrollTop());\n\t\tthis.scrollLeft = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidScrollChange, () => this.editor.getScrollLeft());\n\t\tthis.layoutInfo = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidLayoutChange, () => this.editor.getLayoutInfo());\n\t\tthis.layoutInfoContentLeft = this.layoutInfo.map(l => l.contentLeft);\n\t\tthis.layoutInfoDecorationsLeft = this.layoutInfo.map(l => l.decorationsLeft);\n\t\tthis.layoutInfoWidth = this.layoutInfo.map(l => l.width);\n\t\tthis.layoutInfoHeight = this.layoutInfo.map(l => l.height);\n\t\tthis.layoutInfoMinimap = this.layoutInfo.map(l => l.minimap);\n\t\tthis.layoutInfoVerticalScrollbarWidth = this.layoutInfo.map(l => l.verticalScrollbarWidth);\n\t\tthis.contentWidth = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidContentSizeChange, () => this.editor.getContentWidth());\n\t\tthis.contentHeight = observableFromEventOpts({ owner: this, getTransaction: () => this._currentTransaction }, this.editor.onDidContentSizeChange, () => this.editor.getContentHeight());\n\t\tthis._onDidChangeViewZones = observableSignalFromEvent(this, this.editor.onDidChangeViewZones);\n\t\tthis._onDidHiddenAreasChanged = observableSignalFromEvent(this, this.editor.onDidChangeHiddenAreas);\n\t\tthis._onDidLineHeightChanged = observableSignalFromEvent(this, this.editor.onDidChangeLineHeight);\n\n\t\tthis._widgetCounter = 0;\n\t\tthis.openedPeekWidgets = observableValue(this, 0);\n\n\t\tthis._register(this.editor.onBeginUpdate(() => this._beginUpdate()));\n\t\tthis._register(this.editor.onEndUpdate(() => this._endUpdate()));\n\n\t\tthis._register(this.editor.onDidChangeModel(() => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._model.set(this.editor.getModel(), this._currentTransaction);\n\t\t\t\tthis._forceUpdate();\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidType((e) => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._forceUpdate();\n\t\t\t\tthis.onDidType.trigger(this._currentTransaction, e);\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidPaste((e) => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._forceUpdate();\n\t\t\t\tthis.onDidPaste.trigger(this._currentTransaction, e);\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidChangeModelContent(e => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._versionId.set(this.editor.getModel()?.getVersionId() ?? null, this._currentTransaction, e);\n\t\t\t\tthis._forceUpdate();\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this.editor.onDidChangeCursorSelection(e => {\n\t\t\tthis._beginUpdate();\n\t\t\ttry {\n\t\t\t\tthis._selections.set(this.editor.getSelections(), this._currentTransaction, e);\n\t\t\t\tthis._forceUpdate();\n\t\t\t} finally {\n\t\t\t\tthis._endUpdate();\n\t\t\t}\n\t\t}));\n\n\t\tthis.domNode = derived(reader => {\n\t\t\tthis.model.read(reader);\n\t\t\treturn this.editor.getDomNode();\n\t\t});\n\t}\n\n\t/**\n\t * Batches the transactions started by observableFromEvent.\n\t *\n\t * If the callback causes the editor to fire an event that updates\n\t * an observable value backed by observableFromEvent (such as scrollTop etc.),\n\t * then all such updates will be part of the same transaction.\n\t*/\n\tpublic transaction<T>(cb: (tx: ITransaction) => T): T {\n\t\tthis._beginUpdate();\n\t\ttry {\n\t\t\treturn cb(this._currentTransaction!);\n\t\t} finally {\n\t\t\tthis._endUpdate();\n\t\t}\n\t}\n\n\tpublic forceUpdate(): void;\n\tpublic forceUpdate<T>(cb: (tx: ITransaction) => T): T;\n\tpublic forceUpdate<T>(cb?: (tx: ITransaction) => T): T {\n\t\tthis._beginUpdate();\n\t\ttry {\n\t\t\tthis._forceUpdate();\n\t\t\tif (!cb) { return undefined as T; }\n\t\t\treturn cb(this._currentTransaction!);\n\t\t} finally {\n\t\t\tthis._endUpdate();\n\t\t}\n\t}\n\n\tprivate _forceUpdate(): void {\n\t\tthis._beginUpdate();\n\t\ttry {\n\t\t\tthis._model.set(this.editor.getModel(), this._currentTransaction);\n\t\t\tthis._versionId.set(this.editor.getModel()?.getVersionId() ?? null, this._currentTransaction, undefined);\n\t\t\tthis._selections.set(this.editor.getSelections(), this._currentTransaction, undefined);\n\t\t} finally {\n\t\t\tthis._endUpdate();\n\t\t}\n\t}\n\n\tprivate readonly _model;\n\tpublic readonly model: IObservable<ITextModel | null>;\n\n\tpublic readonly isReadonly;\n\n\tprivate readonly _versionId;\n\tpublic readonly versionId: IObservableWithChange<number | null, IModelContentChangedEvent | undefined>;\n\n\tprivate readonly _selections;\n\tpublic readonly selections: IObservableWithChange<Selection[] | null, ICursorSelectionChangedEvent | undefined>;\n\n\n\tpublic readonly positions;\n\n\tpublic readonly isFocused;\n\n\tpublic readonly isTextFocused;\n\n\tpublic readonly inComposition;\n\n\tpublic readonly value;\n\tpublic readonly valueIsEmpty;\n\tpublic readonly cursorSelection;\n\tpublic readonly cursorPosition;\n\tpublic readonly cursorLineNumber;\n\n\tpublic readonly onDidType;\n\tpublic readonly onDidPaste;\n\n\tpublic readonly scrollTop;\n\tpublic readonly scrollLeft;\n\n\tpublic readonly layoutInfo;\n\tpublic readonly layoutInfoContentLeft;\n\tpublic readonly layoutInfoDecorationsLeft;\n\tpublic readonly layoutInfoWidth;\n\tpublic readonly layoutInfoHeight;\n\tpublic readonly layoutInfoMinimap;\n\tpublic readonly layoutInfoVerticalScrollbarWidth;\n\n\tpublic readonly contentWidth;\n\tpublic readonly contentHeight;\n\n\tpublic readonly domNode;\n\n\tpublic getOption<T extends EditorOption>(id: T, debugLocation = DebugLocation.ofCaller()): IObservable<FindComputedEditorOptionValueById<T>> {\n\t\treturn observableFromEvent(this, cb => this.editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(id)) { cb(undefined); }\n\t\t}), () => this.editor.getOption(id), debugLocation);\n\t}\n\n\tpublic setDecorations(decorations: IObservable<IModelDeltaDecoration[]>): IDisposable {\n\t\tconst d = new DisposableStore();\n\t\tconst decorationsCollection = this.editor.createDecorationsCollection();\n\t\td.add(autorunOpts({ owner: this, debugName: () => `Apply decorations from ${decorations.debugName}` }, reader => {\n\t\t\tconst d = decorations.read(reader);\n\t\t\tdecorationsCollection.set(d);\n\t\t}));\n\t\td.add({\n\t\t\tdispose: () => {\n\t\t\t\tdecorationsCollection.clear();\n\t\t\t}\n\t\t});\n\t\treturn d;\n\t}\n\n\tprivate _widgetCounter;\n\n\tpublic createOverlayWidget(widget: IObservableOverlayWidget): IDisposable {\n\t\tconst overlayWidgetId = 'observableOverlayWidget' + (this._widgetCounter++);\n\t\tconst w: IOverlayWidget = {\n\t\t\tgetDomNode: () => widget.domNode,\n\t\t\tgetPosition: () => widget.position.get(),\n\t\t\tgetId: () => overlayWidgetId,\n\t\t\tallowEditorOverflow: widget.allowEditorOverflow,\n\t\t\tgetMinContentWidthInPx: () => widget.minContentWidthInPx.get(),\n\t\t};\n\t\tthis.editor.addOverlayWidget(w);\n\t\tconst d = autorun(reader => {\n\t\t\twidget.position.read(reader);\n\t\t\twidget.minContentWidthInPx.read(reader);\n\t\t\tthis.editor.layoutOverlayWidget(w);\n\t\t});\n\t\treturn toDisposable(() => {\n\t\t\td.dispose();\n\t\t\tthis.editor.removeOverlayWidget(w);\n\t\t});\n\t}\n\n\tpublic createContentWidget(widget: IObservableContentWidget): IDisposable {\n\t\tconst contentWidgetId = 'observableContentWidget' + (this._widgetCounter++);\n\t\tconst w: IContentWidget = {\n\t\t\tgetDomNode: () => widget.domNode,\n\t\t\tgetPosition: () => widget.position.get(),\n\t\t\tgetId: () => contentWidgetId,\n\t\t\tallowEditorOverflow: widget.allowEditorOverflow,\n\t\t};\n\t\tthis.editor.addContentWidget(w);\n\t\tconst d = autorun(reader => {\n\t\t\twidget.position.read(reader);\n\t\t\tthis.editor.layoutContentWidget(w);\n\t\t});\n\t\treturn toDisposable(() => {\n\t\t\td.dispose();\n\t\t\tthis.editor.removeContentWidget(w);\n\t\t});\n\t}\n\n\tpublic observeLineOffsetRange(lineRange: IObservable<LineRange>, store: DisposableStore): IObservable<OffsetRange> {\n\t\tconst start = this.observePosition(lineRange.map(r => new Position(r.startLineNumber, 1)), store);\n\t\tconst end = this.observePosition(lineRange.map(r => new Position(r.endLineNumberExclusive + 1, 1)), store);\n\n\t\treturn derived(reader => {\n\t\t\tstart.read(reader);\n\t\t\tend.read(reader);\n\t\t\tconst range = lineRange.read(reader);\n\t\t\tconst lineCount = this.model.read(reader)?.getLineCount();\n\t\t\tconst s = (\n\t\t\t\t(typeof lineCount !== 'undefined' && range.startLineNumber > lineCount\n\t\t\t\t\t? this.editor.getBottomForLineNumber(lineCount)\n\t\t\t\t\t: this.editor.getTopForLineNumber(range.startLineNumber)\n\t\t\t\t)\n\t\t\t\t- this.scrollTop.read(reader)\n\t\t\t);\n\t\t\tconst e = range.isEmpty ? s : (this.editor.getBottomForLineNumber(range.endLineNumberExclusive - 1) - this.scrollTop.read(reader));\n\t\t\treturn new OffsetRange(s, e);\n\t\t});\n\t}\n\n\t/**\n\t * Uses an approximation if the exact position cannot be determined.\n\t */\n\tgetLeftOfPosition(position: Position, reader: IReader | undefined): number {\n\t\tthis.layoutInfo.read(reader);\n\t\tthis.value.read(reader);\n\n\t\tlet offset = this.editor.getOffsetForColumn(position.lineNumber, position.column);\n\t\tif (offset === -1) {\n\t\t\t// approximation\n\t\t\tconst typicalHalfwidthCharacterWidth = this.editor.getOption(EditorOption.fontInfo).typicalHalfwidthCharacterWidth;\n\t\t\tconst approximation = position.column * typicalHalfwidthCharacterWidth;\n\t\t\toffset = approximation;\n\t\t}\n\t\treturn offset;\n\t}\n\n\tpublic observePosition(position: IObservable<Position | null>, store: DisposableStore): IObservable<Point | null> {\n\t\tlet pos = position.get();\n\t\tconst result = observableValueOpts<Point | null>({ owner: this, debugName: () => `topLeftOfPosition${pos?.toString()}`, equalsFn: equalsIfDefinedC(Point.equals) }, new Point(0, 0));\n\t\tconst contentWidgetId = `observablePositionWidget` + (this._widgetCounter++);\n\t\tconst domNode = document.createElement('div');\n\t\tconst w: IContentWidget = {\n\t\t\tgetDomNode: () => domNode,\n\t\t\tgetPosition: () => {\n\t\t\t\treturn pos ? { preference: [ContentWidgetPositionPreference.EXACT], position: position.get() } : null;\n\t\t\t},\n\t\t\tgetId: () => contentWidgetId,\n\t\t\tallowEditorOverflow: false,\n\t\t\tuseDisplayNone: true,\n\t\t\tafterRender: (position, coordinate) => {\n\t\t\t\tconst model = this._model.get();\n\t\t\t\tif (model && pos && pos.lineNumber > model.getLineCount()) {\n\t\t\t\t\t// the position is after the last line\n\t\t\t\t\tresult.set(new Point(0, this.editor.getBottomForLineNumber(model.getLineCount()) - this.scrollTop.get()), undefined);\n\t\t\t\t} else {\n\t\t\t\t\tresult.set(coordinate ? new Point(coordinate.left, coordinate.top) : null, undefined);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tthis.editor.addContentWidget(w);\n\t\tstore.add(autorun(reader => {\n\t\t\tpos = position.read(reader);\n\t\t\tthis.editor.layoutContentWidget(w);\n\t\t}));\n\t\tstore.add(toDisposable(() => {\n\t\t\tthis.editor.removeContentWidget(w);\n\t\t}));\n\t\treturn result;\n\t}\n\n\tpublic readonly openedPeekWidgets;\n\n\tisTargetHovered(predicate: (target: IEditorMouseEvent) => boolean, store: DisposableStore): IObservable<boolean> {\n\t\tconst isHovered = observableValue('isInjectedTextHovered', false);\n\t\tstore.add(this.editor.onMouseMove(e => {\n\t\t\tconst val = predicate(e);\n\t\t\tisHovered.set(val, undefined);\n\t\t}));\n\n\t\tstore.add(this.editor.onMouseLeave(E => {\n\t\t\tisHovered.set(false, undefined);\n\t\t}));\n\t\treturn isHovered;\n\t}\n\n\tobserveLineHeightForPosition(position: IObservable<Position> | Position): IObservable<number>;\n\tobserveLineHeightForPosition(position: IObservable<null>): IObservable<null>;\n\tobserveLineHeightForPosition(position: IObservable<Position | null> | Position): IObservable<number | null> {\n\t\treturn derived(reader => {\n\t\t\tconst pos = position instanceof Position ? position : position.read(reader);\n\t\t\tif (pos === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tthis.getOption(EditorOption.lineHeight).read(reader);\n\n\t\t\treturn this.editor.getLineHeightForPosition(pos);\n\t\t});\n\t}\n\n\tobserveLineHeightForLine(lineNumber: IObservable<number> | number): IObservable<number>;\n\tobserveLineHeightForLine(lineNumber: IObservable<null>): IObservable<null>;\n\tobserveLineHeightForLine(lineNumber: IObservable<number | null> | number): IObservable<number | null> {\n\t\tif (typeof lineNumber === 'number') {\n\t\t\treturn this.observeLineHeightForPosition(new Position(lineNumber, 1));\n\t\t}\n\n\t\treturn derived(reader => {\n\t\t\tconst line = lineNumber.read(reader);\n\t\t\tif (line === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn this.observeLineHeightForPosition(new Position(line, 1)).read(reader);\n\t\t});\n\t}\n\n\tobserveLineHeightsForLineRange(lineNumber: IObservable<LineRange> | LineRange): IObservable<number[]> {\n\t\treturn derived(reader => {\n\t\t\tconst range = lineNumber instanceof LineRange ? lineNumber : lineNumber.read(reader);\n\n\t\t\tconst heights: number[] = [];\n\t\t\tfor (let i = range.startLineNumber; i < range.endLineNumberExclusive; i++) {\n\t\t\t\theights.push(this.observeLineHeightForLine(i).read(reader));\n\t\t\t}\n\t\t\treturn heights;\n\t\t});\n\t}\n\n\tprivate readonly _onDidChangeViewZones;\n\tprivate readonly _onDidHiddenAreasChanged;\n\tprivate readonly _onDidLineHeightChanged;\n\n\t/**\n\t * Tracks whether getWidthOfLine returned 0, indicating the editor may be hidden.\n\t * When resize happens and this flag is set, we reset cached line widths.\n\t */\n\tprivate _sawZeroLineWidth = false;\n\n\t/**\n\t * Fires when the editor container resizes.\n\t * This is lazily created only when someone subscribes to it.\n\t * Useful for detecting when a parent element's display changes from 'none' to 'block'.\n\t */\n\tprivate readonly _onDidContainerResize = observableFromEventOpts(\n\t\t{ owner: this, getTransaction: () => this._currentTransaction },\n\t\te => {\n\t\t\tconst container = this.editor.getContainerDomNode();\n\t\t\tconst resizeObserver = new ResizeObserver(() => {\n\t\t\t\t// If we previously saw a 0 width, the editor was likely hidden.\n\t\t\t\t// Now that it resized (became visible), flush the cached widths.\n\t\t\t\tif (this._sawZeroLineWidth) {\n\t\t\t\t\tthis._sawZeroLineWidth = false;\n\t\t\t\t\tthis.editor.resetLineWidthCaches();\n\t\t\t\t}\n\t\t\t\te(undefined);\n\t\t\t});\n\t\t\tresizeObserver.observe(container);\n\t\t\treturn { dispose: () => resizeObserver.disconnect() };\n\t\t},\n\t\t() => ({}) // Return new object each time to ensure change detection\n\t);\n\n\t/**\n\t * Get the width of a line in pixels.\n\t * Reading the returned value depends on layoutInfo, value, scrollTop, and container resize events.\n\t * The container resize dependency ensures correct values when the editor becomes visible after being hidden.\n\t */\n\tgetWidthOfLine(lineNumber: number, reader: IReader | undefined): number {\n\t\tthis.layoutInfo.read(reader);\n\t\tthis.value.read(reader);\n\t\tthis.scrollTop.read(reader);\n\t\tconst width = this.editor.getWidthOfLine(lineNumber);\n\t\tthis._onDidContainerResize.read(reader);\n\t\tif (width === 0) {\n\t\t\tthis._sawZeroLineWidth = true;\n\t\t}\n\t\treturn width;\n\t}\n\n\t/**\n\t * Get the vertical position (top offset) for the line's bottom w.r.t. to the first line.\n\t */\n\tobserveTopForLineNumber(lineNumber: number): IObservable<number> {\n\t\treturn derived(reader => {\n\t\t\tthis.layoutInfo.read(reader);\n\t\t\tthis._onDidChangeViewZones.read(reader);\n\t\t\tthis._onDidHiddenAreasChanged.read(reader);\n\t\t\tthis._onDidLineHeightChanged.read(reader);\n\t\t\tthis._versionId.read(reader);\n\t\t\treturn this.editor.getTopForLineNumber(lineNumber);\n\t\t});\n\t}\n}\n\ninterface IObservableOverlayWidget {\n\tget domNode(): HTMLElement;\n\treadonly position: IObservable<IOverlayWidgetPosition | null>;\n\treadonly minContentWidthInPx: IObservable<number>;\n\tget allowEditorOverflow(): boolean;\n}\n\ninterface IObservableContentWidget {\n\tget domNode(): HTMLElement;\n\treadonly position: IObservable<IContentWidgetPosition | null>;\n\tget allowEditorOverflow(): boolean;\n}\n"]}
|
|
@@ -533,6 +533,9 @@ let View = class View extends ViewEventHandler {
|
|
|
533
533
|
const width = this._viewLines.getLineWidth(viewLine);
|
|
534
534
|
return width;
|
|
535
535
|
}
|
|
536
|
+
resetLineWidthCaches() {
|
|
537
|
+
this._viewLines.resetLineWidthCaches();
|
|
538
|
+
}
|
|
536
539
|
getTargetAtClientPoint(clientX, clientY) {
|
|
537
540
|
const mouseTarget = this._pointerHandler.getTargetAtClientPoint(clientX, clientY);
|
|
538
541
|
if (!mouseTarget) {
|