monaco-editor-core 0.56.0-dev-20260628 → 0.56.0
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.keys.json +1 -1
- package/esm/nls.messages.cs.js +2 -2
- package/esm/nls.messages.de.js +2 -2
- package/esm/nls.messages.es.js +2 -2
- package/esm/nls.messages.fr.js +2 -2
- package/esm/nls.messages.it.js +2 -2
- package/esm/nls.messages.ja.js +2 -2
- package/esm/nls.messages.js +1 -1
- package/esm/nls.messages.json +1 -1
- package/esm/nls.messages.ko.js +2 -2
- package/esm/nls.messages.pl.js +2 -2
- package/esm/nls.messages.pt-br.js +2 -2
- package/esm/nls.messages.ru.js +2 -2
- package/esm/nls.messages.tr.js +2 -2
- package/esm/nls.messages.zh-cn.js +2 -2
- package/esm/nls.messages.zh-tw.js +2 -2
- package/esm/nls.metadata.json +0 -4
- package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js +10 -23
- package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js.map +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js +0 -1
- package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js.map +1 -1
- package/esm/vs/editor/contrib/hover/browser/contentHoverRendered.js +2 -2
- package/esm/vs/editor/contrib/hover/browser/contentHoverRendered.js.map +1 -1
- package/esm/vs/platform/actionWidget/browser/actionList.js +8 -48
- package/esm/vs/platform/actionWidget/browser/actionList.js.map +1 -1
- package/esm/vs/platform/actionWidget/browser/actionWidget.css +2 -87
- package/esm/vs/platform/actionWidget/browser/actionWidget.js +12 -12
- package/esm/vs/platform/configuration/common/configurationRegistry.js +11 -11
- package/esm/vs/platform/contextkey/browser/contextKeyService.js +1 -1
- package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
- package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
- package/esm/vs/platform/contextkey/common/scanner.js +5 -5
- package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
- package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
- package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
- package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +5 -5
- package/esm/vs/platform/list/browser/listService.js +27 -27
- package/esm/vs/platform/markers/common/markerService.js +2 -2
- package/esm/vs/platform/markers/common/markers.js +6 -6
- package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
- package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
- package/esm/vs/platform/quickinput/browser/quickInput.js +10 -10
- package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
- package/esm/vs/platform/quickinput/browser/quickInputController.js +6 -6
- package/esm/vs/platform/quickinput/browser/quickInputList.js +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
- package/esm/vs/platform/quickinput/browser/tree/quickTree.js +1 -1
- package/esm/vs/platform/theme/common/colorUtils.js +2 -2
- package/esm/vs/platform/theme/common/colors/baseColors.js +19 -19
- package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
- package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
- package/esm/vs/platform/theme/common/colors/inputColors.js +48 -48
- package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
- package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
- package/esm/vs/platform/theme/common/colors/minimapColors.js +11 -11
- package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
- package/esm/vs/platform/theme/common/colors/quickpickColors.js +10 -10
- package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
- package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
- package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
- package/esm/vs/platform/workspace/common/workspace.js +1 -1
- package/package.json +2 -2
- package/version.txt +1 -1
|
@@ -39,14 +39,6 @@ let MultiDiffEditorWidgetImpl = class MultiDiffEditorWidgetImpl extends Disposab
|
|
|
39
39
|
this._workbenchUIElementFactory = _workbenchUIElementFactory;
|
|
40
40
|
this._parentContextKeyService = _parentContextKeyService;
|
|
41
41
|
this._parentInstantiationService = _parentInstantiationService;
|
|
42
|
-
/**
|
|
43
|
-
* When `true`, the automatic "select the first change" initialization that
|
|
44
|
-
* runs once the view model finishes loading does not move keyboard focus
|
|
45
|
-
* into the editor. Driven by {@link setPreserveFocusOnLoad} so a
|
|
46
|
-
* `preserveFocus` open (e.g. restored in the background or on a session
|
|
47
|
-
* switch) does not steal focus, while a normal user-initiated open does.
|
|
48
|
-
*/
|
|
49
|
-
this._preserveFocusOnLoad = false;
|
|
50
42
|
this._scrollableElements = h('div.scrollContent', [
|
|
51
43
|
h('div@content', {
|
|
52
44
|
style: {
|
|
@@ -196,14 +188,8 @@ let MultiDiffEditorWidgetImpl = class MultiDiffEditorWidgetImpl extends Disposab
|
|
|
196
188
|
if (activeDiffItem) {
|
|
197
189
|
return;
|
|
198
190
|
}
|
|
199
|
-
// Navigate to the first change using the existing navigation
|
|
200
|
-
|
|
201
|
-
// is driven by the last `setViewModel` call: an editor opened
|
|
202
|
-
// with `preserveFocus` (e.g. restored in the background or on a
|
|
203
|
-
// session switch) must not steal focus from wherever the user is
|
|
204
|
-
// (such as the chat input), while a normal user-initiated open
|
|
205
|
-
// focuses the first change so the editor is ready to use.
|
|
206
|
-
this._navigateToChange('next', !this._preserveFocusOnLoad);
|
|
191
|
+
// Navigate to the first change using the existing navigation logic
|
|
192
|
+
this.goToNextChange();
|
|
207
193
|
}
|
|
208
194
|
}));
|
|
209
195
|
this._register(this._register(autorun(reader => {
|
|
@@ -234,7 +220,10 @@ let MultiDiffEditorWidgetImpl = class MultiDiffEditorWidgetImpl extends Disposab
|
|
|
234
220
|
highlightRange(editor, options.range);
|
|
235
221
|
}
|
|
236
222
|
}
|
|
237
|
-
|
|
223
|
+
goToNextChange() {
|
|
224
|
+
this._navigateToChange('next');
|
|
225
|
+
}
|
|
226
|
+
_navigateToChange(direction) {
|
|
238
227
|
const viewItems = this._viewItems.get();
|
|
239
228
|
if (viewItems.length === 0) {
|
|
240
229
|
return;
|
|
@@ -243,7 +232,7 @@ let MultiDiffEditorWidgetImpl = class MultiDiffEditorWidgetImpl extends Disposab
|
|
|
243
232
|
const currentIndex = activeViewModel ? viewItems.findIndex(v => v.viewModel === activeViewModel) : -1;
|
|
244
233
|
// Start with first file if no active item
|
|
245
234
|
if (currentIndex === -1) {
|
|
246
|
-
this._goToFile(0, 'first'
|
|
235
|
+
this._goToFile(0, 'first');
|
|
247
236
|
return;
|
|
248
237
|
}
|
|
249
238
|
// Try current file first - expand if collapsed
|
|
@@ -263,9 +252,9 @@ let MultiDiffEditorWidgetImpl = class MultiDiffEditorWidgetImpl extends Disposab
|
|
|
263
252
|
}
|
|
264
253
|
// Move to next/previous file
|
|
265
254
|
const nextIndex = (currentIndex + (direction === 'next' ? 1 : -1) + viewItems.length) % viewItems.length;
|
|
266
|
-
this._goToFile(nextIndex, direction === 'next' ? 'first' : 'last'
|
|
255
|
+
this._goToFile(nextIndex, direction === 'next' ? 'first' : 'last');
|
|
267
256
|
}
|
|
268
|
-
_goToFile(index, position
|
|
257
|
+
_goToFile(index, position) {
|
|
269
258
|
const item = this._viewItems.get()[index];
|
|
270
259
|
if (item.viewModel.collapsed.get()) {
|
|
271
260
|
item.viewModel.collapsed.set(false, undefined);
|
|
@@ -283,9 +272,7 @@ let MultiDiffEditorWidgetImpl = class MultiDiffEditorWidgetImpl extends Disposab
|
|
|
283
272
|
modifiedEditor.revealLineInCenter(lastChange.modified.startLineNumber);
|
|
284
273
|
}
|
|
285
274
|
}
|
|
286
|
-
|
|
287
|
-
editor?.focus();
|
|
288
|
-
}
|
|
275
|
+
editor?.focus();
|
|
289
276
|
}
|
|
290
277
|
render(reader) {
|
|
291
278
|
const scrollTop = this.scrollTop.read(reader);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts"],"names":[],"mappings":"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","file":"multiDiffEditorWidgetImpl.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 { Dimension, getWindow, h, scheduleAtNextAnimationFrame } from '../../../../base/browser/dom.js';\nimport { SmoothScrollableElement } from '../../../../base/browser/ui/scrollbar/scrollableElement.js';\nimport { compareBy, numberComparator } from '../../../../base/common/arrays.js';\nimport { findFirstMax } from '../../../../base/common/arraysFind.js';\nimport { BugIndicatingError } from '../../../../base/common/errors.js';\nimport { Disposable, IReference, toDisposable } from '../../../../base/common/lifecycle.js';\nimport { IObservable, IReader, ITransaction, autorun, autorunWithStore, derived, disposableObservableValue, globalTransaction, observableFromEvent, observableValue, transaction } from '../../../../base/common/observable.js';\nimport { Scrollable, ScrollbarVisibility } from '../../../../base/common/scrollable.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { localize } from '../../../../nls.js';\nimport { ContextKeyValue, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js';\nimport { OffsetRange } from '../../../common/core/ranges/offsetRange.js';\nimport { IRange } from '../../../common/core/range.js';\nimport { ISelection, Selection } from '../../../common/core/selection.js';\nimport { EditorContextKeys } from '../../../common/editorContextKeys.js';\nimport { ICodeEditor } from '../../editorBrowser.js';\nimport { ObservableElementSizeObserver } from '../diffEditor/utils.js';\nimport { DiffEditorItemTemplate, TemplateData } from './diffEditorItemTemplate.js';\nimport { DocumentDiffItemViewModel, MultiDiffEditorViewModel } from './multiDiffEditorViewModel.js';\nimport { RevealOptions } from './multiDiffEditorWidget.js';\nimport { ObjectPool } from './objectPool.js';\nimport './style.css';\nimport { IWorkbenchUIElementFactory } from './workbenchUIElementFactory.js';\n\nexport class MultiDiffEditorWidgetImpl extends Disposable {\n\tprivate readonly _scrollableElements;\n\n\tprivate readonly _scrollable;\n\n\tprivate readonly _scrollableElement;\n\n\tprivate readonly _elements;\n\n\tprivate readonly _sizeObserver;\n\n\tprivate readonly _objectPool;\n\n\tpublic readonly scrollTop;\n\tpublic readonly scrollLeft;\n\n\tprivate readonly _viewItemsInfo;\n\n\tprivate readonly _viewItems;\n\n\tprivate readonly _spaceBetweenPx;\n\n\tprivate readonly _totalHeight;\n\tpublic readonly activeControl;\n\n\tprivate readonly _contextKeyService;\n\tprivate readonly _instantiationService;\n\n\t/**\n\t * When `true`, the automatic \"select the first change\" initialization that\n\t * runs once the view model finishes loading does not move keyboard focus\n\t * into the editor. Driven by {@link setPreserveFocusOnLoad} so a\n\t * `preserveFocus` open (e.g. restored in the background or on a session\n\t * switch) does not steal focus, while a normal user-initiated open does.\n\t */\n\tprivate _preserveFocusOnLoad = false;\n\n\tconstructor(\n\t\tprivate readonly _element: HTMLElement,\n\t\tprivate readonly _dimension: IObservable<Dimension | undefined>,\n\t\tprivate readonly _viewModel: IObservable<MultiDiffEditorViewModel | undefined>,\n\t\tprivate readonly _workbenchUIElementFactory: IWorkbenchUIElementFactory,\n\t\t@IContextKeyService private readonly _parentContextKeyService: IContextKeyService,\n\t\t@IInstantiationService private readonly _parentInstantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\t\tthis._scrollableElements = h('div.scrollContent', [\n\t\t\th('div@content', {\n\t\t\t\tstyle: {\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t}\n\t\t\t}),\n\t\t\th('div.monaco-editor@overflowWidgetsDomNode', {\n\t\t\t}),\n\t\t]);\n\t\tthis._scrollable = this._register(new Scrollable({\n\t\t\tforceIntegerValues: false,\n\t\t\tscheduleAtNextAnimationFrame: (cb) => scheduleAtNextAnimationFrame(getWindow(this._element), cb),\n\t\t\tsmoothScrollDuration: 100,\n\t\t}));\n\t\tthis._scrollableElement = this._register(new SmoothScrollableElement(this._scrollableElements.root, {\n\t\t\tvertical: ScrollbarVisibility.Auto,\n\t\t\thorizontal: ScrollbarVisibility.Auto,\n\t\t\tuseShadows: false,\n\t\t}, this._scrollable));\n\t\tthis._elements = h('div.monaco-component.multiDiffEditor', {}, [\n\t\t\th('div', {}, [this._scrollableElement.getDomNode()]),\n\t\t\th('div.placeholder@placeholder', {}, [h('div')]),\n\t\t]);\n\t\tthis._sizeObserver = this._register(new ObservableElementSizeObserver(this._element, undefined));\n\t\tthis._objectPool = this._register(new ObjectPool<TemplateData, DiffEditorItemTemplate>((data) => {\n\t\t\tconst template = this._instantiationService.createInstance(\n\t\t\t\tDiffEditorItemTemplate,\n\t\t\t\tthis._scrollableElements.content,\n\t\t\t\tthis._scrollableElements.overflowWidgetsDomNode,\n\t\t\t\tthis._workbenchUIElementFactory\n\t\t\t);\n\t\t\ttemplate.setData(data);\n\t\t\treturn template;\n\t\t}));\n\t\tthis.scrollTop = observableFromEvent(this, this._scrollableElement.onScroll, () => /** @description scrollTop */ this._scrollableElement.getScrollPosition().scrollTop);\n\t\tthis.scrollLeft = observableFromEvent(this, this._scrollableElement.onScroll, () => /** @description scrollLeft */ this._scrollableElement.getScrollPosition().scrollLeft);\n\t\tthis._viewItemsInfo = derived<{ items: readonly VirtualizedViewItem[]; getItem: (viewModel: DocumentDiffItemViewModel) => VirtualizedViewItem }>(this,\n\t\t\t(reader) => {\n\t\t\t\tconst vm = this._viewModel.read(reader);\n\t\t\t\tif (!vm) {\n\t\t\t\t\treturn { items: [], getItem: _d => { throw new BugIndicatingError(); } };\n\t\t\t\t}\n\t\t\t\tconst viewModels = vm.items.read(reader);\n\t\t\t\tconst map = new Map<DocumentDiffItemViewModel, VirtualizedViewItem>();\n\t\t\t\tconst items = viewModels.map(d => {\n\t\t\t\t\tconst item = reader.store.add(new VirtualizedViewItem(d, this._objectPool, this.scrollLeft, delta => {\n\t\t\t\t\t\tthis._scrollableElement.setScrollPosition({ scrollTop: this._scrollableElement.getScrollPosition().scrollTop + delta });\n\t\t\t\t\t}));\n\t\t\t\t\tconst data = this._lastDocStates?.[item.getKey()];\n\t\t\t\t\tif (data) {\n\t\t\t\t\t\ttransaction(tx => {\n\t\t\t\t\t\t\titem.setViewState(data, tx);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tmap.set(d, item);\n\t\t\t\t\treturn item;\n\t\t\t\t});\n\t\t\t\treturn { items, getItem: d => map.get(d)! };\n\t\t\t}\n\t\t);\n\t\tthis._viewItems = this._viewItemsInfo.map(this, items => items.items);\n\t\tthis._spaceBetweenPx = 0;\n\t\tthis._totalHeight = this._viewItems.map(this, (items, reader) => items.reduce((r, i) => r + i.contentHeight.read(reader) + this._spaceBetweenPx, 0));\n\t\tthis.activeControl = derived(this, reader => {\n\t\t\tconst activeDiffItem = this._viewModel.read(reader)?.activeDiffItem.read(reader);\n\t\t\tif (!activeDiffItem) { return undefined; }\n\t\t\tconst viewItem = this._viewItemsInfo.read(reader).getItem(activeDiffItem);\n\t\t\treturn viewItem.template.read(reader)?.editor;\n\t\t});\n\t\tthis._contextKeyService = this._register(this._parentContextKeyService.createScoped(this._element));\n\t\tthis._instantiationService = this._register(this._parentInstantiationService.createChild(\n\t\t\tnew ServiceCollection([IContextKeyService, this._contextKeyService])\n\t\t));\n\n\t\tthis._contextKeyService.createKey(EditorContextKeys.inMultiDiffEditor.key, true);\n\n\t\tthis._lastDocStates = {};\n\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tconst viewModel = this._viewModel.read(reader);\n\t\t\tif (viewModel && viewModel.contextKeys) {\n\t\t\t\tfor (const [key, value] of Object.entries(viewModel.contextKeys)) {\n\t\t\t\t\tconst contextKey = this._contextKeyService.createKey<ContextKeyValue>(key, undefined);\n\t\t\t\t\tcontextKey.set(value);\n\t\t\t\t\tstore.add(toDisposable(() => contextKey.reset()));\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tconst ctxAllCollapsed = this._parentContextKeyService.createKey<boolean>(EditorContextKeys.multiDiffEditorAllCollapsed.key, false);\n\t\tthis._register(autorun((reader) => {\n\t\t\tconst viewModel = this._viewModel.read(reader);\n\t\t\tif (viewModel) {\n\t\t\t\tconst allCollapsed = viewModel.items.read(reader).every(item => item.collapsed.read(reader));\n\t\t\t\tctxAllCollapsed.set(allCollapsed);\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(autorun((reader) => {\n\t\t\t/** @description Update widget dimension */\n\t\t\tconst dimension = this._dimension.read(reader);\n\t\t\tthis._sizeObserver.observe(dimension);\n\t\t}));\n\n\t\tconst placeholderMessage = derived(reader => {\n\t\t\tconst items = this._viewItems.read(reader);\n\t\t\tif (items.length > 0) { return undefined; }\n\n\t\t\tconst vm = this._viewModel.read(reader);\n\t\t\treturn (!vm || vm.isLoading.read(reader))\n\t\t\t\t? localize('loading', 'Loading...')\n\t\t\t\t: localize('noChangedFiles', 'No Changed Files');\n\t\t});\n\n\t\tthis._register(autorun((reader) => {\n\t\t\tconst message = placeholderMessage.read(reader);\n\t\t\tthis._elements.placeholder.innerText = message ?? '';\n\t\t\tthis._elements.placeholder.classList.toggle('visible', !!message);\n\t\t}));\n\n\t\tthis._scrollableElements.content.style.position = 'relative';\n\n\t\tthis._register(autorun((reader) => {\n\t\t\t/** @description Update scroll dimensions */\n\t\t\tconst height = this._sizeObserver.height.read(reader);\n\t\t\tthis._scrollableElements.root.style.height = `${height}px`;\n\t\t\tconst totalHeight = this._totalHeight.read(reader);\n\t\t\tthis._scrollableElements.content.style.height = `${totalHeight}px`;\n\n\t\t\tconst width = this._sizeObserver.width.read(reader);\n\n\t\t\tlet scrollWidth = width;\n\t\t\tconst viewItems = this._viewItems.read(reader);\n\t\t\tconst max = findFirstMax(viewItems, compareBy(i => i.maxScroll.read(reader).maxScroll, numberComparator));\n\t\t\tif (max) {\n\t\t\t\tconst maxScroll = max.maxScroll.read(reader);\n\t\t\t\tscrollWidth = width + maxScroll.maxScroll;\n\t\t\t}\n\n\t\t\tthis._scrollableElement.setScrollDimensions({\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\tscrollHeight: totalHeight,\n\t\t\t\tscrollWidth,\n\t\t\t});\n\t\t}));\n\n\t\t_element.replaceChildren(this._elements.root);\n\t\tthis._register(toDisposable(() => {\n\t\t\t_element.replaceChildren();\n\t\t}));\n\n\t\t// Automatically select the first change in the first file when items are loaded\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description Initialize first change */\n\t\t\tconst viewModel = this._viewModel.read(reader);\n\t\t\tif (!viewModel) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Only initialize when loading is complete\n\t\t\tif (!viewModel.isLoading.read(reader)) {\n\t\t\t\tconst items = viewModel.items.read(reader);\n\t\t\t\tif (items.length === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Only initialize if there's no active item yet\n\t\t\t\tconst activeDiffItem = viewModel.activeDiffItem.read(reader);\n\t\t\t\tif (activeDiffItem) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Navigate to the first change using the existing navigation\n\t\t\t\t// logic. Whether this also moves keyboard focus into the editor\n\t\t\t\t// is driven by the last `setViewModel` call: an editor opened\n\t\t\t\t// with `preserveFocus` (e.g. restored in the background or on a\n\t\t\t\t// session switch) must not steal focus from wherever the user is\n\t\t\t\t// (such as the chat input), while a normal user-initiated open\n\t\t\t\t// focuses the first change so the editor is ready to use.\n\t\t\t\tthis._navigateToChange('next', !this._preserveFocusOnLoad);\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this._register(autorun(reader => {\n\t\t\t/** @description Render all */\n\t\t\tglobalTransaction(tx => {\n\t\t\t\tthis.render(reader);\n\t\t\t});\n\t\t})));\n\t}\n\tpublic reveal(resource: IMultiDiffResourceId, options?: RevealOptions): void {\n\t\tconst viewItems = this._viewItems.get();\n\t\tconst index = viewItems.findIndex(\n\t\t\t(item) => item.viewModel.originalUri?.toString() === resource.original?.toString()\n\t\t\t\t&& item.viewModel.modifiedUri?.toString() === resource.modified?.toString()\n\t\t);\n\t\tif (index === -1) {\n\t\t\tthrow new BugIndicatingError('Resource not found in diff editor');\n\t\t}\n\t\tconst viewItem = viewItems[index];\n\t\tthis._viewModel.get()!.activeDiffItem.setCache(viewItem.viewModel, undefined);\n\n\t\tlet scrollTop = 0;\n\t\tfor (let i = 0; i < index; i++) {\n\t\t\tscrollTop += viewItems[i].contentHeight.get() + this._spaceBetweenPx;\n\t\t}\n\t\tthis._scrollableElement.setScrollPosition({ scrollTop });\n\n\t\tconst diffEditor = viewItem.template.get()?.editor;\n\t\tconst editor = 'original' in resource ? diffEditor?.getOriginalEditor() : diffEditor?.getModifiedEditor();\n\t\tif (editor && options?.range) {\n\t\t\teditor.revealRangeInCenter(options.range);\n\t\t\thighlightRange(editor, options.range);\n\t\t}\n\t}\n\n\t/** This accounts for documents that are not loaded yet. */\n\tprivate _lastDocStates: IMultiDiffEditorViewState['docStates'];\n\n\tprivate _navigateToChange(direction: 'next' | 'previous', focusEditor: boolean = true): void {\n\t\tconst viewItems = this._viewItems.get();\n\t\tif (viewItems.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst activeViewModel = this._viewModel.get()?.activeDiffItem.get();\n\t\tconst currentIndex = activeViewModel ? viewItems.findIndex(v => v.viewModel === activeViewModel) : -1;\n\n\t\t// Start with first file if no active item\n\t\tif (currentIndex === -1) {\n\t\t\tthis._goToFile(0, 'first', focusEditor);\n\t\t\treturn;\n\t\t}\n\n\t\t// Try current file first - expand if collapsed\n\t\tconst currentItem = viewItems[currentIndex];\n\t\tif (currentItem.viewModel.collapsed.get()) {\n\t\t\tcurrentItem.viewModel.collapsed.set(false, undefined);\n\t\t}\n\n\t\tconst editor = currentItem.template.get()?.editor;\n\t\tif (editor?.getDiffComputationResult()?.changes2?.length) {\n\t\t\tconst pos = editor.getModifiedEditor().getPosition()?.lineNumber || 1;\n\t\t\tconst changes = editor.getDiffComputationResult()!.changes2!;\n\t\t\tconst hasNext = direction === 'next' ? changes.some(c => c.modified.startLineNumber > pos) : changes.some(c => c.modified.endLineNumberExclusive <= pos);\n\n\t\t\tif (hasNext) {\n\t\t\t\teditor.goToDiff(direction);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Move to next/previous file\n\t\tconst nextIndex = (currentIndex + (direction === 'next' ? 1 : -1) + viewItems.length) % viewItems.length;\n\t\tthis._goToFile(nextIndex, direction === 'next' ? 'first' : 'last', focusEditor);\n\t}\n\n\tprivate _goToFile(index: number, position: 'first' | 'last', focusEditor: boolean = true): void {\n\t\tconst item = this._viewItems.get()[index];\n\t\tif (item.viewModel.collapsed.get()) {\n\t\t\titem.viewModel.collapsed.set(false, undefined);\n\t\t}\n\n\t\tthis.reveal({ original: item.viewModel.originalUri, modified: item.viewModel.modifiedUri });\n\n\t\tconst editor = item.template.get()?.editor;\n\t\tif (editor?.getDiffComputationResult()?.changes2?.length) {\n\t\t\tif (position === 'first') {\n\t\t\t\teditor.revealFirstDiff();\n\t\t\t} else {\n\t\t\t\tconst lastChange = editor.getDiffComputationResult()!.changes2!.at(-1)!;\n\t\t\t\tconst modifiedEditor = editor.getModifiedEditor();\n\t\t\t\tmodifiedEditor.setPosition({ lineNumber: lastChange.modified.startLineNumber, column: 1 });\n\t\t\t\tmodifiedEditor.revealLineInCenter(lastChange.modified.startLineNumber);\n\t\t\t}\n\t\t}\n\t\tif (focusEditor) {\n\t\t\teditor?.focus();\n\t\t}\n\t}\n\n\tprivate render(reader: IReader | undefined) {\n\t\tconst scrollTop = this.scrollTop.read(reader);\n\t\tlet contentScrollOffsetToScrollOffset = 0;\n\t\tlet itemHeightSumBefore = 0;\n\t\tlet itemContentHeightSumBefore = 0;\n\t\tconst viewPortHeight = this._sizeObserver.height.read(reader);\n\t\tconst contentViewPort = OffsetRange.ofStartAndLength(scrollTop, viewPortHeight);\n\n\t\tconst width = this._sizeObserver.width.read(reader);\n\n\t\tfor (const v of this._viewItems.read(reader)) {\n\t\t\tconst itemContentHeight = v.contentHeight.read(reader);\n\t\t\tconst itemHeight = Math.min(itemContentHeight, viewPortHeight);\n\t\t\tconst itemRange = OffsetRange.ofStartAndLength(itemHeightSumBefore, itemHeight);\n\t\t\tconst itemContentRange = OffsetRange.ofStartAndLength(itemContentHeightSumBefore, itemContentHeight);\n\n\t\t\tif (itemContentRange.isBefore(contentViewPort)) {\n\t\t\t\tcontentScrollOffsetToScrollOffset -= itemContentHeight - itemHeight;\n\t\t\t\tv.hide();\n\t\t\t} else if (itemContentRange.isAfter(contentViewPort)) {\n\t\t\t\tv.hide();\n\t\t\t} else {\n\t\t\t\tconst scroll = Math.max(0, Math.min(contentViewPort.start - itemContentRange.start, itemContentHeight - itemHeight));\n\t\t\t\tcontentScrollOffsetToScrollOffset -= scroll;\n\t\t\t\tconst viewPort = OffsetRange.ofStartAndLength(scrollTop + contentScrollOffsetToScrollOffset, viewPortHeight);\n\t\t\t\tv.render(itemRange, scroll, width, viewPort);\n\t\t\t}\n\n\t\t\titemHeightSumBefore += itemHeight + this._spaceBetweenPx;\n\t\t\titemContentHeightSumBefore += itemContentHeight + this._spaceBetweenPx;\n\t\t}\n\n\t\tthis._scrollableElements.content.style.transform = `translateY(${-(scrollTop + contentScrollOffsetToScrollOffset)}px)`;\n\t}\n}\n\nfunction highlightRange(targetEditor: ICodeEditor, range: IRange) {\n\tconst modelNow = targetEditor.getModel();\n\tconst decorations = targetEditor.createDecorationsCollection([{ range, options: { description: 'symbol-navigate-action-highlight', className: 'symbolHighlight' } }]);\n\tsetTimeout(() => {\n\t\tif (targetEditor.getModel() === modelNow) {\n\t\t\tdecorations.clear();\n\t\t}\n\t}, 350);\n}\n\nexport interface IMultiDiffEditorViewState {\n\tdocStates?: Record<string, IMultiDiffDocState>;\n}\n\ninterface IMultiDiffDocState {\n\tcollapsed: boolean;\n\tselections?: ISelection[];\n}\n\nexport type IMultiDiffResourceId = { original: URI | undefined; modified: URI | undefined };\n\nclass VirtualizedViewItem extends Disposable {\n\tprivate readonly _templateRef = this._register(disposableObservableValue<IReference<DiffEditorItemTemplate> | undefined>(this, undefined));\n\n\tpublic readonly contentHeight = derived(this, reader =>\n\t\tthis._templateRef.read(reader)?.object.contentHeight?.read(reader) ?? this.viewModel.lastTemplateData.read(reader).contentHeight\n\t);\n\n\tpublic readonly maxScroll = derived(this, reader => this._templateRef.read(reader)?.object.maxScroll.read(reader) ?? { maxScroll: 0, scrollWidth: 0 });\n\n\tpublic readonly template = derived(this, reader => this._templateRef.read(reader)?.object);\n\tprivate _isHidden = observableValue(this, false);\n\n\tprivate readonly _isFocused = derived(this, reader => this.template.read(reader)?.isFocused.read(reader) ?? false);\n\n\tconstructor(\n\t\tpublic readonly viewModel: DocumentDiffItemViewModel,\n\t\tprivate readonly _objectPool: ObjectPool<TemplateData, DiffEditorItemTemplate>,\n\t\tprivate readonly _scrollLeft: IObservable<number>,\n\t\tprivate readonly _deltaScrollVertical: (delta: number) => void,\n\t) {\n\t\tsuper();\n\n\t\tthis.viewModel.setIsFocused(this._isFocused, undefined);\n\n\t\tthis._register(autorun((reader) => {\n\t\t\tconst scrollLeft = this._scrollLeft.read(reader);\n\t\t\tthis._templateRef.read(reader)?.object.setScrollLeft(scrollLeft);\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst ref = this._templateRef.read(reader);\n\t\t\tif (!ref) { return; }\n\t\t\tconst isHidden = this._isHidden.read(reader);\n\t\t\tif (!isHidden) { return; }\n\n\t\t\tconst isFocused = ref.object.isFocused.read(reader);\n\t\t\tif (isFocused) { return; }\n\n\t\t\tthis._clear();\n\t\t}));\n\t}\n\n\toverride dispose(): void {\n\t\tthis._clear();\n\t\tsuper.dispose();\n\t}\n\n\tpublic override toString(): string {\n\t\treturn `VirtualViewItem(${this.viewModel.documentDiffItem.modified?.uri.toString()})`;\n\t}\n\n\tpublic getKey(): string {\n\t\treturn this.viewModel.getKey();\n\t}\n\n\tpublic setViewState(viewState: IMultiDiffDocState, tx: ITransaction): void {\n\t\tthis.viewModel.collapsed.set(viewState.collapsed, tx);\n\n\t\tthis._updateTemplateData(tx);\n\t\tconst data = this.viewModel.lastTemplateData.get();\n\t\tconst selections = viewState.selections?.map(Selection.liftSelection);\n\t\tthis.viewModel.lastTemplateData.set({\n\t\t\t...data,\n\t\t\tselections,\n\t\t}, tx);\n\t\tconst ref = this._templateRef.get();\n\t\tif (ref) {\n\t\t\tif (selections) {\n\t\t\t\tref.object.editor.setSelections(selections);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _updateTemplateData(tx: ITransaction): void {\n\t\tconst ref = this._templateRef.get();\n\t\tif (!ref) { return; }\n\t\tthis.viewModel.lastTemplateData.set({\n\t\t\tcontentHeight: ref.object.contentHeight.get(),\n\t\t\tselections: ref.object.editor.getSelections() ?? undefined,\n\t\t}, tx);\n\t}\n\n\tprivate _clear(): void {\n\t\tconst ref = this._templateRef.get();\n\t\tif (!ref) { return; }\n\t\ttransaction(tx => {\n\t\t\tthis._updateTemplateData(tx);\n\t\t\tref.object.hide();\n\t\t\tthis._templateRef.set(undefined, tx);\n\t\t});\n\t}\n\n\tpublic hide(): void {\n\t\tthis._isHidden.set(true, undefined);\n\t}\n\n\tpublic render(verticalSpace: OffsetRange, offset: number, width: number, viewPort: OffsetRange): void {\n\t\tthis._isHidden.set(false, undefined);\n\n\t\tlet ref = this._templateRef.get();\n\t\tif (!ref) {\n\t\t\tref = this._objectPool.getUnusedObj(new TemplateData(this.viewModel, this._deltaScrollVertical));\n\t\t\tthis._templateRef.set(ref, undefined);\n\n\t\t\tconst selections = this.viewModel.lastTemplateData.get().selections;\n\t\t\tif (selections) {\n\t\t\t\tref.object.editor.setSelections(selections);\n\t\t\t}\n\t\t}\n\t\tref.object.render(verticalSpace, width, offset, viewPort);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.ts"],"names":[],"mappings":"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","file":"multiDiffEditorWidgetImpl.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 { Dimension, getWindow, h, scheduleAtNextAnimationFrame } from '../../../../base/browser/dom.js';\nimport { SmoothScrollableElement } from '../../../../base/browser/ui/scrollbar/scrollableElement.js';\nimport { compareBy, numberComparator } from '../../../../base/common/arrays.js';\nimport { findFirstMax } from '../../../../base/common/arraysFind.js';\nimport { BugIndicatingError } from '../../../../base/common/errors.js';\nimport { Disposable, IReference, toDisposable } from '../../../../base/common/lifecycle.js';\nimport { IObservable, IReader, ITransaction, autorun, autorunWithStore, derived, disposableObservableValue, globalTransaction, observableFromEvent, observableValue, transaction } from '../../../../base/common/observable.js';\nimport { Scrollable, ScrollbarVisibility } from '../../../../base/common/scrollable.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { localize } from '../../../../nls.js';\nimport { ContextKeyValue, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js';\nimport { OffsetRange } from '../../../common/core/ranges/offsetRange.js';\nimport { IRange } from '../../../common/core/range.js';\nimport { ISelection, Selection } from '../../../common/core/selection.js';\nimport { EditorContextKeys } from '../../../common/editorContextKeys.js';\nimport { ICodeEditor } from '../../editorBrowser.js';\nimport { ObservableElementSizeObserver } from '../diffEditor/utils.js';\nimport { DiffEditorItemTemplate, TemplateData } from './diffEditorItemTemplate.js';\nimport { DocumentDiffItemViewModel, MultiDiffEditorViewModel } from './multiDiffEditorViewModel.js';\nimport { RevealOptions } from './multiDiffEditorWidget.js';\nimport { ObjectPool } from './objectPool.js';\nimport './style.css';\nimport { IWorkbenchUIElementFactory } from './workbenchUIElementFactory.js';\n\nexport class MultiDiffEditorWidgetImpl extends Disposable {\n\tprivate readonly _scrollableElements;\n\n\tprivate readonly _scrollable;\n\n\tprivate readonly _scrollableElement;\n\n\tprivate readonly _elements;\n\n\tprivate readonly _sizeObserver;\n\n\tprivate readonly _objectPool;\n\n\tpublic readonly scrollTop;\n\tpublic readonly scrollLeft;\n\n\tprivate readonly _viewItemsInfo;\n\n\tprivate readonly _viewItems;\n\n\tprivate readonly _spaceBetweenPx;\n\n\tprivate readonly _totalHeight;\n\tpublic readonly activeControl;\n\n\tprivate readonly _contextKeyService;\n\tprivate readonly _instantiationService;\n\n\tconstructor(\n\t\tprivate readonly _element: HTMLElement,\n\t\tprivate readonly _dimension: IObservable<Dimension | undefined>,\n\t\tprivate readonly _viewModel: IObservable<MultiDiffEditorViewModel | undefined>,\n\t\tprivate readonly _workbenchUIElementFactory: IWorkbenchUIElementFactory,\n\t\t@IContextKeyService private readonly _parentContextKeyService: IContextKeyService,\n\t\t@IInstantiationService private readonly _parentInstantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\t\tthis._scrollableElements = h('div.scrollContent', [\n\t\t\th('div@content', {\n\t\t\t\tstyle: {\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t}\n\t\t\t}),\n\t\t\th('div.monaco-editor@overflowWidgetsDomNode', {\n\t\t\t}),\n\t\t]);\n\t\tthis._scrollable = this._register(new Scrollable({\n\t\t\tforceIntegerValues: false,\n\t\t\tscheduleAtNextAnimationFrame: (cb) => scheduleAtNextAnimationFrame(getWindow(this._element), cb),\n\t\t\tsmoothScrollDuration: 100,\n\t\t}));\n\t\tthis._scrollableElement = this._register(new SmoothScrollableElement(this._scrollableElements.root, {\n\t\t\tvertical: ScrollbarVisibility.Auto,\n\t\t\thorizontal: ScrollbarVisibility.Auto,\n\t\t\tuseShadows: false,\n\t\t}, this._scrollable));\n\t\tthis._elements = h('div.monaco-component.multiDiffEditor', {}, [\n\t\t\th('div', {}, [this._scrollableElement.getDomNode()]),\n\t\t\th('div.placeholder@placeholder', {}, [h('div')]),\n\t\t]);\n\t\tthis._sizeObserver = this._register(new ObservableElementSizeObserver(this._element, undefined));\n\t\tthis._objectPool = this._register(new ObjectPool<TemplateData, DiffEditorItemTemplate>((data) => {\n\t\t\tconst template = this._instantiationService.createInstance(\n\t\t\t\tDiffEditorItemTemplate,\n\t\t\t\tthis._scrollableElements.content,\n\t\t\t\tthis._scrollableElements.overflowWidgetsDomNode,\n\t\t\t\tthis._workbenchUIElementFactory\n\t\t\t);\n\t\t\ttemplate.setData(data);\n\t\t\treturn template;\n\t\t}));\n\t\tthis.scrollTop = observableFromEvent(this, this._scrollableElement.onScroll, () => /** @description scrollTop */ this._scrollableElement.getScrollPosition().scrollTop);\n\t\tthis.scrollLeft = observableFromEvent(this, this._scrollableElement.onScroll, () => /** @description scrollLeft */ this._scrollableElement.getScrollPosition().scrollLeft);\n\t\tthis._viewItemsInfo = derived<{ items: readonly VirtualizedViewItem[]; getItem: (viewModel: DocumentDiffItemViewModel) => VirtualizedViewItem }>(this,\n\t\t\t(reader) => {\n\t\t\t\tconst vm = this._viewModel.read(reader);\n\t\t\t\tif (!vm) {\n\t\t\t\t\treturn { items: [], getItem: _d => { throw new BugIndicatingError(); } };\n\t\t\t\t}\n\t\t\t\tconst viewModels = vm.items.read(reader);\n\t\t\t\tconst map = new Map<DocumentDiffItemViewModel, VirtualizedViewItem>();\n\t\t\t\tconst items = viewModels.map(d => {\n\t\t\t\t\tconst item = reader.store.add(new VirtualizedViewItem(d, this._objectPool, this.scrollLeft, delta => {\n\t\t\t\t\t\tthis._scrollableElement.setScrollPosition({ scrollTop: this._scrollableElement.getScrollPosition().scrollTop + delta });\n\t\t\t\t\t}));\n\t\t\t\t\tconst data = this._lastDocStates?.[item.getKey()];\n\t\t\t\t\tif (data) {\n\t\t\t\t\t\ttransaction(tx => {\n\t\t\t\t\t\t\titem.setViewState(data, tx);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tmap.set(d, item);\n\t\t\t\t\treturn item;\n\t\t\t\t});\n\t\t\t\treturn { items, getItem: d => map.get(d)! };\n\t\t\t}\n\t\t);\n\t\tthis._viewItems = this._viewItemsInfo.map(this, items => items.items);\n\t\tthis._spaceBetweenPx = 0;\n\t\tthis._totalHeight = this._viewItems.map(this, (items, reader) => items.reduce((r, i) => r + i.contentHeight.read(reader) + this._spaceBetweenPx, 0));\n\t\tthis.activeControl = derived(this, reader => {\n\t\t\tconst activeDiffItem = this._viewModel.read(reader)?.activeDiffItem.read(reader);\n\t\t\tif (!activeDiffItem) { return undefined; }\n\t\t\tconst viewItem = this._viewItemsInfo.read(reader).getItem(activeDiffItem);\n\t\t\treturn viewItem.template.read(reader)?.editor;\n\t\t});\n\t\tthis._contextKeyService = this._register(this._parentContextKeyService.createScoped(this._element));\n\t\tthis._instantiationService = this._register(this._parentInstantiationService.createChild(\n\t\t\tnew ServiceCollection([IContextKeyService, this._contextKeyService])\n\t\t));\n\n\t\tthis._contextKeyService.createKey(EditorContextKeys.inMultiDiffEditor.key, true);\n\n\t\tthis._lastDocStates = {};\n\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tconst viewModel = this._viewModel.read(reader);\n\t\t\tif (viewModel && viewModel.contextKeys) {\n\t\t\t\tfor (const [key, value] of Object.entries(viewModel.contextKeys)) {\n\t\t\t\t\tconst contextKey = this._contextKeyService.createKey<ContextKeyValue>(key, undefined);\n\t\t\t\t\tcontextKey.set(value);\n\t\t\t\t\tstore.add(toDisposable(() => contextKey.reset()));\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tconst ctxAllCollapsed = this._parentContextKeyService.createKey<boolean>(EditorContextKeys.multiDiffEditorAllCollapsed.key, false);\n\t\tthis._register(autorun((reader) => {\n\t\t\tconst viewModel = this._viewModel.read(reader);\n\t\t\tif (viewModel) {\n\t\t\t\tconst allCollapsed = viewModel.items.read(reader).every(item => item.collapsed.read(reader));\n\t\t\t\tctxAllCollapsed.set(allCollapsed);\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(autorun((reader) => {\n\t\t\t/** @description Update widget dimension */\n\t\t\tconst dimension = this._dimension.read(reader);\n\t\t\tthis._sizeObserver.observe(dimension);\n\t\t}));\n\n\t\tconst placeholderMessage = derived(reader => {\n\t\t\tconst items = this._viewItems.read(reader);\n\t\t\tif (items.length > 0) { return undefined; }\n\n\t\t\tconst vm = this._viewModel.read(reader);\n\t\t\treturn (!vm || vm.isLoading.read(reader))\n\t\t\t\t? localize('loading', 'Loading...')\n\t\t\t\t: localize('noChangedFiles', 'No Changed Files');\n\t\t});\n\n\t\tthis._register(autorun((reader) => {\n\t\t\tconst message = placeholderMessage.read(reader);\n\t\t\tthis._elements.placeholder.innerText = message ?? '';\n\t\t\tthis._elements.placeholder.classList.toggle('visible', !!message);\n\t\t}));\n\n\t\tthis._scrollableElements.content.style.position = 'relative';\n\n\t\tthis._register(autorun((reader) => {\n\t\t\t/** @description Update scroll dimensions */\n\t\t\tconst height = this._sizeObserver.height.read(reader);\n\t\t\tthis._scrollableElements.root.style.height = `${height}px`;\n\t\t\tconst totalHeight = this._totalHeight.read(reader);\n\t\t\tthis._scrollableElements.content.style.height = `${totalHeight}px`;\n\n\t\t\tconst width = this._sizeObserver.width.read(reader);\n\n\t\t\tlet scrollWidth = width;\n\t\t\tconst viewItems = this._viewItems.read(reader);\n\t\t\tconst max = findFirstMax(viewItems, compareBy(i => i.maxScroll.read(reader).maxScroll, numberComparator));\n\t\t\tif (max) {\n\t\t\t\tconst maxScroll = max.maxScroll.read(reader);\n\t\t\t\tscrollWidth = width + maxScroll.maxScroll;\n\t\t\t}\n\n\t\t\tthis._scrollableElement.setScrollDimensions({\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\tscrollHeight: totalHeight,\n\t\t\t\tscrollWidth,\n\t\t\t});\n\t\t}));\n\n\t\t_element.replaceChildren(this._elements.root);\n\t\tthis._register(toDisposable(() => {\n\t\t\t_element.replaceChildren();\n\t\t}));\n\n\t\t// Automatically select the first change in the first file when items are loaded\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description Initialize first change */\n\t\t\tconst viewModel = this._viewModel.read(reader);\n\t\t\tif (!viewModel) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Only initialize when loading is complete\n\t\t\tif (!viewModel.isLoading.read(reader)) {\n\t\t\t\tconst items = viewModel.items.read(reader);\n\t\t\t\tif (items.length === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Only initialize if there's no active item yet\n\t\t\t\tconst activeDiffItem = viewModel.activeDiffItem.read(reader);\n\t\t\t\tif (activeDiffItem) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Navigate to the first change using the existing navigation logic\n\t\t\t\tthis.goToNextChange();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this._register(autorun(reader => {\n\t\t\t/** @description Render all */\n\t\t\tglobalTransaction(tx => {\n\t\t\t\tthis.render(reader);\n\t\t\t});\n\t\t})));\n\t}\n\tpublic reveal(resource: IMultiDiffResourceId, options?: RevealOptions): void {\n\t\tconst viewItems = this._viewItems.get();\n\t\tconst index = viewItems.findIndex(\n\t\t\t(item) => item.viewModel.originalUri?.toString() === resource.original?.toString()\n\t\t\t\t&& item.viewModel.modifiedUri?.toString() === resource.modified?.toString()\n\t\t);\n\t\tif (index === -1) {\n\t\t\tthrow new BugIndicatingError('Resource not found in diff editor');\n\t\t}\n\t\tconst viewItem = viewItems[index];\n\t\tthis._viewModel.get()!.activeDiffItem.setCache(viewItem.viewModel, undefined);\n\n\t\tlet scrollTop = 0;\n\t\tfor (let i = 0; i < index; i++) {\n\t\t\tscrollTop += viewItems[i].contentHeight.get() + this._spaceBetweenPx;\n\t\t}\n\t\tthis._scrollableElement.setScrollPosition({ scrollTop });\n\n\t\tconst diffEditor = viewItem.template.get()?.editor;\n\t\tconst editor = 'original' in resource ? diffEditor?.getOriginalEditor() : diffEditor?.getModifiedEditor();\n\t\tif (editor && options?.range) {\n\t\t\teditor.revealRangeInCenter(options.range);\n\t\t\thighlightRange(editor, options.range);\n\t\t}\n\t}\n\n\t/** This accounts for documents that are not loaded yet. */\n\tprivate _lastDocStates: IMultiDiffEditorViewState['docStates'];\n\n\tpublic goToNextChange(): void {\n\t\tthis._navigateToChange('next');\n\t}\n\n\tprivate _navigateToChange(direction: 'next' | 'previous'): void {\n\t\tconst viewItems = this._viewItems.get();\n\t\tif (viewItems.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst activeViewModel = this._viewModel.get()?.activeDiffItem.get();\n\t\tconst currentIndex = activeViewModel ? viewItems.findIndex(v => v.viewModel === activeViewModel) : -1;\n\n\t\t// Start with first file if no active item\n\t\tif (currentIndex === -1) {\n\t\t\tthis._goToFile(0, 'first');\n\t\t\treturn;\n\t\t}\n\n\t\t// Try current file first - expand if collapsed\n\t\tconst currentItem = viewItems[currentIndex];\n\t\tif (currentItem.viewModel.collapsed.get()) {\n\t\t\tcurrentItem.viewModel.collapsed.set(false, undefined);\n\t\t}\n\n\t\tconst editor = currentItem.template.get()?.editor;\n\t\tif (editor?.getDiffComputationResult()?.changes2?.length) {\n\t\t\tconst pos = editor.getModifiedEditor().getPosition()?.lineNumber || 1;\n\t\t\tconst changes = editor.getDiffComputationResult()!.changes2!;\n\t\t\tconst hasNext = direction === 'next' ? changes.some(c => c.modified.startLineNumber > pos) : changes.some(c => c.modified.endLineNumberExclusive <= pos);\n\n\t\t\tif (hasNext) {\n\t\t\t\teditor.goToDiff(direction);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Move to next/previous file\n\t\tconst nextIndex = (currentIndex + (direction === 'next' ? 1 : -1) + viewItems.length) % viewItems.length;\n\t\tthis._goToFile(nextIndex, direction === 'next' ? 'first' : 'last');\n\t}\n\n\tprivate _goToFile(index: number, position: 'first' | 'last'): void {\n\t\tconst item = this._viewItems.get()[index];\n\t\tif (item.viewModel.collapsed.get()) {\n\t\t\titem.viewModel.collapsed.set(false, undefined);\n\t\t}\n\n\t\tthis.reveal({ original: item.viewModel.originalUri, modified: item.viewModel.modifiedUri });\n\n\t\tconst editor = item.template.get()?.editor;\n\t\tif (editor?.getDiffComputationResult()?.changes2?.length) {\n\t\t\tif (position === 'first') {\n\t\t\t\teditor.revealFirstDiff();\n\t\t\t} else {\n\t\t\t\tconst lastChange = editor.getDiffComputationResult()!.changes2!.at(-1)!;\n\t\t\t\tconst modifiedEditor = editor.getModifiedEditor();\n\t\t\t\tmodifiedEditor.setPosition({ lineNumber: lastChange.modified.startLineNumber, column: 1 });\n\t\t\t\tmodifiedEditor.revealLineInCenter(lastChange.modified.startLineNumber);\n\t\t\t}\n\t\t}\n\t\teditor?.focus();\n\t}\n\n\tprivate render(reader: IReader | undefined) {\n\t\tconst scrollTop = this.scrollTop.read(reader);\n\t\tlet contentScrollOffsetToScrollOffset = 0;\n\t\tlet itemHeightSumBefore = 0;\n\t\tlet itemContentHeightSumBefore = 0;\n\t\tconst viewPortHeight = this._sizeObserver.height.read(reader);\n\t\tconst contentViewPort = OffsetRange.ofStartAndLength(scrollTop, viewPortHeight);\n\n\t\tconst width = this._sizeObserver.width.read(reader);\n\n\t\tfor (const v of this._viewItems.read(reader)) {\n\t\t\tconst itemContentHeight = v.contentHeight.read(reader);\n\t\t\tconst itemHeight = Math.min(itemContentHeight, viewPortHeight);\n\t\t\tconst itemRange = OffsetRange.ofStartAndLength(itemHeightSumBefore, itemHeight);\n\t\t\tconst itemContentRange = OffsetRange.ofStartAndLength(itemContentHeightSumBefore, itemContentHeight);\n\n\t\t\tif (itemContentRange.isBefore(contentViewPort)) {\n\t\t\t\tcontentScrollOffsetToScrollOffset -= itemContentHeight - itemHeight;\n\t\t\t\tv.hide();\n\t\t\t} else if (itemContentRange.isAfter(contentViewPort)) {\n\t\t\t\tv.hide();\n\t\t\t} else {\n\t\t\t\tconst scroll = Math.max(0, Math.min(contentViewPort.start - itemContentRange.start, itemContentHeight - itemHeight));\n\t\t\t\tcontentScrollOffsetToScrollOffset -= scroll;\n\t\t\t\tconst viewPort = OffsetRange.ofStartAndLength(scrollTop + contentScrollOffsetToScrollOffset, viewPortHeight);\n\t\t\t\tv.render(itemRange, scroll, width, viewPort);\n\t\t\t}\n\n\t\t\titemHeightSumBefore += itemHeight + this._spaceBetweenPx;\n\t\t\titemContentHeightSumBefore += itemContentHeight + this._spaceBetweenPx;\n\t\t}\n\n\t\tthis._scrollableElements.content.style.transform = `translateY(${-(scrollTop + contentScrollOffsetToScrollOffset)}px)`;\n\t}\n}\n\nfunction highlightRange(targetEditor: ICodeEditor, range: IRange) {\n\tconst modelNow = targetEditor.getModel();\n\tconst decorations = targetEditor.createDecorationsCollection([{ range, options: { description: 'symbol-navigate-action-highlight', className: 'symbolHighlight' } }]);\n\tsetTimeout(() => {\n\t\tif (targetEditor.getModel() === modelNow) {\n\t\t\tdecorations.clear();\n\t\t}\n\t}, 350);\n}\n\nexport interface IMultiDiffEditorViewState {\n\tdocStates?: Record<string, IMultiDiffDocState>;\n}\n\ninterface IMultiDiffDocState {\n\tcollapsed: boolean;\n\tselections?: ISelection[];\n}\n\nexport type IMultiDiffResourceId = { original: URI | undefined; modified: URI | undefined };\n\nclass VirtualizedViewItem extends Disposable {\n\tprivate readonly _templateRef = this._register(disposableObservableValue<IReference<DiffEditorItemTemplate> | undefined>(this, undefined));\n\n\tpublic readonly contentHeight = derived(this, reader =>\n\t\tthis._templateRef.read(reader)?.object.contentHeight?.read(reader) ?? this.viewModel.lastTemplateData.read(reader).contentHeight\n\t);\n\n\tpublic readonly maxScroll = derived(this, reader => this._templateRef.read(reader)?.object.maxScroll.read(reader) ?? { maxScroll: 0, scrollWidth: 0 });\n\n\tpublic readonly template = derived(this, reader => this._templateRef.read(reader)?.object);\n\tprivate _isHidden = observableValue(this, false);\n\n\tprivate readonly _isFocused = derived(this, reader => this.template.read(reader)?.isFocused.read(reader) ?? false);\n\n\tconstructor(\n\t\tpublic readonly viewModel: DocumentDiffItemViewModel,\n\t\tprivate readonly _objectPool: ObjectPool<TemplateData, DiffEditorItemTemplate>,\n\t\tprivate readonly _scrollLeft: IObservable<number>,\n\t\tprivate readonly _deltaScrollVertical: (delta: number) => void,\n\t) {\n\t\tsuper();\n\n\t\tthis.viewModel.setIsFocused(this._isFocused, undefined);\n\n\t\tthis._register(autorun((reader) => {\n\t\t\tconst scrollLeft = this._scrollLeft.read(reader);\n\t\t\tthis._templateRef.read(reader)?.object.setScrollLeft(scrollLeft);\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tconst ref = this._templateRef.read(reader);\n\t\t\tif (!ref) { return; }\n\t\t\tconst isHidden = this._isHidden.read(reader);\n\t\t\tif (!isHidden) { return; }\n\n\t\t\tconst isFocused = ref.object.isFocused.read(reader);\n\t\t\tif (isFocused) { return; }\n\n\t\t\tthis._clear();\n\t\t}));\n\t}\n\n\toverride dispose(): void {\n\t\tthis._clear();\n\t\tsuper.dispose();\n\t}\n\n\tpublic override toString(): string {\n\t\treturn `VirtualViewItem(${this.viewModel.documentDiffItem.modified?.uri.toString()})`;\n\t}\n\n\tpublic getKey(): string {\n\t\treturn this.viewModel.getKey();\n\t}\n\n\tpublic setViewState(viewState: IMultiDiffDocState, tx: ITransaction): void {\n\t\tthis.viewModel.collapsed.set(viewState.collapsed, tx);\n\n\t\tthis._updateTemplateData(tx);\n\t\tconst data = this.viewModel.lastTemplateData.get();\n\t\tconst selections = viewState.selections?.map(Selection.liftSelection);\n\t\tthis.viewModel.lastTemplateData.set({\n\t\t\t...data,\n\t\t\tselections,\n\t\t}, tx);\n\t\tconst ref = this._templateRef.get();\n\t\tif (ref) {\n\t\t\tif (selections) {\n\t\t\t\tref.object.editor.setSelections(selections);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _updateTemplateData(tx: ITransaction): void {\n\t\tconst ref = this._templateRef.get();\n\t\tif (!ref) { return; }\n\t\tthis.viewModel.lastTemplateData.set({\n\t\t\tcontentHeight: ref.object.contentHeight.get(),\n\t\t\tselections: ref.object.editor.getSelections() ?? undefined,\n\t\t}, tx);\n\t}\n\n\tprivate _clear(): void {\n\t\tconst ref = this._templateRef.get();\n\t\tif (!ref) { return; }\n\t\ttransaction(tx => {\n\t\t\tthis._updateTemplateData(tx);\n\t\t\tref.object.hide();\n\t\t\tthis._templateRef.set(undefined, tx);\n\t\t});\n\t}\n\n\tpublic hide(): void {\n\t\tthis._isHidden.set(true, undefined);\n\t}\n\n\tpublic render(verticalSpace: OffsetRange, offset: number, width: number, viewPort: OffsetRange): void {\n\t\tthis._isHidden.set(false, undefined);\n\n\t\tlet ref = this._templateRef.get();\n\t\tif (!ref) {\n\t\t\tref = this._objectPool.getUnusedObj(new TemplateData(this.viewModel, this._deltaScrollVertical));\n\t\t\tthis._templateRef.set(ref, undefined);\n\n\t\t\tconst selections = this.viewModel.lastTemplateData.get().selections;\n\t\t\tif (selections) {\n\t\t\t\tref.object.editor.setSelections(selections);\n\t\t\t}\n\t\t}\n\t\tref.object.render(verticalSpace, width, offset, viewPort);\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/colorPicker/browser/colorDetector.ts","vs/editor/contrib/colorPicker/browser/colorDetector.ts"],"names":[],"mappings":"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","file":"colorDetector.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 { CancelablePromise, createCancelablePromise, TimeoutTimer } from '../../../../base/common/async.js';\nimport { RGBA } from '../../../../base/common/color.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { noBreakWhitespace } from '../../../../base/common/strings.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { DynamicCssRules } from '../../../browser/editorDom.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution, IEditorDecorationsCollection } from '../../../common/editorCommon.js';\nimport { IModelDecoration, IModelDeltaDecoration } from '../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../common/model/textModel.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { getColors, IColorData } from './color.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\n\nexport const ColorDecorationInjectedTextMarker = Object.create({});\n\n\nexport class ColorDetector extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID: string = 'editor.contrib.colorDetector';\n\n\tstatic readonly RECOMPUTE_TIME = 1000; // ms\n\n\tprivate readonly _localToDispose = this._register(new DisposableStore());\n\tprivate _computePromise: CancelablePromise<IColorData[]> | null;\n\tprivate _timeoutTimer: TimeoutTimer | null;\n\tprivate _debounceInformation: IFeatureDebounceInformation;\n\n\tprivate _decorationsIds: string[] = [];\n\tprivate _colorDatas = new Map<string, IColorData>();\n\n\tprivate readonly _colorDecoratorIds: IEditorDecorationsCollection;\n\n\tprivate _isColorDecoratorsEnabled: boolean;\n\tprivate _defaultColorDecoratorsEnablement: 'auto' | 'always' | 'never';\n\n\tprivate readonly _ruleFactory: DynamicCssRules;\n\n\tprivate readonly _decoratorLimitReporter = this._register(new DecoratorLimitReporter());\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\t@IConfigurationService private readonly _configurationService: IConfigurationService,\n\t\t@ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService,\n\t\t@ILanguageFeatureDebounceService languageFeatureDebounceService: ILanguageFeatureDebounceService,\n\t) {\n\t\tsuper();\n\t\tthis._colorDecoratorIds = this._editor.createDecorationsCollection();\n\t\tthis._ruleFactory = this._register(new DynamicCssRules(this._editor));\n\t\tthis._debounceInformation = languageFeatureDebounceService.for(_languageFeaturesService.colorProvider, 'Document Colors', { min: ColorDetector.RECOMPUTE_TIME });\n\t\tthis._register(_editor.onDidChangeModel(() => {\n\t\t\tthis._isColorDecoratorsEnabled = this.isEnabled();\n\t\t\tthis.updateColors();\n\t\t}));\n\t\tthis._register(_editor.onDidChangeModelLanguage(() => this.updateColors()));\n\t\tthis._register(_languageFeaturesService.colorProvider.onDidChange(() => this.updateColors()));\n\t\tthis._register(_editor.onDidChangeConfiguration((e) => {\n\t\t\tconst prevIsEnabled = this._isColorDecoratorsEnabled;\n\t\t\tthis._isColorDecoratorsEnabled = this.isEnabled();\n\t\t\tthis._defaultColorDecoratorsEnablement = this._editor.getOption(EditorOption.defaultColorDecorators);\n\t\t\tconst updatedColorDecoratorsSetting = prevIsEnabled !== this._isColorDecoratorsEnabled || e.hasChanged(EditorOption.colorDecoratorsLimit);\n\t\t\tconst updatedDefaultColorDecoratorsSetting = e.hasChanged(EditorOption.defaultColorDecorators);\n\t\t\tif (updatedColorDecoratorsSetting || updatedDefaultColorDecoratorsSetting) {\n\t\t\t\tif (this._isColorDecoratorsEnabled) {\n\t\t\t\t\tthis.updateColors();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.removeAllDecorations();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis._timeoutTimer = null;\n\t\tthis._computePromise = null;\n\t\tthis._isColorDecoratorsEnabled = this.isEnabled();\n\t\tthis._defaultColorDecoratorsEnablement = this._editor.getOption(EditorOption.defaultColorDecorators);\n\t\tthis.updateColors();\n\t}\n\n\tisEnabled(): boolean {\n\t\tconst model = this._editor.getModel();\n\t\tif (!model) {\n\t\t\treturn false;\n\t\t}\n\t\tconst languageId = model.getLanguageId();\n\t\t// handle deprecated settings. [languageId].colorDecorators.enable\n\t\tconst deprecatedConfig = this._configurationService.getValue(languageId);\n\t\tif (deprecatedConfig && typeof deprecatedConfig === 'object') {\n\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\tconst colorDecorators = (deprecatedConfig as any)['colorDecorators']; // deprecatedConfig.valueOf('.colorDecorators.enable');\n\t\t\tif (colorDecorators && colorDecorators['enable'] !== undefined && !colorDecorators['enable']) {\n\t\t\t\treturn colorDecorators['enable'];\n\t\t\t}\n\t\t}\n\n\t\treturn this._editor.getOption(EditorOption.colorDecorators);\n\t}\n\n\tstatic get(editor: ICodeEditor): ColorDetector | null {\n\t\treturn editor.getContribution<ColorDetector>(this.ID);\n\t}\n\n\toverride dispose(): void {\n\t\tthis.stop();\n\t\tthis.removeAllDecorations();\n\t\tsuper.dispose();\n\t}\n\n\tprivate updateColors(): void {\n\t\tthis.stop();\n\n\t\tif (!this._isColorDecoratorsEnabled) {\n\t\t\tthis.removeAllDecorations();\n\t\t\treturn;\n\t\t}\n\t\tconst model = this._editor.getModel();\n\n\t\tif (!model || !this._languageFeaturesService.colorProvider.has(model)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._localToDispose.add(this._editor.onDidChangeModelContent(() => {\n\t\t\tif (!this._timeoutTimer) {\n\t\t\t\tthis._timeoutTimer = new TimeoutTimer();\n\t\t\t\tthis._timeoutTimer.cancelAndSet(() => {\n\t\t\t\t\tthis._timeoutTimer = null;\n\t\t\t\t\tthis.beginCompute();\n\t\t\t\t}, this._debounceInformation.get(model));\n\t\t\t}\n\t\t}));\n\t\tthis.beginCompute();\n\t}\n\n\tprivate async beginCompute(): Promise<void> {\n\t\tthis._computePromise = createCancelablePromise(async token => {\n\t\t\tconst model = this._editor.getModel();\n\t\t\tif (!model) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst sw = new StopWatch(false);\n\t\t\tconst colors = await getColors(this._languageFeaturesService.colorProvider, model, token, this._defaultColorDecoratorsEnablement);\n\t\t\tthis._debounceInformation.update(model, sw.elapsed());\n\t\t\treturn colors;\n\t\t});\n\t\ttry {\n\t\t\tconst colors = await this._computePromise;\n\t\t\tthis.updateDecorations(colors);\n\t\t\tthis.updateColorDecorators(colors);\n\t\t\tthis._computePromise = null;\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t}\n\t}\n\n\tprivate stop(): void {\n\t\tif (this._timeoutTimer) {\n\t\t\tthis._timeoutTimer.cancel();\n\t\t\tthis._timeoutTimer = null;\n\t\t}\n\t\tif (this._computePromise) {\n\t\t\tthis._computePromise.cancel();\n\t\t\tthis._computePromise = null;\n\t\t}\n\t\tthis._localToDispose.clear();\n\t}\n\n\tprivate updateDecorations(colorDatas: IColorData[]): void {\n\t\tconst decorations = colorDatas.map(c => ({\n\t\t\trange: {\n\t\t\t\tstartLineNumber: c.colorInfo.range.startLineNumber,\n\t\t\t\tstartColumn: c.colorInfo.range.startColumn,\n\t\t\t\tendLineNumber: c.colorInfo.range.endLineNumber,\n\t\t\t\tendColumn: c.colorInfo.range.endColumn\n\t\t\t},\n\t\t\toptions: ModelDecorationOptions.EMPTY\n\t\t}));\n\n\t\tthis._editor.changeDecorations((changeAccessor) => {\n\t\t\tthis._decorationsIds = changeAccessor.deltaDecorations(this._decorationsIds, decorations);\n\n\t\t\tthis._colorDatas = new Map<string, IColorData>();\n\t\t\tthis._decorationsIds.forEach((id, i) => this._colorDatas.set(id, colorDatas[i]));\n\t\t});\n\t}\n\n\tprivate readonly _colorDecorationClassRefs = this._register(new DisposableStore());\n\n\tprivate updateColorDecorators(colorData: IColorData[]): void {\n\t\tthis._colorDecorationClassRefs.clear();\n\n\t\tconst decorations: IModelDeltaDecoration[] = [];\n\n\t\tconst limit = this._editor.getOption(EditorOption.colorDecoratorsLimit);\n\n\t\tfor (let i = 0; i < colorData.length && decorations.length < limit; i++) {\n\t\t\tconst { red, green, blue, alpha } = colorData[i].colorInfo.color;\n\t\t\tconst rgba = new RGBA(Math.round(red * 255), Math.round(green * 255), Math.round(blue * 255), alpha);\n\t\t\tconst color = `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n\n\t\t\tconst ref = this._colorDecorationClassRefs.add(\n\t\t\t\tthis._ruleFactory.createClassNameRef({\n\t\t\t\t\tbackgroundColor: color\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tdecorations.push({\n\t\t\t\trange: {\n\t\t\t\t\tstartLineNumber: colorData[i].colorInfo.range.startLineNumber,\n\t\t\t\t\tstartColumn: colorData[i].colorInfo.range.startColumn,\n\t\t\t\t\tendLineNumber: colorData[i].colorInfo.range.endLineNumber,\n\t\t\t\t\tendColumn: colorData[i].colorInfo.range.endColumn\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\tdescription: 'colorDetector',\n\t\t\t\t\tbefore: {\n\t\t\t\t\t\tcontent: noBreakWhitespace,\n\t\t\t\t\t\tinlineClassName: `${ref.className} colorpicker-color-decoration`,\n\t\t\t\t\t\tinlineClassNameAffectsLetterSpacing: true,\n\t\t\t\t\t\tattachedData: ColorDecorationInjectedTextMarker\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tconst limited = limit < colorData.length ? limit : false;\n\t\tthis._decoratorLimitReporter.update(colorData.length, limited);\n\n\t\tthis._colorDecoratorIds.set(decorations);\n\t}\n\n\tprivate removeAllDecorations(): void {\n\t\tthis._editor.removeDecorations(this._decorationsIds);\n\t\tthis._decorationsIds = [];\n\t\tthis._colorDecoratorIds.clear();\n\t\tthis._colorDecorationClassRefs.clear();\n\t}\n\n\tgetColorData(position: Position): IColorData | null {\n\t\tconst model = this._editor.getModel();\n\t\tif (!model) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst decorations = model\n\t\t\t.getDecorationsInRange(Range.fromPositions(position, position))\n\t\t\t.filter(d => this._colorDatas.has(d.id));\n\n\t\tif (decorations.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this._colorDatas.get(decorations[0].id)!;\n\t}\n\n\tisColorDecoration(decoration: IModelDecoration): boolean {\n\t\treturn this._colorDecoratorIds.has(decoration);\n\t}\n}\n\nexport class DecoratorLimitReporter extends Disposable {\n\tprivate _onDidChange = this._register(new Emitter<void>());\n\n\tprivate _computed: number = 0;\n\tprivate _limited: number | false = false;\n\tpublic update(computed: number, limited: number | false) {\n\t\tif (computed !== this._computed || limited !== this._limited) {\n\t\t\tthis._computed = computed;\n\t\t\tthis._limited = limited;\n\t\t\tthis._onDidChange.fire();\n\t\t}\n\t}\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 { CancelablePromise, createCancelablePromise, TimeoutTimer } from '../../../../base/common/async.js';\nimport { RGBA } from '../../../../base/common/color.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { noBreakWhitespace } from '../../../../base/common/strings.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { DynamicCssRules } from '../../../browser/editorDom.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution, IEditorDecorationsCollection } from '../../../common/editorCommon.js';\nimport { IModelDecoration, IModelDeltaDecoration } from '../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../common/model/textModel.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { getColors, IColorData } from './color.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\n\nexport const ColorDecorationInjectedTextMarker = Object.create({});\n\n\nexport class ColorDetector extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID: string = 'editor.contrib.colorDetector';\n\n\tstatic readonly RECOMPUTE_TIME = 1000; // ms\n\n\tprivate readonly _localToDispose = this._register(new DisposableStore());\n\tprivate _computePromise: CancelablePromise<IColorData[]> | null;\n\tprivate _timeoutTimer: TimeoutTimer | null;\n\tprivate _debounceInformation: IFeatureDebounceInformation;\n\n\tprivate _decorationsIds: string[] = [];\n\tprivate _colorDatas = new Map<string, IColorData>();\n\n\tprivate readonly _colorDecoratorIds: IEditorDecorationsCollection;\n\n\tprivate _isColorDecoratorsEnabled: boolean;\n\tprivate _defaultColorDecoratorsEnablement: 'auto' | 'always' | 'never';\n\n\tprivate readonly _ruleFactory: DynamicCssRules;\n\n\tprivate readonly _decoratorLimitReporter = this._register(new DecoratorLimitReporter());\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\t@IConfigurationService private readonly _configurationService: IConfigurationService,\n\t\t@ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService,\n\t\t@ILanguageFeatureDebounceService languageFeatureDebounceService: ILanguageFeatureDebounceService,\n\t) {\n\t\tsuper();\n\t\tthis._colorDecoratorIds = this._editor.createDecorationsCollection();\n\t\tthis._ruleFactory = this._register(new DynamicCssRules(this._editor));\n\t\tthis._debounceInformation = languageFeatureDebounceService.for(_languageFeaturesService.colorProvider, 'Document Colors', { min: ColorDetector.RECOMPUTE_TIME });\n\t\tthis._register(_editor.onDidChangeModel(() => {\n\t\t\tthis._isColorDecoratorsEnabled = this.isEnabled();\n\t\t\tthis.updateColors();\n\t\t}));\n\t\tthis._register(_editor.onDidChangeModelLanguage(() => this.updateColors()));\n\t\tthis._register(_languageFeaturesService.colorProvider.onDidChange(() => this.updateColors()));\n\t\tthis._register(_editor.onDidChangeConfiguration((e) => {\n\t\t\tconst prevIsEnabled = this._isColorDecoratorsEnabled;\n\t\t\tthis._isColorDecoratorsEnabled = this.isEnabled();\n\t\t\tthis._defaultColorDecoratorsEnablement = this._editor.getOption(EditorOption.defaultColorDecorators);\n\t\t\tconst updatedColorDecoratorsSetting = prevIsEnabled !== this._isColorDecoratorsEnabled || e.hasChanged(EditorOption.colorDecoratorsLimit);\n\t\t\tconst updatedDefaultColorDecoratorsSetting = e.hasChanged(EditorOption.defaultColorDecorators);\n\t\t\tif (updatedColorDecoratorsSetting || updatedDefaultColorDecoratorsSetting) {\n\t\t\t\tif (this._isColorDecoratorsEnabled) {\n\t\t\t\t\tthis.updateColors();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.removeAllDecorations();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis._timeoutTimer = null;\n\t\tthis._computePromise = null;\n\t\tthis._isColorDecoratorsEnabled = this.isEnabled();\n\t\tthis._defaultColorDecoratorsEnablement = this._editor.getOption(EditorOption.defaultColorDecorators);\n\t\tthis.updateColors();\n\t}\n\n\tisEnabled(): boolean {\n\t\tconst model = this._editor.getModel();\n\t\tif (!model) {\n\t\t\treturn false;\n\t\t}\n\t\tconst languageId = model.getLanguageId();\n\t\t// handle deprecated settings. [languageId].colorDecorators.enable\n\t\tconst deprecatedConfig = this._configurationService.getValue(languageId);\n\t\tif (deprecatedConfig && typeof deprecatedConfig === 'object') {\n\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\tconst colorDecorators = (deprecatedConfig as any)['colorDecorators']; // deprecatedConfig.valueOf('.colorDecorators.enable');\n\t\t\tif (colorDecorators && colorDecorators['enable'] !== undefined && !colorDecorators['enable']) {\n\t\t\t\treturn colorDecorators['enable'];\n\t\t\t}\n\t\t}\n\n\t\treturn this._editor.getOption(EditorOption.colorDecorators);\n\t}\n\n\tstatic get(editor: ICodeEditor): ColorDetector | null {\n\t\treturn editor.getContribution<ColorDetector>(this.ID);\n\t}\n\n\toverride dispose(): void {\n\t\tthis.stop();\n\t\tthis.removeAllDecorations();\n\t\tsuper.dispose();\n\t}\n\n\tprivate updateColors(): void {\n\t\tthis.stop();\n\n\t\tif (!this._isColorDecoratorsEnabled) {\n\t\t\tthis.removeAllDecorations();\n\t\t\treturn;\n\t\t}\n\t\tconst model = this._editor.getModel();\n\n\t\tif (!model || !this._languageFeaturesService.colorProvider.has(model)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._localToDispose.add(this._editor.onDidChangeModelContent(() => {\n\t\t\tif (!this._timeoutTimer) {\n\t\t\t\tthis._timeoutTimer = new TimeoutTimer();\n\t\t\t\tthis._timeoutTimer.cancelAndSet(() => {\n\t\t\t\t\tthis._timeoutTimer = null;\n\t\t\t\t\tthis.beginCompute();\n\t\t\t\t}, this._debounceInformation.get(model));\n\t\t\t}\n\t\t}));\n\t\tthis.beginCompute();\n\t}\n\n\tprivate async beginCompute(): Promise<void> {\n\t\tthis._computePromise = createCancelablePromise(async token => {\n\t\t\tconst model = this._editor.getModel();\n\t\t\tif (!model) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst sw = new StopWatch(false);\n\t\t\tconst colors = await getColors(this._languageFeaturesService.colorProvider, model, token, this._defaultColorDecoratorsEnablement);\n\t\t\tthis._debounceInformation.update(model, sw.elapsed());\n\t\t\treturn colors;\n\t\t});\n\t\ttry {\n\t\t\tconst colors = await this._computePromise;\n\t\t\tthis.updateDecorations(colors);\n\t\t\tthis.updateColorDecorators(colors);\n\t\t\tthis._computePromise = null;\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t}\n\t}\n\n\tprivate stop(): void {\n\t\tif (this._timeoutTimer) {\n\t\t\tthis._timeoutTimer.cancel();\n\t\t\tthis._timeoutTimer = null;\n\t\t}\n\t\tif (this._computePromise) {\n\t\t\tthis._computePromise.cancel();\n\t\t\tthis._computePromise = null;\n\t\t}\n\t\tthis._localToDispose.clear();\n\t}\n\n\tprivate updateDecorations(colorDatas: IColorData[]): void {\n\t\tconst decorations = colorDatas.map(c => ({\n\t\t\trange: {\n\t\t\t\tstartLineNumber: c.colorInfo.range.startLineNumber,\n\t\t\t\tstartColumn: c.colorInfo.range.startColumn,\n\t\t\t\tendLineNumber: c.colorInfo.range.endLineNumber,\n\t\t\t\tendColumn: c.colorInfo.range.endColumn\n\t\t\t},\n\t\t\toptions: ModelDecorationOptions.EMPTY\n\t\t}));\n\n\t\tthis._editor.changeDecorations((changeAccessor) => {\n\t\t\tthis._decorationsIds = changeAccessor.deltaDecorations(this._decorationsIds, decorations);\n\n\t\t\tthis._colorDatas = new Map<string, IColorData>();\n\t\t\tthis._decorationsIds.forEach((id, i) => this._colorDatas.set(id, colorDatas[i]));\n\t\t});\n\t}\n\n\tprivate readonly _colorDecorationClassRefs = this._register(new DisposableStore());\n\n\tprivate updateColorDecorators(colorData: IColorData[]): void {\n\t\tthis._colorDecorationClassRefs.clear();\n\n\t\tconst decorations: IModelDeltaDecoration[] = [];\n\n\t\tconst limit = this._editor.getOption(EditorOption.colorDecoratorsLimit);\n\n\t\tfor (let i = 0; i < colorData.length && decorations.length < limit; i++) {\n\t\t\tconst { red, green, blue, alpha } = colorData[i].colorInfo.color;\n\t\t\tconst rgba = new RGBA(Math.round(red * 255), Math.round(green * 255), Math.round(blue * 255), alpha);\n\t\t\tconst color = `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n\n\t\t\tconst ref = this._colorDecorationClassRefs.add(\n\t\t\t\tthis._ruleFactory.createClassNameRef({\n\t\t\t\t\tbackgroundColor: color\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tdecorations.push({\n\t\t\t\trange: {\n\t\t\t\t\tstartLineNumber: colorData[i].colorInfo.range.startLineNumber,\n\t\t\t\t\tstartColumn: colorData[i].colorInfo.range.startColumn,\n\t\t\t\t\tendLineNumber: colorData[i].colorInfo.range.endLineNumber,\n\t\t\t\t\tendColumn: colorData[i].colorInfo.range.endColumn\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\tdescription: 'colorDetector',\n\t\t\t\t\tbefore: {\n\t\t\t\t\t\tcontent: noBreakWhitespace,\n\t\t\t\t\t\tinlineClassName: `${ref.className} colorpicker-color-decoration`,\n\t\t\t\t\t\tinlineClassNameAffectsLetterSpacing: true,\n\t\t\t\t\t\tattachedData: ColorDecorationInjectedTextMarker\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tconst limited = limit < colorData.length ? limit : false;\n\t\tthis._decoratorLimitReporter.update(colorData.length, limited);\n\n\t\tthis._colorDecoratorIds.set(decorations);\n\t}\n\n\tprivate removeAllDecorations(): void {\n\t\tthis._editor.removeDecorations(this._decorationsIds);\n\t\tthis._decorationsIds = [];\n\t\tthis._colorDecoratorIds.clear();\n\t\tthis._colorDecorationClassRefs.clear();\n\t}\n\n\tgetColorData(position: Position): IColorData | null {\n\t\tconst model = this._editor.getModel();\n\t\tif (!model) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst decorations = model\n\t\t\t.getDecorationsInRange(Range.fromPositions(position, position))\n\t\t\t.filter(d => this._colorDatas.has(d.id));\n\n\t\tif (decorations.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this._colorDatas.get(decorations[0].id)!;\n\t}\n\n\tisColorDecoration(decoration: IModelDecoration): boolean {\n\t\treturn this._colorDecoratorIds.has(decoration);\n\t}\n}\n\nexport class DecoratorLimitReporter extends Disposable {\n\tprivate _onDidChange = this._register(new Emitter<void>());\n\n\tprivate _computed: number = 0;\n\tprivate _limited: number | false = false;\n\tpublic update(computed: number, limited: number | false) {\n\t\tif (computed !== this._computed || limited !== this._limited) {\n\t\t\tthis._computed = computed;\n\t\t\tthis._limited = limited;\n\t\t\tthis._onDidChange.fire();\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/colorPicker/browser/colorDetector.ts","vs/editor/contrib/colorPicker/browser/colorDetector.ts"],"names":[],"mappings":"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","file":"colorDetector.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 { CancelablePromise, createCancelablePromise, TimeoutTimer } from '../../../../base/common/async.js';\nimport { RGBA } from '../../../../base/common/color.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { noBreakWhitespace } from '../../../../base/common/strings.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { DynamicCssRules } from '../../../browser/editorDom.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution, IEditorDecorationsCollection } from '../../../common/editorCommon.js';\nimport { IModelDecoration, IModelDeltaDecoration } from '../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../common/model/textModel.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { getColors, IColorData } from './color.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\n\nexport const ColorDecorationInjectedTextMarker = Object.create({});\n\n\nexport class ColorDetector extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID: string = 'editor.contrib.colorDetector';\n\n\tstatic readonly RECOMPUTE_TIME = 1000; // ms\n\n\tprivate readonly _localToDispose = this._register(new DisposableStore());\n\tprivate _computePromise: CancelablePromise<IColorData[]> | null;\n\tprivate _timeoutTimer: TimeoutTimer | null;\n\tprivate _debounceInformation: IFeatureDebounceInformation;\n\n\tprivate _decorationsIds: string[] = [];\n\tprivate _colorDatas = new Map<string, IColorData>();\n\n\tprivate readonly _colorDecoratorIds: IEditorDecorationsCollection;\n\n\tprivate _isColorDecoratorsEnabled: boolean;\n\tprivate _defaultColorDecoratorsEnablement: 'auto' | 'always' | 'never';\n\n\tprivate readonly _ruleFactory: DynamicCssRules;\n\n\tprivate readonly _decoratorLimitReporter = this._register(new DecoratorLimitReporter());\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\t@IConfigurationService private readonly _configurationService: IConfigurationService,\n\t\t@ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService,\n\t\t@ILanguageFeatureDebounceService languageFeatureDebounceService: ILanguageFeatureDebounceService,\n\t) {\n\t\tsuper();\n\t\tthis._colorDecoratorIds = this._editor.createDecorationsCollection();\n\t\tthis._ruleFactory = this._register(new DynamicCssRules(this._editor));\n\t\tthis._debounceInformation = languageFeatureDebounceService.for(_languageFeaturesService.colorProvider, 'Document Colors', { min: ColorDetector.RECOMPUTE_TIME });\n\t\tthis._register(_editor.onDidChangeModel(() => {\n\t\t\tthis._isColorDecoratorsEnabled = this.isEnabled();\n\t\t\tthis.updateColors();\n\t\t}));\n\t\tthis._register(_editor.onDidChangeModelLanguage(() => this.updateColors()));\n\t\tthis._register(_languageFeaturesService.colorProvider.onDidChange(() => this.updateColors()));\n\t\tthis._register(_editor.onDidChangeConfiguration((e) => {\n\t\t\tconst prevIsEnabled = this._isColorDecoratorsEnabled;\n\t\t\tthis._isColorDecoratorsEnabled = this.isEnabled();\n\t\t\tthis._defaultColorDecoratorsEnablement = this._editor.getOption(EditorOption.defaultColorDecorators);\n\t\t\tconst updatedColorDecoratorsSetting = prevIsEnabled !== this._isColorDecoratorsEnabled || e.hasChanged(EditorOption.colorDecoratorsLimit);\n\t\t\tconst updatedDefaultColorDecoratorsSetting = e.hasChanged(EditorOption.defaultColorDecorators);\n\t\t\tif (updatedColorDecoratorsSetting || updatedDefaultColorDecoratorsSetting) {\n\t\t\t\tif (this._isColorDecoratorsEnabled) {\n\t\t\t\t\tthis.updateColors();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.removeAllDecorations();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis._timeoutTimer = null;\n\t\tthis._computePromise = null;\n\t\tthis._isColorDecoratorsEnabled = this.isEnabled();\n\t\tthis._defaultColorDecoratorsEnablement = this._editor.getOption(EditorOption.defaultColorDecorators);\n\t\tthis.updateColors();\n\t}\n\n\tisEnabled(): boolean {\n\t\tconst model = this._editor.getModel();\n\t\tif (!model) {\n\t\t\treturn false;\n\t\t}\n\t\tconst languageId = model.getLanguageId();\n\t\t// handle deprecated settings. [languageId].colorDecorators.enable\n\t\tconst deprecatedConfig = this._configurationService.getValue(languageId);\n\t\tif (deprecatedConfig && typeof deprecatedConfig === 'object') {\n\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\tconst colorDecorators = (deprecatedConfig as any)['colorDecorators']; // deprecatedConfig.valueOf('.colorDecorators.enable');\n\t\t\tif (colorDecorators && colorDecorators['enable'] !== undefined && !colorDecorators['enable']) {\n\t\t\t\treturn colorDecorators['enable'];\n\t\t\t}\n\t\t}\n\n\t\treturn this._editor.getOption(EditorOption.colorDecorators);\n\t}\n\n\tstatic get(editor: ICodeEditor): ColorDetector | null {\n\t\treturn editor.getContribution<ColorDetector>(this.ID);\n\t}\n\n\toverride dispose(): void {\n\t\tthis.stop();\n\t\tthis.removeAllDecorations();\n\t\tsuper.dispose();\n\t}\n\n\tprivate updateColors(): void {\n\t\tthis.stop();\n\n\t\tif (!this._isColorDecoratorsEnabled) {\n\t\t\treturn;\n\t\t}\n\t\tconst model = this._editor.getModel();\n\n\t\tif (!model || !this._languageFeaturesService.colorProvider.has(model)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._localToDispose.add(this._editor.onDidChangeModelContent(() => {\n\t\t\tif (!this._timeoutTimer) {\n\t\t\t\tthis._timeoutTimer = new TimeoutTimer();\n\t\t\t\tthis._timeoutTimer.cancelAndSet(() => {\n\t\t\t\t\tthis._timeoutTimer = null;\n\t\t\t\t\tthis.beginCompute();\n\t\t\t\t}, this._debounceInformation.get(model));\n\t\t\t}\n\t\t}));\n\t\tthis.beginCompute();\n\t}\n\n\tprivate async beginCompute(): Promise<void> {\n\t\tthis._computePromise = createCancelablePromise(async token => {\n\t\t\tconst model = this._editor.getModel();\n\t\t\tif (!model) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst sw = new StopWatch(false);\n\t\t\tconst colors = await getColors(this._languageFeaturesService.colorProvider, model, token, this._defaultColorDecoratorsEnablement);\n\t\t\tthis._debounceInformation.update(model, sw.elapsed());\n\t\t\treturn colors;\n\t\t});\n\t\ttry {\n\t\t\tconst colors = await this._computePromise;\n\t\t\tthis.updateDecorations(colors);\n\t\t\tthis.updateColorDecorators(colors);\n\t\t\tthis._computePromise = null;\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t}\n\t}\n\n\tprivate stop(): void {\n\t\tif (this._timeoutTimer) {\n\t\t\tthis._timeoutTimer.cancel();\n\t\t\tthis._timeoutTimer = null;\n\t\t}\n\t\tif (this._computePromise) {\n\t\t\tthis._computePromise.cancel();\n\t\t\tthis._computePromise = null;\n\t\t}\n\t\tthis._localToDispose.clear();\n\t}\n\n\tprivate updateDecorations(colorDatas: IColorData[]): void {\n\t\tconst decorations = colorDatas.map(c => ({\n\t\t\trange: {\n\t\t\t\tstartLineNumber: c.colorInfo.range.startLineNumber,\n\t\t\t\tstartColumn: c.colorInfo.range.startColumn,\n\t\t\t\tendLineNumber: c.colorInfo.range.endLineNumber,\n\t\t\t\tendColumn: c.colorInfo.range.endColumn\n\t\t\t},\n\t\t\toptions: ModelDecorationOptions.EMPTY\n\t\t}));\n\n\t\tthis._editor.changeDecorations((changeAccessor) => {\n\t\t\tthis._decorationsIds = changeAccessor.deltaDecorations(this._decorationsIds, decorations);\n\n\t\t\tthis._colorDatas = new Map<string, IColorData>();\n\t\t\tthis._decorationsIds.forEach((id, i) => this._colorDatas.set(id, colorDatas[i]));\n\t\t});\n\t}\n\n\tprivate readonly _colorDecorationClassRefs = this._register(new DisposableStore());\n\n\tprivate updateColorDecorators(colorData: IColorData[]): void {\n\t\tthis._colorDecorationClassRefs.clear();\n\n\t\tconst decorations: IModelDeltaDecoration[] = [];\n\n\t\tconst limit = this._editor.getOption(EditorOption.colorDecoratorsLimit);\n\n\t\tfor (let i = 0; i < colorData.length && decorations.length < limit; i++) {\n\t\t\tconst { red, green, blue, alpha } = colorData[i].colorInfo.color;\n\t\t\tconst rgba = new RGBA(Math.round(red * 255), Math.round(green * 255), Math.round(blue * 255), alpha);\n\t\t\tconst color = `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n\n\t\t\tconst ref = this._colorDecorationClassRefs.add(\n\t\t\t\tthis._ruleFactory.createClassNameRef({\n\t\t\t\t\tbackgroundColor: color\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tdecorations.push({\n\t\t\t\trange: {\n\t\t\t\t\tstartLineNumber: colorData[i].colorInfo.range.startLineNumber,\n\t\t\t\t\tstartColumn: colorData[i].colorInfo.range.startColumn,\n\t\t\t\t\tendLineNumber: colorData[i].colorInfo.range.endLineNumber,\n\t\t\t\t\tendColumn: colorData[i].colorInfo.range.endColumn\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\tdescription: 'colorDetector',\n\t\t\t\t\tbefore: {\n\t\t\t\t\t\tcontent: noBreakWhitespace,\n\t\t\t\t\t\tinlineClassName: `${ref.className} colorpicker-color-decoration`,\n\t\t\t\t\t\tinlineClassNameAffectsLetterSpacing: true,\n\t\t\t\t\t\tattachedData: ColorDecorationInjectedTextMarker\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tconst limited = limit < colorData.length ? limit : false;\n\t\tthis._decoratorLimitReporter.update(colorData.length, limited);\n\n\t\tthis._colorDecoratorIds.set(decorations);\n\t}\n\n\tprivate removeAllDecorations(): void {\n\t\tthis._editor.removeDecorations(this._decorationsIds);\n\t\tthis._decorationsIds = [];\n\t\tthis._colorDecoratorIds.clear();\n\t\tthis._colorDecorationClassRefs.clear();\n\t}\n\n\tgetColorData(position: Position): IColorData | null {\n\t\tconst model = this._editor.getModel();\n\t\tif (!model) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst decorations = model\n\t\t\t.getDecorationsInRange(Range.fromPositions(position, position))\n\t\t\t.filter(d => this._colorDatas.has(d.id));\n\n\t\tif (decorations.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this._colorDatas.get(decorations[0].id)!;\n\t}\n\n\tisColorDecoration(decoration: IModelDecoration): boolean {\n\t\treturn this._colorDecoratorIds.has(decoration);\n\t}\n}\n\nexport class DecoratorLimitReporter extends Disposable {\n\tprivate _onDidChange = this._register(new Emitter<void>());\n\n\tprivate _computed: number = 0;\n\tprivate _limited: number | false = false;\n\tpublic update(computed: number, limited: number | false) {\n\t\tif (computed !== this._computed || limited !== this._limited) {\n\t\t\tthis._computed = computed;\n\t\t\tthis._limited = limited;\n\t\t\tthis._onDidChange.fire();\n\t\t}\n\t}\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 { CancelablePromise, createCancelablePromise, TimeoutTimer } from '../../../../base/common/async.js';\nimport { RGBA } from '../../../../base/common/color.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { noBreakWhitespace } from '../../../../base/common/strings.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { DynamicCssRules } from '../../../browser/editorDom.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution, IEditorDecorationsCollection } from '../../../common/editorCommon.js';\nimport { IModelDecoration, IModelDeltaDecoration } from '../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../common/model/textModel.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { getColors, IColorData } from './color.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\n\nexport const ColorDecorationInjectedTextMarker = Object.create({});\n\n\nexport class ColorDetector extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID: string = 'editor.contrib.colorDetector';\n\n\tstatic readonly RECOMPUTE_TIME = 1000; // ms\n\n\tprivate readonly _localToDispose = this._register(new DisposableStore());\n\tprivate _computePromise: CancelablePromise<IColorData[]> | null;\n\tprivate _timeoutTimer: TimeoutTimer | null;\n\tprivate _debounceInformation: IFeatureDebounceInformation;\n\n\tprivate _decorationsIds: string[] = [];\n\tprivate _colorDatas = new Map<string, IColorData>();\n\n\tprivate readonly _colorDecoratorIds: IEditorDecorationsCollection;\n\n\tprivate _isColorDecoratorsEnabled: boolean;\n\tprivate _defaultColorDecoratorsEnablement: 'auto' | 'always' | 'never';\n\n\tprivate readonly _ruleFactory: DynamicCssRules;\n\n\tprivate readonly _decoratorLimitReporter = this._register(new DecoratorLimitReporter());\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\t@IConfigurationService private readonly _configurationService: IConfigurationService,\n\t\t@ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService,\n\t\t@ILanguageFeatureDebounceService languageFeatureDebounceService: ILanguageFeatureDebounceService,\n\t) {\n\t\tsuper();\n\t\tthis._colorDecoratorIds = this._editor.createDecorationsCollection();\n\t\tthis._ruleFactory = this._register(new DynamicCssRules(this._editor));\n\t\tthis._debounceInformation = languageFeatureDebounceService.for(_languageFeaturesService.colorProvider, 'Document Colors', { min: ColorDetector.RECOMPUTE_TIME });\n\t\tthis._register(_editor.onDidChangeModel(() => {\n\t\t\tthis._isColorDecoratorsEnabled = this.isEnabled();\n\t\t\tthis.updateColors();\n\t\t}));\n\t\tthis._register(_editor.onDidChangeModelLanguage(() => this.updateColors()));\n\t\tthis._register(_languageFeaturesService.colorProvider.onDidChange(() => this.updateColors()));\n\t\tthis._register(_editor.onDidChangeConfiguration((e) => {\n\t\t\tconst prevIsEnabled = this._isColorDecoratorsEnabled;\n\t\t\tthis._isColorDecoratorsEnabled = this.isEnabled();\n\t\t\tthis._defaultColorDecoratorsEnablement = this._editor.getOption(EditorOption.defaultColorDecorators);\n\t\t\tconst updatedColorDecoratorsSetting = prevIsEnabled !== this._isColorDecoratorsEnabled || e.hasChanged(EditorOption.colorDecoratorsLimit);\n\t\t\tconst updatedDefaultColorDecoratorsSetting = e.hasChanged(EditorOption.defaultColorDecorators);\n\t\t\tif (updatedColorDecoratorsSetting || updatedDefaultColorDecoratorsSetting) {\n\t\t\t\tif (this._isColorDecoratorsEnabled) {\n\t\t\t\t\tthis.updateColors();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.removeAllDecorations();\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\n\t\tthis._timeoutTimer = null;\n\t\tthis._computePromise = null;\n\t\tthis._isColorDecoratorsEnabled = this.isEnabled();\n\t\tthis._defaultColorDecoratorsEnablement = this._editor.getOption(EditorOption.defaultColorDecorators);\n\t\tthis.updateColors();\n\t}\n\n\tisEnabled(): boolean {\n\t\tconst model = this._editor.getModel();\n\t\tif (!model) {\n\t\t\treturn false;\n\t\t}\n\t\tconst languageId = model.getLanguageId();\n\t\t// handle deprecated settings. [languageId].colorDecorators.enable\n\t\tconst deprecatedConfig = this._configurationService.getValue(languageId);\n\t\tif (deprecatedConfig && typeof deprecatedConfig === 'object') {\n\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\tconst colorDecorators = (deprecatedConfig as any)['colorDecorators']; // deprecatedConfig.valueOf('.colorDecorators.enable');\n\t\t\tif (colorDecorators && colorDecorators['enable'] !== undefined && !colorDecorators['enable']) {\n\t\t\t\treturn colorDecorators['enable'];\n\t\t\t}\n\t\t}\n\n\t\treturn this._editor.getOption(EditorOption.colorDecorators);\n\t}\n\n\tstatic get(editor: ICodeEditor): ColorDetector | null {\n\t\treturn editor.getContribution<ColorDetector>(this.ID);\n\t}\n\n\toverride dispose(): void {\n\t\tthis.stop();\n\t\tthis.removeAllDecorations();\n\t\tsuper.dispose();\n\t}\n\n\tprivate updateColors(): void {\n\t\tthis.stop();\n\n\t\tif (!this._isColorDecoratorsEnabled) {\n\t\t\treturn;\n\t\t}\n\t\tconst model = this._editor.getModel();\n\n\t\tif (!model || !this._languageFeaturesService.colorProvider.has(model)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._localToDispose.add(this._editor.onDidChangeModelContent(() => {\n\t\t\tif (!this._timeoutTimer) {\n\t\t\t\tthis._timeoutTimer = new TimeoutTimer();\n\t\t\t\tthis._timeoutTimer.cancelAndSet(() => {\n\t\t\t\t\tthis._timeoutTimer = null;\n\t\t\t\t\tthis.beginCompute();\n\t\t\t\t}, this._debounceInformation.get(model));\n\t\t\t}\n\t\t}));\n\t\tthis.beginCompute();\n\t}\n\n\tprivate async beginCompute(): Promise<void> {\n\t\tthis._computePromise = createCancelablePromise(async token => {\n\t\t\tconst model = this._editor.getModel();\n\t\t\tif (!model) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst sw = new StopWatch(false);\n\t\t\tconst colors = await getColors(this._languageFeaturesService.colorProvider, model, token, this._defaultColorDecoratorsEnablement);\n\t\t\tthis._debounceInformation.update(model, sw.elapsed());\n\t\t\treturn colors;\n\t\t});\n\t\ttry {\n\t\t\tconst colors = await this._computePromise;\n\t\t\tthis.updateDecorations(colors);\n\t\t\tthis.updateColorDecorators(colors);\n\t\t\tthis._computePromise = null;\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t}\n\t}\n\n\tprivate stop(): void {\n\t\tif (this._timeoutTimer) {\n\t\t\tthis._timeoutTimer.cancel();\n\t\t\tthis._timeoutTimer = null;\n\t\t}\n\t\tif (this._computePromise) {\n\t\t\tthis._computePromise.cancel();\n\t\t\tthis._computePromise = null;\n\t\t}\n\t\tthis._localToDispose.clear();\n\t}\n\n\tprivate updateDecorations(colorDatas: IColorData[]): void {\n\t\tconst decorations = colorDatas.map(c => ({\n\t\t\trange: {\n\t\t\t\tstartLineNumber: c.colorInfo.range.startLineNumber,\n\t\t\t\tstartColumn: c.colorInfo.range.startColumn,\n\t\t\t\tendLineNumber: c.colorInfo.range.endLineNumber,\n\t\t\t\tendColumn: c.colorInfo.range.endColumn\n\t\t\t},\n\t\t\toptions: ModelDecorationOptions.EMPTY\n\t\t}));\n\n\t\tthis._editor.changeDecorations((changeAccessor) => {\n\t\t\tthis._decorationsIds = changeAccessor.deltaDecorations(this._decorationsIds, decorations);\n\n\t\t\tthis._colorDatas = new Map<string, IColorData>();\n\t\t\tthis._decorationsIds.forEach((id, i) => this._colorDatas.set(id, colorDatas[i]));\n\t\t});\n\t}\n\n\tprivate readonly _colorDecorationClassRefs = this._register(new DisposableStore());\n\n\tprivate updateColorDecorators(colorData: IColorData[]): void {\n\t\tthis._colorDecorationClassRefs.clear();\n\n\t\tconst decorations: IModelDeltaDecoration[] = [];\n\n\t\tconst limit = this._editor.getOption(EditorOption.colorDecoratorsLimit);\n\n\t\tfor (let i = 0; i < colorData.length && decorations.length < limit; i++) {\n\t\t\tconst { red, green, blue, alpha } = colorData[i].colorInfo.color;\n\t\t\tconst rgba = new RGBA(Math.round(red * 255), Math.round(green * 255), Math.round(blue * 255), alpha);\n\t\t\tconst color = `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n\n\t\t\tconst ref = this._colorDecorationClassRefs.add(\n\t\t\t\tthis._ruleFactory.createClassNameRef({\n\t\t\t\t\tbackgroundColor: color\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tdecorations.push({\n\t\t\t\trange: {\n\t\t\t\t\tstartLineNumber: colorData[i].colorInfo.range.startLineNumber,\n\t\t\t\t\tstartColumn: colorData[i].colorInfo.range.startColumn,\n\t\t\t\t\tendLineNumber: colorData[i].colorInfo.range.endLineNumber,\n\t\t\t\t\tendColumn: colorData[i].colorInfo.range.endColumn\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\tdescription: 'colorDetector',\n\t\t\t\t\tbefore: {\n\t\t\t\t\t\tcontent: noBreakWhitespace,\n\t\t\t\t\t\tinlineClassName: `${ref.className} colorpicker-color-decoration`,\n\t\t\t\t\t\tinlineClassNameAffectsLetterSpacing: true,\n\t\t\t\t\t\tattachedData: ColorDecorationInjectedTextMarker\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tconst limited = limit < colorData.length ? limit : false;\n\t\tthis._decoratorLimitReporter.update(colorData.length, limited);\n\n\t\tthis._colorDecoratorIds.set(decorations);\n\t}\n\n\tprivate removeAllDecorations(): void {\n\t\tthis._editor.removeDecorations(this._decorationsIds);\n\t\tthis._decorationsIds = [];\n\t\tthis._colorDecoratorIds.clear();\n\t\tthis._colorDecorationClassRefs.clear();\n\t}\n\n\tgetColorData(position: Position): IColorData | null {\n\t\tconst model = this._editor.getModel();\n\t\tif (!model) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst decorations = model\n\t\t\t.getDecorationsInRange(Range.fromPositions(position, position))\n\t\t\t.filter(d => this._colorDatas.has(d.id));\n\n\t\tif (decorations.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this._colorDatas.get(decorations[0].id)!;\n\t}\n\n\tisColorDecoration(decoration: IModelDecoration): boolean {\n\t\treturn this._colorDecoratorIds.has(decoration);\n\t}\n}\n\nexport class DecoratorLimitReporter extends Disposable {\n\tprivate _onDidChange = this._register(new Emitter<void>());\n\n\tprivate _computed: number = 0;\n\tprivate _limited: number | false = false;\n\tpublic update(computed: number, limited: number | false) {\n\t\tif (computed !== this._computed || limited !== this._limited) {\n\t\t\tthis._computed = computed;\n\t\t\tthis._limited = limited;\n\t\t\tthis._onDidChange.fire();\n\t\t}\n\t}\n}\n"]}
|
|
@@ -22,7 +22,7 @@ import { Position } from '../../../common/core/position.js';
|
|
|
22
22
|
import { Range } from '../../../common/core/range.js';
|
|
23
23
|
import * as dom from '../../../../base/browser/dom.js';
|
|
24
24
|
import { MarkdownHoverParticipant } from './markdownHoverParticipant.js';
|
|
25
|
-
import {
|
|
25
|
+
import { HoverColorPickerParticipant } from '../../colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js';
|
|
26
26
|
import { InlayHintsHover } from '../../inlayHints/browser/inlayHintsHover.js';
|
|
27
27
|
import { BugIndicatingError } from '../../../../base/common/errors.js';
|
|
28
28
|
import { IHoverService } from '../../../../platform/hover/browser/hover.js';
|
|
@@ -229,7 +229,7 @@ let RenderedContentHoverParts = class RenderedContentHoverParts extends Disposab
|
|
|
229
229
|
this._focusedHoverPartIndex = -1;
|
|
230
230
|
}));
|
|
231
231
|
// Add copy button for marker hovers
|
|
232
|
-
if (renderedPart.type === 'hoverPart' && !
|
|
232
|
+
if (renderedPart.type === 'hoverPart' && !renderedPart.participant.hideCopyButton) {
|
|
233
233
|
disposables.add(new HoverCopyButton(element, () => renderedPart.participant.getAccessibleContent(renderedPart.hoverPart), this._clipboardService, this._hoverService));
|
|
234
234
|
}
|
|
235
235
|
});
|