monaco-editor-core 0.55.0-dev-20251013 → 0.55.0-dev-20251014

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.
Files changed (25) hide show
  1. package/esm/nls.messages.de.js +1 -1
  2. package/esm/nls.messages.es.js +1 -1
  3. package/esm/nls.messages.fr.js +1 -1
  4. package/esm/nls.messages.it.js +1 -1
  5. package/esm/nls.messages.ja.js +1 -1
  6. package/esm/nls.messages.ko.js +1 -1
  7. package/esm/nls.messages.ru.js +1 -1
  8. package/esm/nls.messages.zh-cn.js +1 -1
  9. package/esm/nls.messages.zh-tw.js +1 -1
  10. package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  11. package/esm/vs/base/browser/ui/countBadge/countBadge.css +1 -1
  12. package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js +1 -1
  13. package/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js.map +1 -1
  14. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +1 -1
  15. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js.map +1 -1
  16. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +1 -1
  17. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js.map +1 -1
  18. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +2 -4
  19. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
  20. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js +2 -4
  21. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js.map +1 -1
  22. package/esm/vs/editor/editor.api.d.ts +3 -3
  23. package/monaco.d.ts +3 -3
  24. package/package.json +2 -2
  25. package/version.txt +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.ts"],"names":[],"mappings":"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","file":"inlineCompletionsHintsWidget.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 { h, n } from '../../../../../base/browser/dom.js';\nimport { renderMarkdown } from '../../../../../base/browser/markdownRenderer.js';\nimport { ActionViewItem } from '../../../../../base/browser/ui/actionbar/actionViewItems.js';\nimport { KeybindingLabel, unthemedKeybindingLabelOptions } from '../../../../../base/browser/ui/keybindingLabel/keybindingLabel.js';\nimport { Action, IAction, Separator } from '../../../../../base/common/actions.js';\nimport { equals } from '../../../../../base/common/arrays.js';\nimport { RunOnceScheduler } from '../../../../../base/common/async.js';\nimport { Codicon } from '../../../../../base/common/codicons.js';\nimport { createHotClass } from '../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable, toDisposable } from '../../../../../base/common/lifecycle.js';\nimport { IObservable, autorun, autorunWithStore, derived, derivedObservableWithCache, observableFromEvent } from '../../../../../base/common/observable.js';\nimport { OS } from '../../../../../base/common/platform.js';\nimport { ThemeIcon } from '../../../../../base/common/themables.js';\nimport { localize } from '../../../../../nls.js';\nimport { MenuEntryActionViewItem, getActionBarActions } from '../../../../../platform/actions/browser/menuEntryActionViewItem.js';\nimport { IMenuWorkbenchToolBarOptions, WorkbenchToolBar } from '../../../../../platform/actions/browser/toolbar.js';\nimport { IMenuService, MenuId, MenuItemAction } from '../../../../../platform/actions/common/actions.js';\nimport { ICommandService } from '../../../../../platform/commands/common/commands.js';\nimport { IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js';\nimport { IContextMenuService } from '../../../../../platform/contextview/browser/contextView.js';\nimport { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js';\nimport { ITelemetryService } from '../../../../../platform/telemetry/common/telemetry.js';\nimport { registerIcon } from '../../../../../platform/theme/common/iconRegistry.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from '../../../../browser/editorBrowser.js';\nimport { EditorOption } from '../../../../common/config/editorOptions.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { InlineCompletionCommand, InlineCompletionTriggerKind, InlineCompletionWarning } from '../../../../common/languages.js';\nimport { PositionAffinity } from '../../../../common/model.js';\nimport { showNextInlineSuggestionActionId, showPreviousInlineSuggestionActionId } from '../controller/commandIds.js';\nimport { InlineCompletionsModel } from '../model/inlineCompletionsModel.js';\nimport './inlineCompletionsHintsWidget.css';\n\nexport class InlineCompletionsHintsWidget extends Disposable {\n\tprivate readonly alwaysShowToolbar;\n\n\tprivate sessionPosition: Position | undefined;\n\n\tprivate readonly position;\n\n\tconstructor(\n\t\tprivate readonly editor: ICodeEditor,\n\t\tprivate readonly model: IObservable<InlineCompletionsModel | undefined>,\n\t\t@IInstantiationService private readonly instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\t\tthis.alwaysShowToolbar = observableFromEvent(this, this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.inlineSuggest).showToolbar === 'always');\n\t\tthis.sessionPosition = undefined;\n\t\tthis.position = derived(this, reader => {\n\t\t\tconst ghostText = this.model.read(reader)?.primaryGhostText.read(reader);\n\n\t\t\tif (!this.alwaysShowToolbar.read(reader) || !ghostText || ghostText.parts.length === 0) {\n\t\t\t\tthis.sessionPosition = undefined;\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst firstColumn = ghostText.parts[0].column;\n\t\t\tif (this.sessionPosition && this.sessionPosition.lineNumber !== ghostText.lineNumber) {\n\t\t\t\tthis.sessionPosition = undefined;\n\t\t\t}\n\n\t\t\tconst position = new Position(ghostText.lineNumber, Math.min(firstColumn, this.sessionPosition?.column ?? Number.MAX_SAFE_INTEGER));\n\t\t\tthis.sessionPosition = position;\n\t\t\treturn position;\n\t\t});\n\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\t/** @description setup content widget */\n\t\t\tconst model = this.model.read(reader);\n\t\t\tif (!model || !this.alwaysShowToolbar.read(reader)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst contentWidgetValue = derived((reader) => {\n\t\t\t\tconst contentWidget = reader.store.add(this.instantiationService.createInstance(\n\t\t\t\t\tInlineSuggestionHintsContentWidget.hot.read(reader),\n\t\t\t\t\tthis.editor,\n\t\t\t\t\ttrue,\n\t\t\t\t\tthis.position,\n\t\t\t\t\tmodel.selectedInlineCompletionIndex,\n\t\t\t\t\tmodel.inlineCompletionsCount,\n\t\t\t\t\tmodel.activeCommands,\n\t\t\t\t\tmodel.warning,\n\t\t\t\t\t() => { },\n\t\t\t\t));\n\t\t\t\teditor.addContentWidget(contentWidget);\n\t\t\t\treader.store.add(toDisposable(() => editor.removeContentWidget(contentWidget)));\n\n\t\t\t\treader.store.add(autorun(reader => {\n\t\t\t\t\t/** @description request explicit */\n\t\t\t\t\tconst position = this.position.read(reader);\n\t\t\t\t\tif (!position) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (model.lastTriggerKind.read(reader) !== InlineCompletionTriggerKind.Explicit) {\n\t\t\t\t\t\tmodel.triggerExplicitly();\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t\treturn contentWidget;\n\t\t\t});\n\n\t\t\tconst hadPosition = derivedObservableWithCache(this, (reader, lastValue) => !!this.position.read(reader) || !!lastValue);\n\t\t\tstore.add(autorun(reader => {\n\t\t\t\tif (hadPosition.read(reader)) {\n\t\t\t\t\tcontentWidgetValue.read(reader);\n\t\t\t\t}\n\t\t\t}));\n\t\t}));\n\t}\n}\n\nconst inlineSuggestionHintsNextIcon = registerIcon('inline-suggestion-hints-next', Codicon.chevronRight, localize('parameterHintsNextIcon', 'Icon for show next parameter hint.'));\nconst inlineSuggestionHintsPreviousIcon = registerIcon('inline-suggestion-hints-previous', Codicon.chevronLeft, localize('parameterHintsPreviousIcon', 'Icon for show previous parameter hint.'));\n\nexport class InlineSuggestionHintsContentWidget extends Disposable implements IContentWidget {\n\tpublic static readonly hot = createHotClass(InlineSuggestionHintsContentWidget);\n\n\tprivate static _dropDownVisible = false;\n\tpublic static get dropDownVisible() { return this._dropDownVisible; }\n\n\tprivate static id = 0;\n\n\tprivate readonly id;\n\tpublic readonly allowEditorOverflow;\n\tpublic readonly suppressMouseDown;\n\n\tprivate readonly _warningMessageContentNode;\n\n\tprivate readonly _warningMessageNode;\n\n\tprivate readonly nodes;\n\n\tprivate createCommandAction(commandId: string, label: string, iconClassName: string): Action {\n\t\tconst action = new Action(\n\t\t\tcommandId,\n\t\t\tlabel,\n\t\t\ticonClassName,\n\t\t\ttrue,\n\t\t\t() => this._commandService.executeCommand(commandId),\n\t\t);\n\t\tconst kb = this.keybindingService.lookupKeybinding(commandId, this._contextKeyService);\n\t\tlet tooltip = label;\n\t\tif (kb) {\n\t\t\ttooltip = localize({ key: 'content', comment: ['A label', 'A keybinding'] }, '{0} ({1})', label, kb.getLabel());\n\t\t}\n\t\taction.tooltip = tooltip;\n\t\treturn action;\n\t}\n\n\tprivate readonly previousAction;\n\tprivate readonly availableSuggestionCountAction;\n\tprivate readonly nextAction;\n\n\tprivate readonly toolBar: CustomizedMenuWorkbenchToolBar;\n\n\t// TODO@hediet: deprecate MenuId.InlineCompletionsActions\n\tprivate readonly inlineCompletionsActionsMenus;\n\n\tprivate readonly clearAvailableSuggestionCountLabelDebounced;\n\n\tprivate readonly disableButtonsDebounced;\n\n\tconstructor(\n\t\tprivate readonly editor: ICodeEditor,\n\t\tprivate readonly withBorder: boolean,\n\t\tprivate readonly _position: IObservable<Position | null>,\n\t\tprivate readonly _currentSuggestionIdx: IObservable<number>,\n\t\tprivate readonly _suggestionCount: IObservable<number | undefined>,\n\t\tprivate readonly _extraCommands: IObservable<InlineCompletionCommand[]>,\n\t\tprivate readonly _warning: IObservable<InlineCompletionWarning | undefined>,\n\t\tprivate readonly _relayout: () => void,\n\t\t@ICommandService private readonly _commandService: ICommandService,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@IKeybindingService private readonly keybindingService: IKeybindingService,\n\t\t@IContextKeyService private readonly _contextKeyService: IContextKeyService,\n\t\t@IMenuService private readonly _menuService: IMenuService,\n\t) {\n\t\tsuper();\n\t\tthis.id = `InlineSuggestionHintsContentWidget${InlineSuggestionHintsContentWidget.id++}`;\n\t\tthis.allowEditorOverflow = true;\n\t\tthis.suppressMouseDown = false;\n\t\tthis._warningMessageContentNode = derived((reader) => {\n\t\t\tconst warning = this._warning.read(reader);\n\t\t\tif (!warning) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (typeof warning.message === 'string') {\n\t\t\t\treturn warning.message;\n\t\t\t}\n\t\t\tconst markdownElement = reader.store.add(renderMarkdown(warning.message));\n\t\t\treturn markdownElement.element;\n\t\t});\n\t\tthis._warningMessageNode = n.div({\n\t\t\tclass: 'warningMessage',\n\t\t\tstyle: {\n\t\t\t\tmaxWidth: 400,\n\t\t\t\tmargin: 4,\n\t\t\t\tmarginBottom: 4,\n\t\t\t\tdisplay: derived(reader => this._warning.read(reader) ? 'block' : 'none'),\n\t\t\t}\n\t\t}, [\n\t\t\tthis._warningMessageContentNode,\n\t\t]).keepUpdated(this._store);\n\t\tthis.nodes = h('div.inlineSuggestionsHints', { className: this.withBorder ? 'monaco-hover monaco-hover-content' : '' }, [\n\t\t\tthis._warningMessageNode.element,\n\t\t\th('div@toolBar'),\n\t\t]);\n\t\tthis.previousAction = this._register(this.createCommandAction(showPreviousInlineSuggestionActionId, localize('previous', 'Previous'), ThemeIcon.asClassName(inlineSuggestionHintsPreviousIcon)));\n\t\tthis.availableSuggestionCountAction = this._register(new Action('inlineSuggestionHints.availableSuggestionCount', '', undefined, false));\n\t\tthis.nextAction = this._register(this.createCommandAction(showNextInlineSuggestionActionId, localize('next', 'Next'), ThemeIcon.asClassName(inlineSuggestionHintsNextIcon)));\n\t\tthis.inlineCompletionsActionsMenus = this._register(this._menuService.createMenu(\n\t\t\tMenuId.InlineCompletionsActions,\n\t\t\tthis._contextKeyService\n\t\t));\n\t\tthis.clearAvailableSuggestionCountLabelDebounced = this._register(new RunOnceScheduler(() => {\n\t\t\tthis.availableSuggestionCountAction.label = '';\n\t\t}, 100));\n\t\tthis.disableButtonsDebounced = this._register(new RunOnceScheduler(() => {\n\t\t\tthis.previousAction.enabled = this.nextAction.enabled = false;\n\t\t}, 100));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tthis._warningMessageContentNode.read(reader);\n\t\t\tthis._warningMessageNode.readEffect(reader);\n\t\t\t// Only update after the warning message node has been rendered\n\t\t\tthis._relayout();\n\t\t}));\n\n\t\tthis.toolBar = this._register(instantiationService.createInstance(CustomizedMenuWorkbenchToolBar, this.nodes.toolBar, MenuId.InlineSuggestionToolbar, {\n\t\t\tmenuOptions: { renderShortTitle: true },\n\t\t\ttoolbarOptions: { primaryGroup: g => g.startsWith('primary') },\n\t\t\tactionViewItemProvider: (action, options) => {\n\t\t\t\tif (action instanceof MenuItemAction) {\n\t\t\t\t\treturn instantiationService.createInstance(StatusBarViewItem, action, undefined);\n\t\t\t\t}\n\t\t\t\tif (action === this.availableSuggestionCountAction) {\n\t\t\t\t\tconst a = new ActionViewItemWithClassName(undefined, action, { label: true, icon: false });\n\t\t\t\t\ta.setClass('availableSuggestionCount');\n\t\t\t\t\treturn a;\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t\ttelemetrySource: 'InlineSuggestionToolbar',\n\t\t}));\n\n\t\tthis.toolBar.setPrependedPrimaryActions([\n\t\t\tthis.previousAction,\n\t\t\tthis.availableSuggestionCountAction,\n\t\t\tthis.nextAction,\n\t\t]);\n\n\t\tthis._register(this.toolBar.onDidChangeDropdownVisibility(e => {\n\t\t\tInlineSuggestionHintsContentWidget._dropDownVisible = e;\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description update position */\n\t\t\tthis._position.read(reader);\n\t\t\tthis.editor.layoutContentWidget(this);\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description counts */\n\t\t\tconst suggestionCount = this._suggestionCount.read(reader);\n\t\t\tconst currentSuggestionIdx = this._currentSuggestionIdx.read(reader);\n\n\t\t\tif (suggestionCount !== undefined) {\n\t\t\t\tthis.clearAvailableSuggestionCountLabelDebounced.cancel();\n\t\t\t\tthis.availableSuggestionCountAction.label = `${currentSuggestionIdx + 1}/${suggestionCount}`;\n\t\t\t} else {\n\t\t\t\tthis.clearAvailableSuggestionCountLabelDebounced.schedule();\n\t\t\t}\n\n\t\t\tif (suggestionCount !== undefined && suggestionCount > 1) {\n\t\t\t\tthis.disableButtonsDebounced.cancel();\n\t\t\t\tthis.previousAction.enabled = this.nextAction.enabled = true;\n\t\t\t} else {\n\t\t\t\tthis.disableButtonsDebounced.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description extra commands */\n\t\t\tconst extraCommands = this._extraCommands.read(reader);\n\t\t\tconst extraActions = extraCommands.map<IAction>(c => ({\n\t\t\t\tclass: undefined,\n\t\t\t\tid: c.command.id,\n\t\t\t\tenabled: true,\n\t\t\t\ttooltip: c.command.tooltip || '',\n\t\t\t\tlabel: c.command.title,\n\t\t\t\trun: (event) => {\n\t\t\t\t\treturn this._commandService.executeCommand(c.command.id);\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tfor (const [_, group] of this.inlineCompletionsActionsMenus.getActions()) {\n\t\t\t\tfor (const action of group) {\n\t\t\t\t\tif (action instanceof MenuItemAction) {\n\t\t\t\t\t\textraActions.push(action);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (extraActions.length > 0) {\n\t\t\t\textraActions.unshift(new Separator());\n\t\t\t}\n\n\t\t\tthis.toolBar.setAdditionalSecondaryActions(extraActions);\n\t\t}));\n\t}\n\n\tgetId(): string { return this.id; }\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this.nodes.root;\n\t}\n\n\tgetPosition(): IContentWidgetPosition | null {\n\t\treturn {\n\t\t\tposition: this._position.get(),\n\t\t\tpreference: [ContentWidgetPositionPreference.ABOVE, ContentWidgetPositionPreference.BELOW],\n\t\t\tpositionAffinity: PositionAffinity.LeftOfInjectedText,\n\t\t};\n\t}\n}\n\nclass ActionViewItemWithClassName extends ActionViewItem {\n\tprivate _className: string | undefined = undefined;\n\n\tsetClass(className: string | undefined): void {\n\t\tthis._className = className;\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\t\tif (this._className) {\n\t\t\tcontainer.classList.add(this._className);\n\t\t}\n\t}\n\n\tprotected override updateTooltip(): void {\n\t\t// NOOP, disable tooltip\n\t}\n}\n\nclass StatusBarViewItem extends MenuEntryActionViewItem {\n\tprotected override updateLabel() {\n\t\tconst kb = this._keybindingService.lookupKeybinding(this._action.id, this._contextKeyService, true);\n\t\tif (!kb) {\n\t\t\treturn super.updateLabel();\n\t\t}\n\t\tif (this.label) {\n\t\t\tconst div = h('div.keybinding').root;\n\n\t\t\tconst k = this._register(new KeybindingLabel(div, OS, { disableTitle: true, ...unthemedKeybindingLabelOptions }));\n\t\t\tk.set(kb);\n\t\t\tthis.label.textContent = this._action.label;\n\t\t\tthis.label.appendChild(div);\n\t\t\tthis.label.classList.add('inlineSuggestionStatusBarItemLabel');\n\t\t}\n\t}\n\n\tprotected override updateTooltip(): void {\n\t\t// NOOP, disable tooltip\n\t}\n}\n\nexport class CustomizedMenuWorkbenchToolBar extends WorkbenchToolBar {\n\tprivate readonly menu;\n\tprivate additionalActions: IAction[];\n\tprivate prependedPrimaryActions: IAction[];\n\tprivate additionalPrimaryActions: IAction[];\n\n\tconstructor(\n\t\tcontainer: HTMLElement,\n\t\tprivate readonly menuId: MenuId,\n\t\tprivate readonly options2: IMenuWorkbenchToolBarOptions | undefined,\n\t\t@IMenuService private readonly menuService: IMenuService,\n\t\t@IContextKeyService private readonly contextKeyService: IContextKeyService,\n\t\t@IContextMenuService contextMenuService: IContextMenuService,\n\t\t@IKeybindingService keybindingService: IKeybindingService,\n\t\t@ICommandService commandService: ICommandService,\n\t\t@ITelemetryService telemetryService: ITelemetryService,\n\t) {\n\t\tsuper(container, { resetMenu: menuId, ...options2 }, menuService, contextKeyService, contextMenuService, keybindingService, commandService, telemetryService);\n\t\tthis.menu = this._store.add(this.menuService.createMenu(this.menuId, this.contextKeyService, { emitEventsForSubmenuChanges: true }));\n\t\tthis.additionalActions = [];\n\t\tthis.prependedPrimaryActions = [];\n\t\tthis.additionalPrimaryActions = [];\n\n\t\tthis._store.add(this.menu.onDidChange(() => this.updateToolbar()));\n\t\tthis.updateToolbar();\n\t}\n\n\tprivate updateToolbar(): void {\n\t\tconst { primary, secondary } = getActionBarActions(\n\t\t\tthis.menu.getActions(this.options2?.menuOptions),\n\t\t\tthis.options2?.toolbarOptions?.primaryGroup, this.options2?.toolbarOptions?.shouldInlineSubmenu, this.options2?.toolbarOptions?.useSeparatorsInPrimaryActions\n\t\t);\n\n\t\tsecondary.push(...this.additionalActions);\n\t\tprimary.unshift(...this.prependedPrimaryActions);\n\t\tprimary.push(...this.additionalPrimaryActions);\n\t\tthis.setActions(primary, secondary);\n\t}\n\n\tsetPrependedPrimaryActions(actions: IAction[]): void {\n\t\tif (equals(this.prependedPrimaryActions, actions, (a, b) => a === b)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.prependedPrimaryActions = actions;\n\t\tthis.updateToolbar();\n\t}\n\n\tsetAdditionalSecondaryActions(actions: IAction[]): void {\n\t\tif (equals(this.additionalActions, actions, (a, b) => a === b)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.additionalActions = actions;\n\t\tthis.updateToolbar();\n\t}\n}\n"]}
1
+ {"version":3,"sources":["vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.ts"],"names":[],"mappings":"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","file":"inlineCompletionsHintsWidget.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 { h, n } from '../../../../../base/browser/dom.js';\nimport { renderMarkdown } from '../../../../../base/browser/markdownRenderer.js';\nimport { ActionViewItem } from '../../../../../base/browser/ui/actionbar/actionViewItems.js';\nimport { KeybindingLabel, unthemedKeybindingLabelOptions } from '../../../../../base/browser/ui/keybindingLabel/keybindingLabel.js';\nimport { Action, IAction, Separator } from '../../../../../base/common/actions.js';\nimport { equals } from '../../../../../base/common/arrays.js';\nimport { RunOnceScheduler } from '../../../../../base/common/async.js';\nimport { Codicon } from '../../../../../base/common/codicons.js';\nimport { createHotClass } from '../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable, toDisposable } from '../../../../../base/common/lifecycle.js';\nimport { IObservable, autorun, autorunWithStore, derived, derivedObservableWithCache, observableFromEvent } from '../../../../../base/common/observable.js';\nimport { OS } from '../../../../../base/common/platform.js';\nimport { ThemeIcon } from '../../../../../base/common/themables.js';\nimport { localize } from '../../../../../nls.js';\nimport { MenuEntryActionViewItem, getActionBarActions } from '../../../../../platform/actions/browser/menuEntryActionViewItem.js';\nimport { IMenuWorkbenchToolBarOptions, WorkbenchToolBar } from '../../../../../platform/actions/browser/toolbar.js';\nimport { IMenuService, MenuId, MenuItemAction } from '../../../../../platform/actions/common/actions.js';\nimport { ICommandService } from '../../../../../platform/commands/common/commands.js';\nimport { IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js';\nimport { IContextMenuService } from '../../../../../platform/contextview/browser/contextView.js';\nimport { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js';\nimport { ITelemetryService } from '../../../../../platform/telemetry/common/telemetry.js';\nimport { registerIcon } from '../../../../../platform/theme/common/iconRegistry.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from '../../../../browser/editorBrowser.js';\nimport { EditorOption } from '../../../../common/config/editorOptions.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { InlineCompletionCommand, InlineCompletionTriggerKind, InlineCompletionWarning } from '../../../../common/languages.js';\nimport { PositionAffinity } from '../../../../common/model.js';\nimport { showNextInlineSuggestionActionId, showPreviousInlineSuggestionActionId } from '../controller/commandIds.js';\nimport { InlineCompletionsModel } from '../model/inlineCompletionsModel.js';\nimport './inlineCompletionsHintsWidget.css';\n\nexport class InlineCompletionsHintsWidget extends Disposable {\n\tprivate readonly alwaysShowToolbar;\n\n\tprivate sessionPosition: Position | undefined;\n\n\tprivate readonly position;\n\n\tconstructor(\n\t\tprivate readonly editor: ICodeEditor,\n\t\tprivate readonly model: IObservable<InlineCompletionsModel | undefined>,\n\t\t@IInstantiationService private readonly instantiationService: IInstantiationService,\n\t) {\n\t\tsuper();\n\t\tthis.alwaysShowToolbar = observableFromEvent(this, this.editor.onDidChangeConfiguration, () => this.editor.getOption(EditorOption.inlineSuggest).showToolbar === 'always');\n\t\tthis.sessionPosition = undefined;\n\t\tthis.position = derived(this, reader => {\n\t\t\tconst ghostText = this.model.read(reader)?.primaryGhostText.read(reader);\n\n\t\t\tif (!this.alwaysShowToolbar.read(reader) || !ghostText || ghostText.parts.length === 0) {\n\t\t\t\tthis.sessionPosition = undefined;\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst firstColumn = ghostText.parts[0].column;\n\t\t\tif (this.sessionPosition && this.sessionPosition.lineNumber !== ghostText.lineNumber) {\n\t\t\t\tthis.sessionPosition = undefined;\n\t\t\t}\n\n\t\t\tconst position = new Position(ghostText.lineNumber, Math.min(firstColumn, this.sessionPosition?.column ?? Number.MAX_SAFE_INTEGER));\n\t\t\tthis.sessionPosition = position;\n\t\t\treturn position;\n\t\t});\n\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\t/** @description setup content widget */\n\t\t\tconst model = this.model.read(reader);\n\t\t\tif (!model || !this.alwaysShowToolbar.read(reader)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst contentWidgetValue = derived((reader) => {\n\t\t\t\tconst contentWidget = reader.store.add(this.instantiationService.createInstance(\n\t\t\t\t\tInlineSuggestionHintsContentWidget.hot.read(reader),\n\t\t\t\t\tthis.editor,\n\t\t\t\t\ttrue,\n\t\t\t\t\tthis.position,\n\t\t\t\t\tmodel.selectedInlineCompletionIndex,\n\t\t\t\t\tmodel.inlineCompletionsCount,\n\t\t\t\t\tmodel.activeCommands,\n\t\t\t\t\tmodel.warning,\n\t\t\t\t\t() => { },\n\t\t\t\t));\n\t\t\t\teditor.addContentWidget(contentWidget);\n\t\t\t\treader.store.add(toDisposable(() => editor.removeContentWidget(contentWidget)));\n\n\t\t\t\treader.store.add(autorun(reader => {\n\t\t\t\t\t/** @description request explicit */\n\t\t\t\t\tconst position = this.position.read(reader);\n\t\t\t\t\tif (!position) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (model.lastTriggerKind.read(reader) !== InlineCompletionTriggerKind.Explicit) {\n\t\t\t\t\t\tmodel.triggerExplicitly();\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t\treturn contentWidget;\n\t\t\t});\n\n\t\t\tconst hadPosition = derivedObservableWithCache(this, (reader, lastValue) => !!this.position.read(reader) || !!lastValue);\n\t\t\tstore.add(autorun(reader => {\n\t\t\t\tif (hadPosition.read(reader)) {\n\t\t\t\t\tcontentWidgetValue.read(reader);\n\t\t\t\t}\n\t\t\t}));\n\t\t}));\n\t}\n}\n\nconst inlineSuggestionHintsNextIcon = registerIcon('inline-suggestion-hints-next', Codicon.chevronRight, localize('parameterHintsNextIcon', 'Icon for show next parameter hint.'));\nconst inlineSuggestionHintsPreviousIcon = registerIcon('inline-suggestion-hints-previous', Codicon.chevronLeft, localize('parameterHintsPreviousIcon', 'Icon for show previous parameter hint.'));\n\nexport class InlineSuggestionHintsContentWidget extends Disposable implements IContentWidget {\n\tpublic static readonly hot = createHotClass(this);\n\n\tprivate static _dropDownVisible = false;\n\tpublic static get dropDownVisible() { return this._dropDownVisible; }\n\n\tprivate static id = 0;\n\n\tprivate readonly id;\n\tpublic readonly allowEditorOverflow;\n\tpublic readonly suppressMouseDown;\n\n\tprivate readonly _warningMessageContentNode;\n\n\tprivate readonly _warningMessageNode;\n\n\tprivate readonly nodes;\n\n\tprivate createCommandAction(commandId: string, label: string, iconClassName: string): Action {\n\t\tconst action = new Action(\n\t\t\tcommandId,\n\t\t\tlabel,\n\t\t\ticonClassName,\n\t\t\ttrue,\n\t\t\t() => this._commandService.executeCommand(commandId),\n\t\t);\n\t\tconst kb = this.keybindingService.lookupKeybinding(commandId, this._contextKeyService);\n\t\tlet tooltip = label;\n\t\tif (kb) {\n\t\t\ttooltip = localize({ key: 'content', comment: ['A label', 'A keybinding'] }, '{0} ({1})', label, kb.getLabel());\n\t\t}\n\t\taction.tooltip = tooltip;\n\t\treturn action;\n\t}\n\n\tprivate readonly previousAction;\n\tprivate readonly availableSuggestionCountAction;\n\tprivate readonly nextAction;\n\n\tprivate readonly toolBar: CustomizedMenuWorkbenchToolBar;\n\n\t// TODO@hediet: deprecate MenuId.InlineCompletionsActions\n\tprivate readonly inlineCompletionsActionsMenus;\n\n\tprivate readonly clearAvailableSuggestionCountLabelDebounced;\n\n\tprivate readonly disableButtonsDebounced;\n\n\tconstructor(\n\t\tprivate readonly editor: ICodeEditor,\n\t\tprivate readonly withBorder: boolean,\n\t\tprivate readonly _position: IObservable<Position | null>,\n\t\tprivate readonly _currentSuggestionIdx: IObservable<number>,\n\t\tprivate readonly _suggestionCount: IObservable<number | undefined>,\n\t\tprivate readonly _extraCommands: IObservable<InlineCompletionCommand[]>,\n\t\tprivate readonly _warning: IObservable<InlineCompletionWarning | undefined>,\n\t\tprivate readonly _relayout: () => void,\n\t\t@ICommandService private readonly _commandService: ICommandService,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@IKeybindingService private readonly keybindingService: IKeybindingService,\n\t\t@IContextKeyService private readonly _contextKeyService: IContextKeyService,\n\t\t@IMenuService private readonly _menuService: IMenuService,\n\t) {\n\t\tsuper();\n\t\tthis.id = `InlineSuggestionHintsContentWidget${InlineSuggestionHintsContentWidget.id++}`;\n\t\tthis.allowEditorOverflow = true;\n\t\tthis.suppressMouseDown = false;\n\t\tthis._warningMessageContentNode = derived((reader) => {\n\t\t\tconst warning = this._warning.read(reader);\n\t\t\tif (!warning) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (typeof warning.message === 'string') {\n\t\t\t\treturn warning.message;\n\t\t\t}\n\t\t\tconst markdownElement = reader.store.add(renderMarkdown(warning.message));\n\t\t\treturn markdownElement.element;\n\t\t});\n\t\tthis._warningMessageNode = n.div({\n\t\t\tclass: 'warningMessage',\n\t\t\tstyle: {\n\t\t\t\tmaxWidth: 400,\n\t\t\t\tmargin: 4,\n\t\t\t\tmarginBottom: 4,\n\t\t\t\tdisplay: derived(reader => this._warning.read(reader) ? 'block' : 'none'),\n\t\t\t}\n\t\t}, [\n\t\t\tthis._warningMessageContentNode,\n\t\t]).keepUpdated(this._store);\n\t\tthis.nodes = h('div.inlineSuggestionsHints', { className: this.withBorder ? 'monaco-hover monaco-hover-content' : '' }, [\n\t\t\tthis._warningMessageNode.element,\n\t\t\th('div@toolBar'),\n\t\t]);\n\t\tthis.previousAction = this._register(this.createCommandAction(showPreviousInlineSuggestionActionId, localize('previous', 'Previous'), ThemeIcon.asClassName(inlineSuggestionHintsPreviousIcon)));\n\t\tthis.availableSuggestionCountAction = this._register(new Action('inlineSuggestionHints.availableSuggestionCount', '', undefined, false));\n\t\tthis.nextAction = this._register(this.createCommandAction(showNextInlineSuggestionActionId, localize('next', 'Next'), ThemeIcon.asClassName(inlineSuggestionHintsNextIcon)));\n\t\tthis.inlineCompletionsActionsMenus = this._register(this._menuService.createMenu(\n\t\t\tMenuId.InlineCompletionsActions,\n\t\t\tthis._contextKeyService\n\t\t));\n\t\tthis.clearAvailableSuggestionCountLabelDebounced = this._register(new RunOnceScheduler(() => {\n\t\t\tthis.availableSuggestionCountAction.label = '';\n\t\t}, 100));\n\t\tthis.disableButtonsDebounced = this._register(new RunOnceScheduler(() => {\n\t\t\tthis.previousAction.enabled = this.nextAction.enabled = false;\n\t\t}, 100));\n\n\t\tthis._register(autorun(reader => {\n\t\t\tthis._warningMessageContentNode.read(reader);\n\t\t\tthis._warningMessageNode.readEffect(reader);\n\t\t\t// Only update after the warning message node has been rendered\n\t\t\tthis._relayout();\n\t\t}));\n\n\t\tthis.toolBar = this._register(instantiationService.createInstance(CustomizedMenuWorkbenchToolBar, this.nodes.toolBar, MenuId.InlineSuggestionToolbar, {\n\t\t\tmenuOptions: { renderShortTitle: true },\n\t\t\ttoolbarOptions: { primaryGroup: g => g.startsWith('primary') },\n\t\t\tactionViewItemProvider: (action, options) => {\n\t\t\t\tif (action instanceof MenuItemAction) {\n\t\t\t\t\treturn instantiationService.createInstance(StatusBarViewItem, action, undefined);\n\t\t\t\t}\n\t\t\t\tif (action === this.availableSuggestionCountAction) {\n\t\t\t\t\tconst a = new ActionViewItemWithClassName(undefined, action, { label: true, icon: false });\n\t\t\t\t\ta.setClass('availableSuggestionCount');\n\t\t\t\t\treturn a;\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t\ttelemetrySource: 'InlineSuggestionToolbar',\n\t\t}));\n\n\t\tthis.toolBar.setPrependedPrimaryActions([\n\t\t\tthis.previousAction,\n\t\t\tthis.availableSuggestionCountAction,\n\t\t\tthis.nextAction,\n\t\t]);\n\n\t\tthis._register(this.toolBar.onDidChangeDropdownVisibility(e => {\n\t\t\tInlineSuggestionHintsContentWidget._dropDownVisible = e;\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description update position */\n\t\t\tthis._position.read(reader);\n\t\t\tthis.editor.layoutContentWidget(this);\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description counts */\n\t\t\tconst suggestionCount = this._suggestionCount.read(reader);\n\t\t\tconst currentSuggestionIdx = this._currentSuggestionIdx.read(reader);\n\n\t\t\tif (suggestionCount !== undefined) {\n\t\t\t\tthis.clearAvailableSuggestionCountLabelDebounced.cancel();\n\t\t\t\tthis.availableSuggestionCountAction.label = `${currentSuggestionIdx + 1}/${suggestionCount}`;\n\t\t\t} else {\n\t\t\t\tthis.clearAvailableSuggestionCountLabelDebounced.schedule();\n\t\t\t}\n\n\t\t\tif (suggestionCount !== undefined && suggestionCount > 1) {\n\t\t\t\tthis.disableButtonsDebounced.cancel();\n\t\t\t\tthis.previousAction.enabled = this.nextAction.enabled = true;\n\t\t\t} else {\n\t\t\t\tthis.disableButtonsDebounced.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description extra commands */\n\t\t\tconst extraCommands = this._extraCommands.read(reader);\n\t\t\tconst extraActions = extraCommands.map<IAction>(c => ({\n\t\t\t\tclass: undefined,\n\t\t\t\tid: c.command.id,\n\t\t\t\tenabled: true,\n\t\t\t\ttooltip: c.command.tooltip || '',\n\t\t\t\tlabel: c.command.title,\n\t\t\t\trun: (event) => {\n\t\t\t\t\treturn this._commandService.executeCommand(c.command.id);\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tfor (const [_, group] of this.inlineCompletionsActionsMenus.getActions()) {\n\t\t\t\tfor (const action of group) {\n\t\t\t\t\tif (action instanceof MenuItemAction) {\n\t\t\t\t\t\textraActions.push(action);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (extraActions.length > 0) {\n\t\t\t\textraActions.unshift(new Separator());\n\t\t\t}\n\n\t\t\tthis.toolBar.setAdditionalSecondaryActions(extraActions);\n\t\t}));\n\t}\n\n\tgetId(): string { return this.id; }\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this.nodes.root;\n\t}\n\n\tgetPosition(): IContentWidgetPosition | null {\n\t\treturn {\n\t\t\tposition: this._position.get(),\n\t\t\tpreference: [ContentWidgetPositionPreference.ABOVE, ContentWidgetPositionPreference.BELOW],\n\t\t\tpositionAffinity: PositionAffinity.LeftOfInjectedText,\n\t\t};\n\t}\n}\n\nclass ActionViewItemWithClassName extends ActionViewItem {\n\tprivate _className: string | undefined = undefined;\n\n\tsetClass(className: string | undefined): void {\n\t\tthis._className = className;\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\t\tif (this._className) {\n\t\t\tcontainer.classList.add(this._className);\n\t\t}\n\t}\n\n\tprotected override updateTooltip(): void {\n\t\t// NOOP, disable tooltip\n\t}\n}\n\nclass StatusBarViewItem extends MenuEntryActionViewItem {\n\tprotected override updateLabel() {\n\t\tconst kb = this._keybindingService.lookupKeybinding(this._action.id, this._contextKeyService, true);\n\t\tif (!kb) {\n\t\t\treturn super.updateLabel();\n\t\t}\n\t\tif (this.label) {\n\t\t\tconst div = h('div.keybinding').root;\n\n\t\t\tconst k = this._register(new KeybindingLabel(div, OS, { disableTitle: true, ...unthemedKeybindingLabelOptions }));\n\t\t\tk.set(kb);\n\t\t\tthis.label.textContent = this._action.label;\n\t\t\tthis.label.appendChild(div);\n\t\t\tthis.label.classList.add('inlineSuggestionStatusBarItemLabel');\n\t\t}\n\t}\n\n\tprotected override updateTooltip(): void {\n\t\t// NOOP, disable tooltip\n\t}\n}\n\nexport class CustomizedMenuWorkbenchToolBar extends WorkbenchToolBar {\n\tprivate readonly menu;\n\tprivate additionalActions: IAction[];\n\tprivate prependedPrimaryActions: IAction[];\n\tprivate additionalPrimaryActions: IAction[];\n\n\tconstructor(\n\t\tcontainer: HTMLElement,\n\t\tprivate readonly menuId: MenuId,\n\t\tprivate readonly options2: IMenuWorkbenchToolBarOptions | undefined,\n\t\t@IMenuService private readonly menuService: IMenuService,\n\t\t@IContextKeyService private readonly contextKeyService: IContextKeyService,\n\t\t@IContextMenuService contextMenuService: IContextMenuService,\n\t\t@IKeybindingService keybindingService: IKeybindingService,\n\t\t@ICommandService commandService: ICommandService,\n\t\t@ITelemetryService telemetryService: ITelemetryService,\n\t) {\n\t\tsuper(container, { resetMenu: menuId, ...options2 }, menuService, contextKeyService, contextMenuService, keybindingService, commandService, telemetryService);\n\t\tthis.menu = this._store.add(this.menuService.createMenu(this.menuId, this.contextKeyService, { emitEventsForSubmenuChanges: true }));\n\t\tthis.additionalActions = [];\n\t\tthis.prependedPrimaryActions = [];\n\t\tthis.additionalPrimaryActions = [];\n\n\t\tthis._store.add(this.menu.onDidChange(() => this.updateToolbar()));\n\t\tthis.updateToolbar();\n\t}\n\n\tprivate updateToolbar(): void {\n\t\tconst { primary, secondary } = getActionBarActions(\n\t\t\tthis.menu.getActions(this.options2?.menuOptions),\n\t\t\tthis.options2?.toolbarOptions?.primaryGroup, this.options2?.toolbarOptions?.shouldInlineSubmenu, this.options2?.toolbarOptions?.useSeparatorsInPrimaryActions\n\t\t);\n\n\t\tsecondary.push(...this.additionalActions);\n\t\tprimary.unshift(...this.prependedPrimaryActions);\n\t\tprimary.push(...this.additionalPrimaryActions);\n\t\tthis.setActions(primary, secondary);\n\t}\n\n\tsetPrependedPrimaryActions(actions: IAction[]): void {\n\t\tif (equals(this.prependedPrimaryActions, actions, (a, b) => a === b)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.prependedPrimaryActions = actions;\n\t\tthis.updateToolbar();\n\t}\n\n\tsetAdditionalSecondaryActions(actions: IAction[]): void {\n\t\tif (equals(this.additionalActions, actions, (a, b) => a === b)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.additionalActions = actions;\n\t\tthis.updateToolbar();\n\t}\n}\n"]}
@@ -11,7 +11,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
11
11
  var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  return function (target, key) { decorator(target, key, paramIndex); }
13
13
  };
14
- var GhostTextView_1;
15
14
  import { createTrustedTypesPolicy } from '../../../../../../base/browser/trustedTypes.js';
16
15
  import { renderIcon } from '../../../../../../base/browser/ui/iconLabel/iconLabels.js';
17
16
  import { Codicon } from '../../../../../../base/common/codicons.js';
@@ -44,8 +43,7 @@ import { sum } from '../../../../../../base/common/arrays.js';
44
43
  const USE_SQUIGGLES_FOR_WARNING = true;
45
44
  const GHOST_TEXT_CLASS_NAME = 'ghost-text';
46
45
  let GhostTextView = class GhostTextView extends Disposable {
47
- static { GhostTextView_1 = this; }
48
- static { this.hot = createHotClass(GhostTextView_1); }
46
+ static { this.hot = createHotClass(this); }
49
47
  constructor(_editor, _model, _options, _shouldKeepCursorStable, _isClickable, _languageService) {
50
48
  super();
51
49
  this._editor = _editor;
@@ -276,7 +274,7 @@ let GhostTextView = class GhostTextView extends Disposable {
276
274
  return this._additionalLinesWidget.viewZoneId === viewZoneId;
277
275
  }
278
276
  };
279
- GhostTextView = GhostTextView_1 = __decorate([
277
+ GhostTextView = __decorate([
280
278
  __param(5, ILanguageService)
281
279
  ], GhostTextView);
282
280
  export { GhostTextView };
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts","vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts"],"names":[],"mappings":"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","file":"ghostTextView.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 { createTrustedTypesPolicy } from '../../../../../../base/browser/trustedTypes.js';\nimport { renderIcon } from '../../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../../base/common/codicons.js';\nimport { Emitter, Event } from '../../../../../../base/common/event.js';\nimport { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../../../../../../base/common/lifecycle.js';\nimport { IObservable, autorun, autorunWithStore, constObservable, derived, observableSignalFromEvent, observableValue } from '../../../../../../base/common/observable.js';\nimport * as strings from '../../../../../../base/common/strings.js';\nimport { applyFontInfo } from '../../../../../browser/config/domFontInfo.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidgetPosition, IViewZoneChangeAccessor, MouseTargetType } from '../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../browser/observableCodeEditor.js';\nimport { EditorFontLigatures, EditorOption, IComputedEditorOptions } from '../../../../../common/config/editorOptions.js';\nimport { StringEdit, StringReplacement } from '../../../../../common/core/edits/stringEdit.js';\nimport { Position } from '../../../../../common/core/position.js';\nimport { Range } from '../../../../../common/core/range.js';\nimport { StringBuilder } from '../../../../../common/core/stringBuilder.js';\nimport { IconPath } from '../../../../../common/languages.js';\nimport { ILanguageService } from '../../../../../common/languages/language.js';\nimport { IModelDeltaDecoration, ITextModel, InjectedTextCursorStops, PositionAffinity } from '../../../../../common/model.js';\nimport { LineTokens } from '../../../../../common/tokens/lineTokens.js';\nimport { LineDecoration } from '../../../../../common/viewLayout/lineDecorations.js';\nimport { RenderLineInput, renderViewLine } from '../../../../../common/viewLayout/viewLineRenderer.js';\nimport { GhostText, GhostTextReplacement, IGhostTextLine } from '../../model/ghostText.js';\nimport { RangeSingleLine } from '../../../../../common/core/ranges/rangeSingleLine.js';\nimport { ColumnRange } from '../../../../../common/core/ranges/columnRange.js';\nimport { addDisposableListener, getWindow, isHTMLElement, n } from '../../../../../../base/browser/dom.js';\nimport './ghostTextView.css';\nimport { IMouseEvent, StandardMouseEvent } from '../../../../../../base/browser/mouseEvent.js';\nimport { CodeEditorWidget } from '../../../../../browser/widget/codeEditor/codeEditorWidget.js';\nimport { TokenWithTextArray } from '../../../../../common/tokens/tokenWithTextArray.js';\nimport { InlineCompletionViewData } from '../inlineEdits/inlineEditsViewInterface.js';\nimport { InlineDecorationType } from '../../../../../common/viewModel/inlineDecorations.js';\nimport { sum } from '../../../../../../base/common/arrays.js';\n\nexport interface IGhostTextWidgetModel {\n\treadonly targetTextModel: IObservable<ITextModel | undefined>;\n\treadonly ghostText: IObservable<GhostText | GhostTextReplacement | undefined>;\n\treadonly warning: IObservable<{ icon: IconPath | undefined } | undefined>;\n\treadonly minReservedLineCount: IObservable<number>;\n\n\treadonly handleInlineCompletionShown: IObservable<(viewData: InlineCompletionViewData) => void>;\n}\n\nconst USE_SQUIGGLES_FOR_WARNING = true;\nconst GHOST_TEXT_CLASS_NAME = 'ghost-text';\n\nexport class GhostTextView extends Disposable {\n\tprivate readonly _isDisposed;\n\tprivate readonly _editorObs;\n\tpublic static hot = createHotClass(GhostTextView);\n\n\tprivate _warningState;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _model: IGhostTextWidgetModel,\n\t\tprivate readonly _options: IObservable<{\n\t\t\textraClasses?: string[];\n\t\t\tsyntaxHighlightingEnabled: boolean;\n\t\t}>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t\t@ILanguageService private readonly _languageService: ILanguageService,\n\t) {\n\t\tsuper();\n\t\tthis._isDisposed = observableValue(this, false);\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\t\tthis._warningState = derived(reader => {\n\t\t\tconst gt = this._model.ghostText.read(reader);\n\t\t\tif (!gt) { return undefined; }\n\t\t\tconst warning = this._model.warning.read(reader);\n\t\t\tif (!warning) { return undefined; }\n\t\t\treturn { lineNumber: gt.lineNumber, position: new Position(gt.lineNumber, gt.parts[0].column), icon: warning.icon };\n\t\t});\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._useSyntaxHighlighting = this._options.map(o => o.syntaxHighlightingEnabled);\n\t\tthis._extraClassNames = derived(this, reader => {\n\t\t\tconst extraClasses = [...this._options.read(reader).extraClasses ?? []];\n\t\t\tif (this._useSyntaxHighlighting.read(reader)) {\n\t\t\t\textraClasses.push('syntax-highlighted');\n\t\t\t}\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING && this._warningState.read(reader)) {\n\t\t\t\textraClasses.push('warning');\n\t\t\t}\n\t\t\tconst extraClassNames = extraClasses.map(c => ` ${c}`).join('');\n\t\t\treturn extraClassNames;\n\t\t});\n\t\tthis.uiState = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return undefined; }\n\t\t\tconst textModel = this._editorObs.model.read(reader);\n\t\t\tif (textModel !== this._model.targetTextModel.read(reader)) { return undefined; }\n\t\t\tconst ghostText = this._model.ghostText.read(reader);\n\t\t\tif (!ghostText) { return undefined; }\n\n\t\t\tconst replacedRange = ghostText instanceof GhostTextReplacement ? ghostText.columnRange : undefined;\n\n\t\t\tconst syntaxHighlightingEnabled = this._useSyntaxHighlighting.read(reader);\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\t\t\tconst { inlineTexts, additionalLines, hiddenRange, additionalLinesOriginalSuffix } = computeGhostTextViewData(ghostText, textModel, GHOST_TEXT_CLASS_NAME + extraClassNames);\n\n\t\t\tconst currentLine = textModel.getLineContent(ghostText.lineNumber);\n\t\t\tconst edit = new StringEdit(inlineTexts.map(t => StringReplacement.insert(t.column - 1, t.text)));\n\t\t\tconst tokens = syntaxHighlightingEnabled ? textModel.tokenization.tokenizeLinesAt(ghostText.lineNumber, [edit.apply(currentLine), ...additionalLines.map(l => l.content)]) : undefined;\n\t\t\tconst newRanges = edit.getNewRanges();\n\t\t\tconst inlineTextsWithTokens = inlineTexts.map((t, idx) => ({ ...t, tokens: tokens?.[0]?.getTokensInRange(newRanges[idx]) }));\n\n\t\t\tconst tokenizedAdditionalLines: LineData[] = additionalLines.map((l, idx) => {\n\t\t\t\tlet content = tokens?.[idx + 1] ?? LineTokens.createEmpty(l.content, this._languageService.languageIdCodec);\n\t\t\t\tif (idx === additionalLines.length - 1 && additionalLinesOriginalSuffix) {\n\t\t\t\t\tconst t = TokenWithTextArray.fromLineTokens(textModel.tokenization.getLineTokens(additionalLinesOriginalSuffix.lineNumber));\n\t\t\t\t\tconst existingContent = t.slice(additionalLinesOriginalSuffix.columnRange.toZeroBasedOffsetRange());\n\t\t\t\t\tcontent = TokenWithTextArray.fromLineTokens(content).append(existingContent).toLineTokens(content.languageIdCodec);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent,\n\t\t\t\t\tdecorations: l.decorations,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tconst cursorColumn = this._editor.getSelection()?.getStartPosition().column!;\n\t\t\tconst disjointInlineTexts = inlineTextsWithTokens.filter(inline => inline.text !== '');\n\t\t\tconst hasInsertionOnCurrentLine = disjointInlineTexts.length !== 0;\n\t\t\tconst renderData: InlineCompletionViewData = {\n\t\t\t\tcursorColumnDistance: (hasInsertionOnCurrentLine ? disjointInlineTexts[0].column : 1) - cursorColumn,\n\t\t\t\tcursorLineDistance: hasInsertionOnCurrentLine ? 0 : (additionalLines.findIndex(line => line.content !== '') + 1),\n\t\t\t\tlineCountOriginal: hasInsertionOnCurrentLine ? 1 : 0,\n\t\t\t\tlineCountModified: additionalLines.length + (hasInsertionOnCurrentLine ? 1 : 0),\n\t\t\t\tcharacterCountOriginal: 0,\n\t\t\t\tcharacterCountModified: sum(disjointInlineTexts.map(inline => inline.text.length)) + sum(tokenizedAdditionalLines.map(line => line.content.getTextLength())),\n\t\t\t\tdisjointReplacements: disjointInlineTexts.length + (additionalLines.length > 0 ? 1 : 0),\n\t\t\t\tsameShapeReplacements: disjointInlineTexts.length > 1 && tokenizedAdditionalLines.length === 0 ? disjointInlineTexts.every(inline => inline.text === disjointInlineTexts[0].text) : undefined,\n\t\t\t};\n\t\t\tthis._model.handleInlineCompletionShown.read(reader)?.(renderData);\n\n\t\t\treturn {\n\t\t\t\treplacedRange,\n\t\t\t\tinlineTexts: inlineTextsWithTokens,\n\t\t\t\tadditionalLines: tokenizedAdditionalLines,\n\t\t\t\thiddenRange,\n\t\t\t\tlineNumber: ghostText.lineNumber,\n\t\t\t\tadditionalReservedLineCount: this._model.minReservedLineCount.read(reader),\n\t\t\t\ttargetTextModel: textModel,\n\t\t\t\tsyntaxHighlightingEnabled,\n\t\t\t};\n\t\t});\n\t\tthis.decorations = derived(this, reader => {\n\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\tif (!uiState) { return []; }\n\n\t\t\tconst decorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\n\t\t\tif (uiState.replacedRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.replacedRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'inline-completion-text-to-replace' + extraClassNames, description: 'GhostTextReplacement' }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (uiState.hiddenRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.hiddenRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'ghost-text-hidden', description: 'ghost-text-hidden', }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (const p of uiState.inlineTexts) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: Range.fromPositions(new Position(uiState.lineNumber, p.column)),\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tdescription: 'ghost-text-decoration',\n\t\t\t\t\t\tafter: {\n\t\t\t\t\t\t\tcontent: p.text,\n\t\t\t\t\t\t\ttokens: p.tokens,\n\t\t\t\t\t\t\tinlineClassName: (p.preview ? 'ghost-text-decoration-preview' : 'ghost-text-decoration')\n\t\t\t\t\t\t\t\t+ (this._isClickable ? ' clickable' : '')\n\t\t\t\t\t\t\t\t+ extraClassNames\n\t\t\t\t\t\t\t\t+ p.lineDecorations.map(d => ' ' + d.className).join(' '), // TODO: take the ranges into account for line decorations\n\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.Left,\n\t\t\t\t\t\t\tattachedData: new GhostTextAttachedData(this),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn decorations;\n\t\t});\n\t\tthis._additionalLinesWidget = this._register(\n\t\t\tnew AdditionalLinesWidget(\n\t\t\t\tthis._editor,\n\t\t\t\tderived(reader => {\n\t\t\t\t\t/** @description lines */\n\t\t\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\t\t\treturn uiState ? {\n\t\t\t\t\t\tlineNumber: uiState.lineNumber,\n\t\t\t\t\t\tadditionalLines: uiState.additionalLines,\n\t\t\t\t\t\tminReservedLineCount: uiState.additionalReservedLineCount,\n\t\t\t\t\t\ttargetTextModel: uiState.targetTextModel,\n\t\t\t\t\t} : undefined;\n\t\t\t\t}),\n\t\t\t\tthis._shouldKeepCursorStable,\n\t\t\t\tthis._isClickable\n\t\t\t)\n\t\t);\n\t\tthis._isInlineTextHovered = this._editorObs.isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof GhostTextAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis.isHovered = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return false; }\n\t\t\treturn this._isInlineTextHovered.read(reader) || this._additionalLinesWidget.isHovered.read(reader);\n\t\t});\n\t\tthis.height = derived(this, reader => {\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight).read(reader);\n\t\t\treturn lineHeight + (this._additionalLinesWidget.viewZoneHeight.read(reader) ?? 0);\n\t\t});\n\n\t\tthis._register(toDisposable(() => { this._isDisposed.set(true, undefined); }));\n\t\tthis._register(this._editorObs.setDecorations(this.decorations));\n\n\t\tif (this._isClickable) {\n\t\t\tthis._register(this._additionalLinesWidget.onDidClick((e) => this._onDidClick.fire(e)));\n\t\t\tthis._register(this._editor.onMouseUp(e => {\n\t\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\t\tif (a instanceof GhostTextAttachedData && a.owner === this) {\n\t\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst state = this._warningState.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight);\n\t\t\tstore.add(this._editorObs.createContentWidget({\n\t\t\t\tposition: constObservable<IContentWidgetPosition>({\n\t\t\t\t\tposition: new Position(state.lineNumber, Number.MAX_SAFE_INTEGER),\n\t\t\t\t\tpreference: [ContentWidgetPositionPreference.EXACT],\n\t\t\t\t\tpositionAffinity: PositionAffinity.Right,\n\t\t\t\t}),\n\t\t\t\tallowEditorOverflow: false,\n\t\t\t\tdomNode: n.div({\n\t\t\t\t\tclass: 'ghost-text-view-warning-widget',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\twidth: lineHeight,\n\t\t\t\t\t\theight: lineHeight,\n\t\t\t\t\t\tmarginLeft: 4,\n\t\t\t\t\t\tcolor: 'orange',\n\t\t\t\t\t},\n\t\t\t\t\tref: (dom) => {\n\t\t\t\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\t\t\t\t(dom as any as WidgetDomElement).ghostTextViewWarningWidgetData = { range: Range.fromPositions(state.position) };\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'ghost-text-view-warning-widget-icon',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\talignContent: 'center',\n\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [\n\t\t\t\t\t\trenderIcon((state.icon && 'id' in state.icon) ? state.icon : Codicon.warning),\n\t\t\t\t\t])\n\t\t\t\t]).keepUpdated(store).element,\n\t\t\t}));\n\t\t}));\n\t}\n\n\tpublic static getWarningWidgetContext(domNode: HTMLElement): { range: Range } | undefined {\n\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\tconst data = (domNode as any as WidgetDomElement).ghostTextViewWarningWidgetData;\n\t\tif (data) {\n\t\t\treturn data;\n\t\t} else if (domNode.parentElement) {\n\t\t\treturn this.getWarningWidgetContext(domNode.parentElement);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate readonly _useSyntaxHighlighting;\n\n\tprivate readonly _extraClassNames;\n\n\tprivate readonly uiState;\n\n\tprivate readonly decorations;\n\n\tprivate readonly _additionalLinesWidget;\n\n\tprivate readonly _isInlineTextHovered;\n\n\tpublic readonly isHovered;\n\n\tpublic readonly height;\n\n\tpublic ownsViewZone(viewZoneId: string): boolean {\n\t\treturn this._additionalLinesWidget.viewZoneId === viewZoneId;\n\t}\n}\n\nclass GhostTextAttachedData {\n\tconstructor(public readonly owner: GhostTextView) { }\n}\n\ninterface WidgetDomElement {\n\tghostTextViewWarningWidgetData?: {\n\t\trange: Range;\n\t};\n}\n\nfunction computeGhostTextViewData(ghostText: GhostText | GhostTextReplacement, textModel: ITextModel, ghostTextClassName: string) {\n\tconst inlineTexts: { column: number; text: string; preview: boolean; lineDecorations: LineDecoration[] }[] = [];\n\tconst additionalLines: { content: string; decorations: LineDecoration[] }[] = [];\n\n\tfunction addToAdditionalLines(ghLines: readonly IGhostTextLine[], className: string | undefined) {\n\t\tif (additionalLines.length > 0) {\n\t\t\tconst lastLine = additionalLines[additionalLines.length - 1];\n\t\t\tif (className) {\n\t\t\t\tlastLine.decorations.push(new LineDecoration(\n\t\t\t\t\tlastLine.content.length + 1,\n\t\t\t\t\tlastLine.content.length + 1 + ghLines[0].line.length,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t));\n\t\t\t}\n\t\t\tlastLine.content += ghLines[0].line;\n\n\t\t\tghLines = ghLines.slice(1);\n\t\t}\n\t\tfor (const ghLine of ghLines) {\n\t\t\tadditionalLines.push({\n\t\t\t\tcontent: ghLine.line,\n\t\t\t\tdecorations: className ? [new LineDecoration(\n\t\t\t\t\t1,\n\t\t\t\t\tghLine.line.length + 1,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t), ...ghLine.lineDecorations] : [...ghLine.lineDecorations]\n\t\t\t});\n\t\t}\n\t}\n\n\tconst textBufferLine = textModel.getLineContent(ghostText.lineNumber);\n\n\tlet hiddenTextStartColumn: number | undefined = undefined;\n\tlet lastIdx = 0;\n\tfor (const part of ghostText.parts) {\n\t\tlet ghLines = part.lines;\n\t\tif (hiddenTextStartColumn === undefined) {\n\t\t\tinlineTexts.push({ column: part.column, text: ghLines[0].line, preview: part.preview, lineDecorations: ghLines[0].lineDecorations });\n\t\t\tghLines = ghLines.slice(1);\n\t\t} else {\n\t\t\taddToAdditionalLines([{ line: textBufferLine.substring(lastIdx, part.column - 1), lineDecorations: [] }], undefined);\n\t\t}\n\n\t\tif (ghLines.length > 0) {\n\t\t\taddToAdditionalLines(ghLines, ghostTextClassName);\n\t\t\tif (hiddenTextStartColumn === undefined && part.column <= textBufferLine.length) {\n\t\t\t\thiddenTextStartColumn = part.column;\n\t\t\t}\n\t\t}\n\n\t\tlastIdx = part.column - 1;\n\t}\n\tlet additionalLinesOriginalSuffix: RangeSingleLine | undefined = undefined;\n\tif (hiddenTextStartColumn !== undefined) {\n\t\tadditionalLinesOriginalSuffix = new RangeSingleLine(ghostText.lineNumber, new ColumnRange(lastIdx + 1, textBufferLine.length + 1));\n\t}\n\n\tconst hiddenRange = hiddenTextStartColumn !== undefined ? new ColumnRange(hiddenTextStartColumn, textBufferLine.length + 1) : undefined;\n\n\treturn {\n\t\tinlineTexts,\n\t\tadditionalLines,\n\t\thiddenRange,\n\t\tadditionalLinesOriginalSuffix,\n\t};\n}\n\nexport class AdditionalLinesWidget extends Disposable {\n\tprivate _viewZoneInfo: { viewZoneId: string; heightInLines: number; lineNumber: number } | undefined;\n\tpublic get viewZoneId(): string | undefined { return this._viewZoneInfo?.viewZoneId; }\n\n\tprivate _viewZoneHeight;\n\tpublic get viewZoneHeight(): IObservable<number | undefined> { return this._viewZoneHeight; }\n\n\tprivate readonly editorOptionsChanged;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tprivate readonly _viewZoneListener;\n\n\treadonly isHovered;\n\n\tprivate hasBeenAccepted;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _lines: IObservable<{\n\t\t\ttargetTextModel: ITextModel;\n\t\t\tlineNumber: number;\n\t\t\tadditionalLines: LineData[];\n\t\t\tminReservedLineCount: number;\n\t\t} | undefined>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t) {\n\t\tsuper();\n\t\tthis._viewZoneHeight = observableValue<undefined | number>('viewZoneHeight', undefined);\n\t\tthis.editorOptionsChanged = observableSignalFromEvent('editorOptionChanged', Event.filter(\n\t\t\tthis._editor.onDidChangeConfiguration,\n\t\t\te => e.hasChanged(EditorOption.disableMonospaceOptimizations)\n\t\t\t\t|| e.hasChanged(EditorOption.stopRenderingLineAfter)\n\t\t\t\t|| e.hasChanged(EditorOption.renderWhitespace)\n\t\t\t\t|| e.hasChanged(EditorOption.renderControlCharacters)\n\t\t\t\t|| e.hasChanged(EditorOption.fontLigatures)\n\t\t\t\t|| e.hasChanged(EditorOption.fontInfo)\n\t\t\t\t|| e.hasChanged(EditorOption.lineHeight)\n\t\t));\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._viewZoneListener = this._register(new MutableDisposable());\n\t\tthis.isHovered = observableCodeEditor(this._editor).isTargetHovered(\n\t\t\tp => isTargetGhostText(p.target.element),\n\t\t\tthis._store\n\t\t);\n\t\tthis.hasBeenAccepted = false;\n\n\t\tif (this._editor instanceof CodeEditorWidget && this._shouldKeepCursorStable) {\n\t\t\tthis._register(this._editor.onBeforeExecuteEdit(e => this.hasBeenAccepted = e.source === 'inlineSuggestion.accept'));\n\t\t}\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description update view zone */\n\t\t\tconst lines = this._lines.read(reader);\n\t\t\tthis.editorOptionsChanged.read(reader);\n\n\t\t\tif (lines) {\n\t\t\t\tthis.hasBeenAccepted = false;\n\t\t\t\tthis.updateLines(lines.lineNumber, lines.additionalLines, lines.minReservedLineCount);\n\t\t\t} else {\n\t\t\t\tthis.clear();\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.clear();\n\t}\n\n\tprivate clear(): void {\n\t\tthis._viewZoneListener.clear();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\t\t});\n\t}\n\n\tprivate updateLines(lineNumber: number, additionalLines: LineData[], minReservedLineCount: number): void {\n\t\tconst textModel = this._editor.getModel();\n\t\tif (!textModel) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { tabSize } = textModel.getOptions();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tconst store = new DisposableStore();\n\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\n\t\t\tconst heightInLines = Math.max(additionalLines.length, minReservedLineCount);\n\t\t\tif (heightInLines > 0) {\n\t\t\t\tconst domNode = document.createElement('div');\n\t\t\t\trenderLines(domNode, tabSize, additionalLines, this._editor.getOptions(), this._isClickable);\n\n\t\t\t\tif (this._isClickable) {\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'mousedown', (e) => {\n\t\t\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t\t\t}));\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'click', (e) => {\n\t\t\t\t\t\tif (isTargetGhostText(e.target)) {\n\t\t\t\t\t\t\tthis._onDidClick.fire(new StandardMouseEvent(getWindow(e), e));\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tthis.addViewZone(changeAccessor, lineNumber, heightInLines, domNode);\n\t\t\t}\n\n\t\t\tthis._viewZoneListener.value = store;\n\t\t});\n\t}\n\n\tprivate addViewZone(changeAccessor: IViewZoneChangeAccessor, afterLineNumber: number, heightInLines: number, domNode: HTMLElement): void {\n\t\tconst id = changeAccessor.addZone({\n\t\t\tafterLineNumber: afterLineNumber,\n\t\t\theightInLines: heightInLines,\n\t\t\tdomNode,\n\t\t\tafterColumnAffinity: PositionAffinity.Right,\n\t\t\tonComputedHeight: (height: number) => {\n\t\t\t\tthis._viewZoneHeight.set(height, undefined); // TODO: can a transaction be used to avoid flickering?\n\t\t\t}\n\t\t});\n\n\t\tthis.keepCursorStable(afterLineNumber, heightInLines);\n\n\t\tthis._viewZoneInfo = { viewZoneId: id, heightInLines, lineNumber: afterLineNumber };\n\t}\n\n\tprivate removeActiveViewZone(changeAccessor: IViewZoneChangeAccessor): void {\n\t\tif (this._viewZoneInfo) {\n\t\t\tchangeAccessor.removeZone(this._viewZoneInfo.viewZoneId);\n\n\t\t\tif (!this.hasBeenAccepted) {\n\t\t\t\tthis.keepCursorStable(this._viewZoneInfo.lineNumber, -this._viewZoneInfo.heightInLines);\n\t\t\t}\n\n\t\t\tthis._viewZoneInfo = undefined;\n\t\t\tthis._viewZoneHeight.set(undefined, undefined);\n\t\t}\n\t}\n\n\tprivate keepCursorStable(lineNumber: number, heightInLines: number): void {\n\t\tif (!this._shouldKeepCursorStable) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cursorLineNumber = this._editor.getSelection()?.getStartPosition()?.lineNumber;\n\t\tif (cursorLineNumber !== undefined && lineNumber < cursorLineNumber) {\n\t\t\tthis._editor.setScrollTop(this._editor.getScrollTop() + heightInLines * this._editor.getOption(EditorOption.lineHeight));\n\t\t}\n\t}\n}\n\nfunction isTargetGhostText(target: EventTarget | null): boolean {\n\treturn isHTMLElement(target) && target.classList.contains(GHOST_TEXT_CLASS_NAME);\n}\n\nexport interface LineData {\n\tcontent: LineTokens; // Must not contain a linebreak!\n\tdecorations: LineDecoration[];\n}\n\nfunction renderLines(domNode: HTMLElement, tabSize: number, lines: LineData[], opts: IComputedEditorOptions, isClickable: boolean): void {\n\tconst disableMonospaceOptimizations = opts.get(EditorOption.disableMonospaceOptimizations);\n\tconst stopRenderingLineAfter = opts.get(EditorOption.stopRenderingLineAfter);\n\t// To avoid visual confusion, we don't want to render visible whitespace\n\tconst renderWhitespace = 'none';\n\tconst renderControlCharacters = opts.get(EditorOption.renderControlCharacters);\n\tconst fontLigatures = opts.get(EditorOption.fontLigatures);\n\tconst fontInfo = opts.get(EditorOption.fontInfo);\n\tconst lineHeight = opts.get(EditorOption.lineHeight);\n\n\tlet classNames = 'suggest-preview-text';\n\tif (isClickable) {\n\t\tclassNames += ' clickable';\n\t}\n\n\tconst sb = new StringBuilder(10000);\n\tsb.appendString(`<div class=\"${classNames}\">`);\n\n\tfor (let i = 0, len = lines.length; i < len; i++) {\n\t\tconst lineData = lines[i];\n\t\tconst lineTokens = lineData.content;\n\t\tsb.appendString('<div class=\"view-line');\n\t\tsb.appendString('\" style=\"top:');\n\t\tsb.appendString(String(i * lineHeight));\n\t\tsb.appendString('px;width:1000000px;\">');\n\n\t\tconst line = lineTokens.getLineContent();\n\t\tconst isBasicASCII = strings.isBasicASCII(line);\n\t\tconst containsRTL = strings.containsRTL(line);\n\n\t\trenderViewLine(new RenderLineInput(\n\t\t\t(fontInfo.isMonospace && !disableMonospaceOptimizations),\n\t\t\tfontInfo.canUseHalfwidthRightwardsArrow,\n\t\t\tline,\n\t\t\tfalse,\n\t\t\tisBasicASCII,\n\t\t\tcontainsRTL,\n\t\t\t0,\n\t\t\tlineTokens,\n\t\t\tlineData.decorations,\n\t\t\ttabSize,\n\t\t\t0,\n\t\t\tfontInfo.spaceWidth,\n\t\t\tfontInfo.middotWidth,\n\t\t\tfontInfo.wsmiddotWidth,\n\t\t\tstopRenderingLineAfter,\n\t\t\trenderWhitespace,\n\t\t\trenderControlCharacters,\n\t\t\tfontLigatures !== EditorFontLigatures.OFF,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t0\n\t\t), sb);\n\n\t\tsb.appendString('</div>');\n\t}\n\tsb.appendString('</div>');\n\n\tapplyFontInfo(domNode, fontInfo);\n\tconst html = sb.build();\n\tconst trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html;\n\tdomNode.innerHTML = trustedhtml as string;\n}\n\nexport const ttPolicy = createTrustedTypesPolicy('editorGhostText', { createHTML: value => value });\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 { createTrustedTypesPolicy } from '../../../../../../base/browser/trustedTypes.js';\nimport { renderIcon } from '../../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../../base/common/codicons.js';\nimport { Emitter, Event } from '../../../../../../base/common/event.js';\nimport { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../../../../../../base/common/lifecycle.js';\nimport { IObservable, autorun, autorunWithStore, constObservable, derived, observableSignalFromEvent, observableValue } from '../../../../../../base/common/observable.js';\nimport * as strings from '../../../../../../base/common/strings.js';\nimport { applyFontInfo } from '../../../../../browser/config/domFontInfo.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidgetPosition, IViewZoneChangeAccessor, MouseTargetType } from '../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../browser/observableCodeEditor.js';\nimport { EditorFontLigatures, EditorOption, IComputedEditorOptions } from '../../../../../common/config/editorOptions.js';\nimport { StringEdit, StringReplacement } from '../../../../../common/core/edits/stringEdit.js';\nimport { Position } from '../../../../../common/core/position.js';\nimport { Range } from '../../../../../common/core/range.js';\nimport { StringBuilder } from '../../../../../common/core/stringBuilder.js';\nimport { IconPath } from '../../../../../common/languages.js';\nimport { ILanguageService } from '../../../../../common/languages/language.js';\nimport { IModelDeltaDecoration, ITextModel, InjectedTextCursorStops, PositionAffinity } from '../../../../../common/model.js';\nimport { LineTokens } from '../../../../../common/tokens/lineTokens.js';\nimport { LineDecoration } from '../../../../../common/viewLayout/lineDecorations.js';\nimport { RenderLineInput, renderViewLine } from '../../../../../common/viewLayout/viewLineRenderer.js';\nimport { GhostText, GhostTextReplacement, IGhostTextLine } from '../../model/ghostText.js';\nimport { RangeSingleLine } from '../../../../../common/core/ranges/rangeSingleLine.js';\nimport { ColumnRange } from '../../../../../common/core/ranges/columnRange.js';\nimport { addDisposableListener, getWindow, isHTMLElement, n } from '../../../../../../base/browser/dom.js';\nimport './ghostTextView.css';\nimport { IMouseEvent, StandardMouseEvent } from '../../../../../../base/browser/mouseEvent.js';\nimport { CodeEditorWidget } from '../../../../../browser/widget/codeEditor/codeEditorWidget.js';\nimport { TokenWithTextArray } from '../../../../../common/tokens/tokenWithTextArray.js';\nimport { InlineCompletionViewData } from '../inlineEdits/inlineEditsViewInterface.js';\nimport { InlineDecorationType } from '../../../../../common/viewModel/inlineDecorations.js';\nimport { sum } from '../../../../../../base/common/arrays.js';\n\nexport interface IGhostTextWidgetModel {\n\treadonly targetTextModel: IObservable<ITextModel | undefined>;\n\treadonly ghostText: IObservable<GhostText | GhostTextReplacement | undefined>;\n\treadonly warning: IObservable<{ icon: IconPath | undefined } | undefined>;\n\treadonly minReservedLineCount: IObservable<number>;\n\n\treadonly handleInlineCompletionShown: IObservable<(viewData: InlineCompletionViewData) => void>;\n}\n\nconst USE_SQUIGGLES_FOR_WARNING = true;\nconst GHOST_TEXT_CLASS_NAME = 'ghost-text';\n\nexport class GhostTextView extends Disposable {\n\tprivate readonly _isDisposed;\n\tprivate readonly _editorObs;\n\tpublic static hot = createHotClass(GhostTextView);\n\n\tprivate _warningState;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _model: IGhostTextWidgetModel,\n\t\tprivate readonly _options: IObservable<{\n\t\t\textraClasses?: string[];\n\t\t\tsyntaxHighlightingEnabled: boolean;\n\t\t}>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t\t@ILanguageService private readonly _languageService: ILanguageService,\n\t) {\n\t\tsuper();\n\t\tthis._isDisposed = observableValue(this, false);\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\t\tthis._warningState = derived(reader => {\n\t\t\tconst gt = this._model.ghostText.read(reader);\n\t\t\tif (!gt) { return undefined; }\n\t\t\tconst warning = this._model.warning.read(reader);\n\t\t\tif (!warning) { return undefined; }\n\t\t\treturn { lineNumber: gt.lineNumber, position: new Position(gt.lineNumber, gt.parts[0].column), icon: warning.icon };\n\t\t});\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._useSyntaxHighlighting = this._options.map(o => o.syntaxHighlightingEnabled);\n\t\tthis._extraClassNames = derived(this, reader => {\n\t\t\tconst extraClasses = [...this._options.read(reader).extraClasses ?? []];\n\t\t\tif (this._useSyntaxHighlighting.read(reader)) {\n\t\t\t\textraClasses.push('syntax-highlighted');\n\t\t\t}\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING && this._warningState.read(reader)) {\n\t\t\t\textraClasses.push('warning');\n\t\t\t}\n\t\t\tconst extraClassNames = extraClasses.map(c => ` ${c}`).join('');\n\t\t\treturn extraClassNames;\n\t\t});\n\t\tthis.uiState = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return undefined; }\n\t\t\tconst textModel = this._editorObs.model.read(reader);\n\t\t\tif (textModel !== this._model.targetTextModel.read(reader)) { return undefined; }\n\t\t\tconst ghostText = this._model.ghostText.read(reader);\n\t\t\tif (!ghostText) { return undefined; }\n\n\t\t\tconst replacedRange = ghostText instanceof GhostTextReplacement ? ghostText.columnRange : undefined;\n\n\t\t\tconst syntaxHighlightingEnabled = this._useSyntaxHighlighting.read(reader);\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\t\t\tconst { inlineTexts, additionalLines, hiddenRange, additionalLinesOriginalSuffix } = computeGhostTextViewData(ghostText, textModel, GHOST_TEXT_CLASS_NAME + extraClassNames);\n\n\t\t\tconst currentLine = textModel.getLineContent(ghostText.lineNumber);\n\t\t\tconst edit = new StringEdit(inlineTexts.map(t => StringReplacement.insert(t.column - 1, t.text)));\n\t\t\tconst tokens = syntaxHighlightingEnabled ? textModel.tokenization.tokenizeLinesAt(ghostText.lineNumber, [edit.apply(currentLine), ...additionalLines.map(l => l.content)]) : undefined;\n\t\t\tconst newRanges = edit.getNewRanges();\n\t\t\tconst inlineTextsWithTokens = inlineTexts.map((t, idx) => ({ ...t, tokens: tokens?.[0]?.getTokensInRange(newRanges[idx]) }));\n\n\t\t\tconst tokenizedAdditionalLines: LineData[] = additionalLines.map((l, idx) => {\n\t\t\t\tlet content = tokens?.[idx + 1] ?? LineTokens.createEmpty(l.content, this._languageService.languageIdCodec);\n\t\t\t\tif (idx === additionalLines.length - 1 && additionalLinesOriginalSuffix) {\n\t\t\t\t\tconst t = TokenWithTextArray.fromLineTokens(textModel.tokenization.getLineTokens(additionalLinesOriginalSuffix.lineNumber));\n\t\t\t\t\tconst existingContent = t.slice(additionalLinesOriginalSuffix.columnRange.toZeroBasedOffsetRange());\n\t\t\t\t\tcontent = TokenWithTextArray.fromLineTokens(content).append(existingContent).toLineTokens(content.languageIdCodec);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent,\n\t\t\t\t\tdecorations: l.decorations,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tconst cursorColumn = this._editor.getSelection()?.getStartPosition().column!;\n\t\t\tconst disjointInlineTexts = inlineTextsWithTokens.filter(inline => inline.text !== '');\n\t\t\tconst hasInsertionOnCurrentLine = disjointInlineTexts.length !== 0;\n\t\t\tconst renderData: InlineCompletionViewData = {\n\t\t\t\tcursorColumnDistance: (hasInsertionOnCurrentLine ? disjointInlineTexts[0].column : 1) - cursorColumn,\n\t\t\t\tcursorLineDistance: hasInsertionOnCurrentLine ? 0 : (additionalLines.findIndex(line => line.content !== '') + 1),\n\t\t\t\tlineCountOriginal: hasInsertionOnCurrentLine ? 1 : 0,\n\t\t\t\tlineCountModified: additionalLines.length + (hasInsertionOnCurrentLine ? 1 : 0),\n\t\t\t\tcharacterCountOriginal: 0,\n\t\t\t\tcharacterCountModified: sum(disjointInlineTexts.map(inline => inline.text.length)) + sum(tokenizedAdditionalLines.map(line => line.content.getTextLength())),\n\t\t\t\tdisjointReplacements: disjointInlineTexts.length + (additionalLines.length > 0 ? 1 : 0),\n\t\t\t\tsameShapeReplacements: disjointInlineTexts.length > 1 && tokenizedAdditionalLines.length === 0 ? disjointInlineTexts.every(inline => inline.text === disjointInlineTexts[0].text) : undefined,\n\t\t\t};\n\t\t\tthis._model.handleInlineCompletionShown.read(reader)?.(renderData);\n\n\t\t\treturn {\n\t\t\t\treplacedRange,\n\t\t\t\tinlineTexts: inlineTextsWithTokens,\n\t\t\t\tadditionalLines: tokenizedAdditionalLines,\n\t\t\t\thiddenRange,\n\t\t\t\tlineNumber: ghostText.lineNumber,\n\t\t\t\tadditionalReservedLineCount: this._model.minReservedLineCount.read(reader),\n\t\t\t\ttargetTextModel: textModel,\n\t\t\t\tsyntaxHighlightingEnabled,\n\t\t\t};\n\t\t});\n\t\tthis.decorations = derived(this, reader => {\n\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\tif (!uiState) { return []; }\n\n\t\t\tconst decorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\n\t\t\tif (uiState.replacedRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.replacedRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'inline-completion-text-to-replace' + extraClassNames, description: 'GhostTextReplacement' }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (uiState.hiddenRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.hiddenRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'ghost-text-hidden', description: 'ghost-text-hidden', }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (const p of uiState.inlineTexts) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: Range.fromPositions(new Position(uiState.lineNumber, p.column)),\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tdescription: 'ghost-text-decoration',\n\t\t\t\t\t\tafter: {\n\t\t\t\t\t\t\tcontent: p.text,\n\t\t\t\t\t\t\ttokens: p.tokens,\n\t\t\t\t\t\t\tinlineClassName: (p.preview ? 'ghost-text-decoration-preview' : 'ghost-text-decoration')\n\t\t\t\t\t\t\t\t+ (this._isClickable ? ' clickable' : '')\n\t\t\t\t\t\t\t\t+ extraClassNames\n\t\t\t\t\t\t\t\t+ p.lineDecorations.map(d => ' ' + d.className).join(' '), // TODO: take the ranges into account for line decorations\n\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.Left,\n\t\t\t\t\t\t\tattachedData: new GhostTextAttachedData(this),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn decorations;\n\t\t});\n\t\tthis._additionalLinesWidget = this._register(\n\t\t\tnew AdditionalLinesWidget(\n\t\t\t\tthis._editor,\n\t\t\t\tderived(reader => {\n\t\t\t\t\t/** @description lines */\n\t\t\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\t\t\treturn uiState ? {\n\t\t\t\t\t\tlineNumber: uiState.lineNumber,\n\t\t\t\t\t\tadditionalLines: uiState.additionalLines,\n\t\t\t\t\t\tminReservedLineCount: uiState.additionalReservedLineCount,\n\t\t\t\t\t\ttargetTextModel: uiState.targetTextModel,\n\t\t\t\t\t} : undefined;\n\t\t\t\t}),\n\t\t\t\tthis._shouldKeepCursorStable,\n\t\t\t\tthis._isClickable\n\t\t\t)\n\t\t);\n\t\tthis._isInlineTextHovered = this._editorObs.isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof GhostTextAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis.isHovered = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return false; }\n\t\t\treturn this._isInlineTextHovered.read(reader) || this._additionalLinesWidget.isHovered.read(reader);\n\t\t});\n\t\tthis.height = derived(this, reader => {\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight).read(reader);\n\t\t\treturn lineHeight + (this._additionalLinesWidget.viewZoneHeight.read(reader) ?? 0);\n\t\t});\n\n\t\tthis._register(toDisposable(() => { this._isDisposed.set(true, undefined); }));\n\t\tthis._register(this._editorObs.setDecorations(this.decorations));\n\n\t\tif (this._isClickable) {\n\t\t\tthis._register(this._additionalLinesWidget.onDidClick((e) => this._onDidClick.fire(e)));\n\t\t\tthis._register(this._editor.onMouseUp(e => {\n\t\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\t\tif (a instanceof GhostTextAttachedData && a.owner === this) {\n\t\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst state = this._warningState.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight);\n\t\t\tstore.add(this._editorObs.createContentWidget({\n\t\t\t\tposition: constObservable<IContentWidgetPosition>({\n\t\t\t\t\tposition: new Position(state.lineNumber, Number.MAX_SAFE_INTEGER),\n\t\t\t\t\tpreference: [ContentWidgetPositionPreference.EXACT],\n\t\t\t\t\tpositionAffinity: PositionAffinity.Right,\n\t\t\t\t}),\n\t\t\t\tallowEditorOverflow: false,\n\t\t\t\tdomNode: n.div({\n\t\t\t\t\tclass: 'ghost-text-view-warning-widget',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\twidth: lineHeight,\n\t\t\t\t\t\theight: lineHeight,\n\t\t\t\t\t\tmarginLeft: 4,\n\t\t\t\t\t\tcolor: 'orange',\n\t\t\t\t\t},\n\t\t\t\t\tref: (dom) => {\n\t\t\t\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\t\t\t\t(dom as any as WidgetDomElement).ghostTextViewWarningWidgetData = { range: Range.fromPositions(state.position) };\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'ghost-text-view-warning-widget-icon',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\talignContent: 'center',\n\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [\n\t\t\t\t\t\trenderIcon((state.icon && 'id' in state.icon) ? state.icon : Codicon.warning),\n\t\t\t\t\t])\n\t\t\t\t]).keepUpdated(store).element,\n\t\t\t}));\n\t\t}));\n\t}\n\n\tpublic static getWarningWidgetContext(domNode: HTMLElement): { range: Range } | undefined {\n\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\tconst data = (domNode as any as WidgetDomElement).ghostTextViewWarningWidgetData;\n\t\tif (data) {\n\t\t\treturn data;\n\t\t} else if (domNode.parentElement) {\n\t\t\treturn this.getWarningWidgetContext(domNode.parentElement);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate readonly _useSyntaxHighlighting;\n\n\tprivate readonly _extraClassNames;\n\n\tprivate readonly uiState;\n\n\tprivate readonly decorations;\n\n\tprivate readonly _additionalLinesWidget;\n\n\tprivate readonly _isInlineTextHovered;\n\n\tpublic readonly isHovered;\n\n\tpublic readonly height;\n\n\tpublic ownsViewZone(viewZoneId: string): boolean {\n\t\treturn this._additionalLinesWidget.viewZoneId === viewZoneId;\n\t}\n}\n\nclass GhostTextAttachedData {\n\tconstructor(public readonly owner: GhostTextView) { }\n}\n\ninterface WidgetDomElement {\n\tghostTextViewWarningWidgetData?: {\n\t\trange: Range;\n\t};\n}\n\nfunction computeGhostTextViewData(ghostText: GhostText | GhostTextReplacement, textModel: ITextModel, ghostTextClassName: string) {\n\tconst inlineTexts: { column: number; text: string; preview: boolean; lineDecorations: LineDecoration[] }[] = [];\n\tconst additionalLines: { content: string; decorations: LineDecoration[] }[] = [];\n\n\tfunction addToAdditionalLines(ghLines: readonly IGhostTextLine[], className: string | undefined) {\n\t\tif (additionalLines.length > 0) {\n\t\t\tconst lastLine = additionalLines[additionalLines.length - 1];\n\t\t\tif (className) {\n\t\t\t\tlastLine.decorations.push(new LineDecoration(\n\t\t\t\t\tlastLine.content.length + 1,\n\t\t\t\t\tlastLine.content.length + 1 + ghLines[0].line.length,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t));\n\t\t\t}\n\t\t\tlastLine.content += ghLines[0].line;\n\n\t\t\tghLines = ghLines.slice(1);\n\t\t}\n\t\tfor (const ghLine of ghLines) {\n\t\t\tadditionalLines.push({\n\t\t\t\tcontent: ghLine.line,\n\t\t\t\tdecorations: className ? [new LineDecoration(\n\t\t\t\t\t1,\n\t\t\t\t\tghLine.line.length + 1,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t), ...ghLine.lineDecorations] : [...ghLine.lineDecorations]\n\t\t\t});\n\t\t}\n\t}\n\n\tconst textBufferLine = textModel.getLineContent(ghostText.lineNumber);\n\n\tlet hiddenTextStartColumn: number | undefined = undefined;\n\tlet lastIdx = 0;\n\tfor (const part of ghostText.parts) {\n\t\tlet ghLines = part.lines;\n\t\tif (hiddenTextStartColumn === undefined) {\n\t\t\tinlineTexts.push({ column: part.column, text: ghLines[0].line, preview: part.preview, lineDecorations: ghLines[0].lineDecorations });\n\t\t\tghLines = ghLines.slice(1);\n\t\t} else {\n\t\t\taddToAdditionalLines([{ line: textBufferLine.substring(lastIdx, part.column - 1), lineDecorations: [] }], undefined);\n\t\t}\n\n\t\tif (ghLines.length > 0) {\n\t\t\taddToAdditionalLines(ghLines, ghostTextClassName);\n\t\t\tif (hiddenTextStartColumn === undefined && part.column <= textBufferLine.length) {\n\t\t\t\thiddenTextStartColumn = part.column;\n\t\t\t}\n\t\t}\n\n\t\tlastIdx = part.column - 1;\n\t}\n\tlet additionalLinesOriginalSuffix: RangeSingleLine | undefined = undefined;\n\tif (hiddenTextStartColumn !== undefined) {\n\t\tadditionalLinesOriginalSuffix = new RangeSingleLine(ghostText.lineNumber, new ColumnRange(lastIdx + 1, textBufferLine.length + 1));\n\t}\n\n\tconst hiddenRange = hiddenTextStartColumn !== undefined ? new ColumnRange(hiddenTextStartColumn, textBufferLine.length + 1) : undefined;\n\n\treturn {\n\t\tinlineTexts,\n\t\tadditionalLines,\n\t\thiddenRange,\n\t\tadditionalLinesOriginalSuffix,\n\t};\n}\n\nexport class AdditionalLinesWidget extends Disposable {\n\tprivate _viewZoneInfo: { viewZoneId: string; heightInLines: number; lineNumber: number } | undefined;\n\tpublic get viewZoneId(): string | undefined { return this._viewZoneInfo?.viewZoneId; }\n\n\tprivate _viewZoneHeight;\n\tpublic get viewZoneHeight(): IObservable<number | undefined> { return this._viewZoneHeight; }\n\n\tprivate readonly editorOptionsChanged;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tprivate readonly _viewZoneListener;\n\n\treadonly isHovered;\n\n\tprivate hasBeenAccepted;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _lines: IObservable<{\n\t\t\ttargetTextModel: ITextModel;\n\t\t\tlineNumber: number;\n\t\t\tadditionalLines: LineData[];\n\t\t\tminReservedLineCount: number;\n\t\t} | undefined>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t) {\n\t\tsuper();\n\t\tthis._viewZoneHeight = observableValue<undefined | number>('viewZoneHeight', undefined);\n\t\tthis.editorOptionsChanged = observableSignalFromEvent('editorOptionChanged', Event.filter(\n\t\t\tthis._editor.onDidChangeConfiguration,\n\t\t\te => e.hasChanged(EditorOption.disableMonospaceOptimizations)\n\t\t\t\t|| e.hasChanged(EditorOption.stopRenderingLineAfter)\n\t\t\t\t|| e.hasChanged(EditorOption.renderWhitespace)\n\t\t\t\t|| e.hasChanged(EditorOption.renderControlCharacters)\n\t\t\t\t|| e.hasChanged(EditorOption.fontLigatures)\n\t\t\t\t|| e.hasChanged(EditorOption.fontInfo)\n\t\t\t\t|| e.hasChanged(EditorOption.lineHeight)\n\t\t));\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._viewZoneListener = this._register(new MutableDisposable());\n\t\tthis.isHovered = observableCodeEditor(this._editor).isTargetHovered(\n\t\t\tp => isTargetGhostText(p.target.element),\n\t\t\tthis._store\n\t\t);\n\t\tthis.hasBeenAccepted = false;\n\n\t\tif (this._editor instanceof CodeEditorWidget && this._shouldKeepCursorStable) {\n\t\t\tthis._register(this._editor.onBeforeExecuteEdit(e => this.hasBeenAccepted = e.source === 'inlineSuggestion.accept'));\n\t\t}\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description update view zone */\n\t\t\tconst lines = this._lines.read(reader);\n\t\t\tthis.editorOptionsChanged.read(reader);\n\n\t\t\tif (lines) {\n\t\t\t\tthis.hasBeenAccepted = false;\n\t\t\t\tthis.updateLines(lines.lineNumber, lines.additionalLines, lines.minReservedLineCount);\n\t\t\t} else {\n\t\t\t\tthis.clear();\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.clear();\n\t}\n\n\tprivate clear(): void {\n\t\tthis._viewZoneListener.clear();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\t\t});\n\t}\n\n\tprivate updateLines(lineNumber: number, additionalLines: LineData[], minReservedLineCount: number): void {\n\t\tconst textModel = this._editor.getModel();\n\t\tif (!textModel) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { tabSize } = textModel.getOptions();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tconst store = new DisposableStore();\n\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\n\t\t\tconst heightInLines = Math.max(additionalLines.length, minReservedLineCount);\n\t\t\tif (heightInLines > 0) {\n\t\t\t\tconst domNode = document.createElement('div');\n\t\t\t\trenderLines(domNode, tabSize, additionalLines, this._editor.getOptions(), this._isClickable);\n\n\t\t\t\tif (this._isClickable) {\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'mousedown', (e) => {\n\t\t\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t\t\t}));\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'click', (e) => {\n\t\t\t\t\t\tif (isTargetGhostText(e.target)) {\n\t\t\t\t\t\t\tthis._onDidClick.fire(new StandardMouseEvent(getWindow(e), e));\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tthis.addViewZone(changeAccessor, lineNumber, heightInLines, domNode);\n\t\t\t}\n\n\t\t\tthis._viewZoneListener.value = store;\n\t\t});\n\t}\n\n\tprivate addViewZone(changeAccessor: IViewZoneChangeAccessor, afterLineNumber: number, heightInLines: number, domNode: HTMLElement): void {\n\t\tconst id = changeAccessor.addZone({\n\t\t\tafterLineNumber: afterLineNumber,\n\t\t\theightInLines: heightInLines,\n\t\t\tdomNode,\n\t\t\tafterColumnAffinity: PositionAffinity.Right,\n\t\t\tonComputedHeight: (height: number) => {\n\t\t\t\tthis._viewZoneHeight.set(height, undefined); // TODO: can a transaction be used to avoid flickering?\n\t\t\t}\n\t\t});\n\n\t\tthis.keepCursorStable(afterLineNumber, heightInLines);\n\n\t\tthis._viewZoneInfo = { viewZoneId: id, heightInLines, lineNumber: afterLineNumber };\n\t}\n\n\tprivate removeActiveViewZone(changeAccessor: IViewZoneChangeAccessor): void {\n\t\tif (this._viewZoneInfo) {\n\t\t\tchangeAccessor.removeZone(this._viewZoneInfo.viewZoneId);\n\n\t\t\tif (!this.hasBeenAccepted) {\n\t\t\t\tthis.keepCursorStable(this._viewZoneInfo.lineNumber, -this._viewZoneInfo.heightInLines);\n\t\t\t}\n\n\t\t\tthis._viewZoneInfo = undefined;\n\t\t\tthis._viewZoneHeight.set(undefined, undefined);\n\t\t}\n\t}\n\n\tprivate keepCursorStable(lineNumber: number, heightInLines: number): void {\n\t\tif (!this._shouldKeepCursorStable) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cursorLineNumber = this._editor.getSelection()?.getStartPosition()?.lineNumber;\n\t\tif (cursorLineNumber !== undefined && lineNumber < cursorLineNumber) {\n\t\t\tthis._editor.setScrollTop(this._editor.getScrollTop() + heightInLines * this._editor.getOption(EditorOption.lineHeight));\n\t\t}\n\t}\n}\n\nfunction isTargetGhostText(target: EventTarget | null): boolean {\n\treturn isHTMLElement(target) && target.classList.contains(GHOST_TEXT_CLASS_NAME);\n}\n\nexport interface LineData {\n\tcontent: LineTokens; // Must not contain a linebreak!\n\tdecorations: LineDecoration[];\n}\n\nfunction renderLines(domNode: HTMLElement, tabSize: number, lines: LineData[], opts: IComputedEditorOptions, isClickable: boolean): void {\n\tconst disableMonospaceOptimizations = opts.get(EditorOption.disableMonospaceOptimizations);\n\tconst stopRenderingLineAfter = opts.get(EditorOption.stopRenderingLineAfter);\n\t// To avoid visual confusion, we don't want to render visible whitespace\n\tconst renderWhitespace = 'none';\n\tconst renderControlCharacters = opts.get(EditorOption.renderControlCharacters);\n\tconst fontLigatures = opts.get(EditorOption.fontLigatures);\n\tconst fontInfo = opts.get(EditorOption.fontInfo);\n\tconst lineHeight = opts.get(EditorOption.lineHeight);\n\n\tlet classNames = 'suggest-preview-text';\n\tif (isClickable) {\n\t\tclassNames += ' clickable';\n\t}\n\n\tconst sb = new StringBuilder(10000);\n\tsb.appendString(`<div class=\"${classNames}\">`);\n\n\tfor (let i = 0, len = lines.length; i < len; i++) {\n\t\tconst lineData = lines[i];\n\t\tconst lineTokens = lineData.content;\n\t\tsb.appendString('<div class=\"view-line');\n\t\tsb.appendString('\" style=\"top:');\n\t\tsb.appendString(String(i * lineHeight));\n\t\tsb.appendString('px;width:1000000px;\">');\n\n\t\tconst line = lineTokens.getLineContent();\n\t\tconst isBasicASCII = strings.isBasicASCII(line);\n\t\tconst containsRTL = strings.containsRTL(line);\n\n\t\trenderViewLine(new RenderLineInput(\n\t\t\t(fontInfo.isMonospace && !disableMonospaceOptimizations),\n\t\t\tfontInfo.canUseHalfwidthRightwardsArrow,\n\t\t\tline,\n\t\t\tfalse,\n\t\t\tisBasicASCII,\n\t\t\tcontainsRTL,\n\t\t\t0,\n\t\t\tlineTokens,\n\t\t\tlineData.decorations,\n\t\t\ttabSize,\n\t\t\t0,\n\t\t\tfontInfo.spaceWidth,\n\t\t\tfontInfo.middotWidth,\n\t\t\tfontInfo.wsmiddotWidth,\n\t\t\tstopRenderingLineAfter,\n\t\t\trenderWhitespace,\n\t\t\trenderControlCharacters,\n\t\t\tfontLigatures !== EditorFontLigatures.OFF,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t0\n\t\t), sb);\n\n\t\tsb.appendString('</div>');\n\t}\n\tsb.appendString('</div>');\n\n\tapplyFontInfo(domNode, fontInfo);\n\tconst html = sb.build();\n\tconst trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html;\n\tdomNode.innerHTML = trustedhtml as string;\n}\n\nexport const ttPolicy = createTrustedTypesPolicy('editorGhostText', { createHTML: value => value });\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts","vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts"],"names":[],"mappings":"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","file":"ghostTextView.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 { createTrustedTypesPolicy } from '../../../../../../base/browser/trustedTypes.js';\nimport { renderIcon } from '../../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../../base/common/codicons.js';\nimport { Emitter, Event } from '../../../../../../base/common/event.js';\nimport { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../../../../../../base/common/lifecycle.js';\nimport { IObservable, autorun, autorunWithStore, constObservable, derived, observableSignalFromEvent, observableValue } from '../../../../../../base/common/observable.js';\nimport * as strings from '../../../../../../base/common/strings.js';\nimport { applyFontInfo } from '../../../../../browser/config/domFontInfo.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidgetPosition, IViewZoneChangeAccessor, MouseTargetType } from '../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../browser/observableCodeEditor.js';\nimport { EditorFontLigatures, EditorOption, IComputedEditorOptions } from '../../../../../common/config/editorOptions.js';\nimport { StringEdit, StringReplacement } from '../../../../../common/core/edits/stringEdit.js';\nimport { Position } from '../../../../../common/core/position.js';\nimport { Range } from '../../../../../common/core/range.js';\nimport { StringBuilder } from '../../../../../common/core/stringBuilder.js';\nimport { IconPath } from '../../../../../common/languages.js';\nimport { ILanguageService } from '../../../../../common/languages/language.js';\nimport { IModelDeltaDecoration, ITextModel, InjectedTextCursorStops, PositionAffinity } from '../../../../../common/model.js';\nimport { LineTokens } from '../../../../../common/tokens/lineTokens.js';\nimport { LineDecoration } from '../../../../../common/viewLayout/lineDecorations.js';\nimport { RenderLineInput, renderViewLine } from '../../../../../common/viewLayout/viewLineRenderer.js';\nimport { GhostText, GhostTextReplacement, IGhostTextLine } from '../../model/ghostText.js';\nimport { RangeSingleLine } from '../../../../../common/core/ranges/rangeSingleLine.js';\nimport { ColumnRange } from '../../../../../common/core/ranges/columnRange.js';\nimport { addDisposableListener, getWindow, isHTMLElement, n } from '../../../../../../base/browser/dom.js';\nimport './ghostTextView.css';\nimport { IMouseEvent, StandardMouseEvent } from '../../../../../../base/browser/mouseEvent.js';\nimport { CodeEditorWidget } from '../../../../../browser/widget/codeEditor/codeEditorWidget.js';\nimport { TokenWithTextArray } from '../../../../../common/tokens/tokenWithTextArray.js';\nimport { InlineCompletionViewData } from '../inlineEdits/inlineEditsViewInterface.js';\nimport { InlineDecorationType } from '../../../../../common/viewModel/inlineDecorations.js';\nimport { sum } from '../../../../../../base/common/arrays.js';\n\nexport interface IGhostTextWidgetModel {\n\treadonly targetTextModel: IObservable<ITextModel | undefined>;\n\treadonly ghostText: IObservable<GhostText | GhostTextReplacement | undefined>;\n\treadonly warning: IObservable<{ icon: IconPath | undefined } | undefined>;\n\treadonly minReservedLineCount: IObservable<number>;\n\n\treadonly handleInlineCompletionShown: IObservable<(viewData: InlineCompletionViewData) => void>;\n}\n\nconst USE_SQUIGGLES_FOR_WARNING = true;\nconst GHOST_TEXT_CLASS_NAME = 'ghost-text';\n\nexport class GhostTextView extends Disposable {\n\tprivate readonly _isDisposed;\n\tprivate readonly _editorObs;\n\tpublic static hot = createHotClass(this);\n\n\tprivate _warningState;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _model: IGhostTextWidgetModel,\n\t\tprivate readonly _options: IObservable<{\n\t\t\textraClasses?: string[];\n\t\t\tsyntaxHighlightingEnabled: boolean;\n\t\t}>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t\t@ILanguageService private readonly _languageService: ILanguageService,\n\t) {\n\t\tsuper();\n\t\tthis._isDisposed = observableValue(this, false);\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\t\tthis._warningState = derived(reader => {\n\t\t\tconst gt = this._model.ghostText.read(reader);\n\t\t\tif (!gt) { return undefined; }\n\t\t\tconst warning = this._model.warning.read(reader);\n\t\t\tif (!warning) { return undefined; }\n\t\t\treturn { lineNumber: gt.lineNumber, position: new Position(gt.lineNumber, gt.parts[0].column), icon: warning.icon };\n\t\t});\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._useSyntaxHighlighting = this._options.map(o => o.syntaxHighlightingEnabled);\n\t\tthis._extraClassNames = derived(this, reader => {\n\t\t\tconst extraClasses = [...this._options.read(reader).extraClasses ?? []];\n\t\t\tif (this._useSyntaxHighlighting.read(reader)) {\n\t\t\t\textraClasses.push('syntax-highlighted');\n\t\t\t}\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING && this._warningState.read(reader)) {\n\t\t\t\textraClasses.push('warning');\n\t\t\t}\n\t\t\tconst extraClassNames = extraClasses.map(c => ` ${c}`).join('');\n\t\t\treturn extraClassNames;\n\t\t});\n\t\tthis.uiState = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return undefined; }\n\t\t\tconst textModel = this._editorObs.model.read(reader);\n\t\t\tif (textModel !== this._model.targetTextModel.read(reader)) { return undefined; }\n\t\t\tconst ghostText = this._model.ghostText.read(reader);\n\t\t\tif (!ghostText) { return undefined; }\n\n\t\t\tconst replacedRange = ghostText instanceof GhostTextReplacement ? ghostText.columnRange : undefined;\n\n\t\t\tconst syntaxHighlightingEnabled = this._useSyntaxHighlighting.read(reader);\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\t\t\tconst { inlineTexts, additionalLines, hiddenRange, additionalLinesOriginalSuffix } = computeGhostTextViewData(ghostText, textModel, GHOST_TEXT_CLASS_NAME + extraClassNames);\n\n\t\t\tconst currentLine = textModel.getLineContent(ghostText.lineNumber);\n\t\t\tconst edit = new StringEdit(inlineTexts.map(t => StringReplacement.insert(t.column - 1, t.text)));\n\t\t\tconst tokens = syntaxHighlightingEnabled ? textModel.tokenization.tokenizeLinesAt(ghostText.lineNumber, [edit.apply(currentLine), ...additionalLines.map(l => l.content)]) : undefined;\n\t\t\tconst newRanges = edit.getNewRanges();\n\t\t\tconst inlineTextsWithTokens = inlineTexts.map((t, idx) => ({ ...t, tokens: tokens?.[0]?.getTokensInRange(newRanges[idx]) }));\n\n\t\t\tconst tokenizedAdditionalLines: LineData[] = additionalLines.map((l, idx) => {\n\t\t\t\tlet content = tokens?.[idx + 1] ?? LineTokens.createEmpty(l.content, this._languageService.languageIdCodec);\n\t\t\t\tif (idx === additionalLines.length - 1 && additionalLinesOriginalSuffix) {\n\t\t\t\t\tconst t = TokenWithTextArray.fromLineTokens(textModel.tokenization.getLineTokens(additionalLinesOriginalSuffix.lineNumber));\n\t\t\t\t\tconst existingContent = t.slice(additionalLinesOriginalSuffix.columnRange.toZeroBasedOffsetRange());\n\t\t\t\t\tcontent = TokenWithTextArray.fromLineTokens(content).append(existingContent).toLineTokens(content.languageIdCodec);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent,\n\t\t\t\t\tdecorations: l.decorations,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tconst cursorColumn = this._editor.getSelection()?.getStartPosition().column!;\n\t\t\tconst disjointInlineTexts = inlineTextsWithTokens.filter(inline => inline.text !== '');\n\t\t\tconst hasInsertionOnCurrentLine = disjointInlineTexts.length !== 0;\n\t\t\tconst renderData: InlineCompletionViewData = {\n\t\t\t\tcursorColumnDistance: (hasInsertionOnCurrentLine ? disjointInlineTexts[0].column : 1) - cursorColumn,\n\t\t\t\tcursorLineDistance: hasInsertionOnCurrentLine ? 0 : (additionalLines.findIndex(line => line.content !== '') + 1),\n\t\t\t\tlineCountOriginal: hasInsertionOnCurrentLine ? 1 : 0,\n\t\t\t\tlineCountModified: additionalLines.length + (hasInsertionOnCurrentLine ? 1 : 0),\n\t\t\t\tcharacterCountOriginal: 0,\n\t\t\t\tcharacterCountModified: sum(disjointInlineTexts.map(inline => inline.text.length)) + sum(tokenizedAdditionalLines.map(line => line.content.getTextLength())),\n\t\t\t\tdisjointReplacements: disjointInlineTexts.length + (additionalLines.length > 0 ? 1 : 0),\n\t\t\t\tsameShapeReplacements: disjointInlineTexts.length > 1 && tokenizedAdditionalLines.length === 0 ? disjointInlineTexts.every(inline => inline.text === disjointInlineTexts[0].text) : undefined,\n\t\t\t};\n\t\t\tthis._model.handleInlineCompletionShown.read(reader)?.(renderData);\n\n\t\t\treturn {\n\t\t\t\treplacedRange,\n\t\t\t\tinlineTexts: inlineTextsWithTokens,\n\t\t\t\tadditionalLines: tokenizedAdditionalLines,\n\t\t\t\thiddenRange,\n\t\t\t\tlineNumber: ghostText.lineNumber,\n\t\t\t\tadditionalReservedLineCount: this._model.minReservedLineCount.read(reader),\n\t\t\t\ttargetTextModel: textModel,\n\t\t\t\tsyntaxHighlightingEnabled,\n\t\t\t};\n\t\t});\n\t\tthis.decorations = derived(this, reader => {\n\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\tif (!uiState) { return []; }\n\n\t\t\tconst decorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\n\t\t\tif (uiState.replacedRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.replacedRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'inline-completion-text-to-replace' + extraClassNames, description: 'GhostTextReplacement' }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (uiState.hiddenRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.hiddenRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'ghost-text-hidden', description: 'ghost-text-hidden', }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (const p of uiState.inlineTexts) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: Range.fromPositions(new Position(uiState.lineNumber, p.column)),\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tdescription: 'ghost-text-decoration',\n\t\t\t\t\t\tafter: {\n\t\t\t\t\t\t\tcontent: p.text,\n\t\t\t\t\t\t\ttokens: p.tokens,\n\t\t\t\t\t\t\tinlineClassName: (p.preview ? 'ghost-text-decoration-preview' : 'ghost-text-decoration')\n\t\t\t\t\t\t\t\t+ (this._isClickable ? ' clickable' : '')\n\t\t\t\t\t\t\t\t+ extraClassNames\n\t\t\t\t\t\t\t\t+ p.lineDecorations.map(d => ' ' + d.className).join(' '), // TODO: take the ranges into account for line decorations\n\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.Left,\n\t\t\t\t\t\t\tattachedData: new GhostTextAttachedData(this),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn decorations;\n\t\t});\n\t\tthis._additionalLinesWidget = this._register(\n\t\t\tnew AdditionalLinesWidget(\n\t\t\t\tthis._editor,\n\t\t\t\tderived(reader => {\n\t\t\t\t\t/** @description lines */\n\t\t\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\t\t\treturn uiState ? {\n\t\t\t\t\t\tlineNumber: uiState.lineNumber,\n\t\t\t\t\t\tadditionalLines: uiState.additionalLines,\n\t\t\t\t\t\tminReservedLineCount: uiState.additionalReservedLineCount,\n\t\t\t\t\t\ttargetTextModel: uiState.targetTextModel,\n\t\t\t\t\t} : undefined;\n\t\t\t\t}),\n\t\t\t\tthis._shouldKeepCursorStable,\n\t\t\t\tthis._isClickable\n\t\t\t)\n\t\t);\n\t\tthis._isInlineTextHovered = this._editorObs.isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof GhostTextAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis.isHovered = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return false; }\n\t\t\treturn this._isInlineTextHovered.read(reader) || this._additionalLinesWidget.isHovered.read(reader);\n\t\t});\n\t\tthis.height = derived(this, reader => {\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight).read(reader);\n\t\t\treturn lineHeight + (this._additionalLinesWidget.viewZoneHeight.read(reader) ?? 0);\n\t\t});\n\n\t\tthis._register(toDisposable(() => { this._isDisposed.set(true, undefined); }));\n\t\tthis._register(this._editorObs.setDecorations(this.decorations));\n\n\t\tif (this._isClickable) {\n\t\t\tthis._register(this._additionalLinesWidget.onDidClick((e) => this._onDidClick.fire(e)));\n\t\t\tthis._register(this._editor.onMouseUp(e => {\n\t\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\t\tif (a instanceof GhostTextAttachedData && a.owner === this) {\n\t\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst state = this._warningState.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight);\n\t\t\tstore.add(this._editorObs.createContentWidget({\n\t\t\t\tposition: constObservable<IContentWidgetPosition>({\n\t\t\t\t\tposition: new Position(state.lineNumber, Number.MAX_SAFE_INTEGER),\n\t\t\t\t\tpreference: [ContentWidgetPositionPreference.EXACT],\n\t\t\t\t\tpositionAffinity: PositionAffinity.Right,\n\t\t\t\t}),\n\t\t\t\tallowEditorOverflow: false,\n\t\t\t\tdomNode: n.div({\n\t\t\t\t\tclass: 'ghost-text-view-warning-widget',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\twidth: lineHeight,\n\t\t\t\t\t\theight: lineHeight,\n\t\t\t\t\t\tmarginLeft: 4,\n\t\t\t\t\t\tcolor: 'orange',\n\t\t\t\t\t},\n\t\t\t\t\tref: (dom) => {\n\t\t\t\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\t\t\t\t(dom as any as WidgetDomElement).ghostTextViewWarningWidgetData = { range: Range.fromPositions(state.position) };\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'ghost-text-view-warning-widget-icon',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\talignContent: 'center',\n\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [\n\t\t\t\t\t\trenderIcon((state.icon && 'id' in state.icon) ? state.icon : Codicon.warning),\n\t\t\t\t\t])\n\t\t\t\t]).keepUpdated(store).element,\n\t\t\t}));\n\t\t}));\n\t}\n\n\tpublic static getWarningWidgetContext(domNode: HTMLElement): { range: Range } | undefined {\n\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\tconst data = (domNode as any as WidgetDomElement).ghostTextViewWarningWidgetData;\n\t\tif (data) {\n\t\t\treturn data;\n\t\t} else if (domNode.parentElement) {\n\t\t\treturn this.getWarningWidgetContext(domNode.parentElement);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate readonly _useSyntaxHighlighting;\n\n\tprivate readonly _extraClassNames;\n\n\tprivate readonly uiState;\n\n\tprivate readonly decorations;\n\n\tprivate readonly _additionalLinesWidget;\n\n\tprivate readonly _isInlineTextHovered;\n\n\tpublic readonly isHovered;\n\n\tpublic readonly height;\n\n\tpublic ownsViewZone(viewZoneId: string): boolean {\n\t\treturn this._additionalLinesWidget.viewZoneId === viewZoneId;\n\t}\n}\n\nclass GhostTextAttachedData {\n\tconstructor(public readonly owner: GhostTextView) { }\n}\n\ninterface WidgetDomElement {\n\tghostTextViewWarningWidgetData?: {\n\t\trange: Range;\n\t};\n}\n\nfunction computeGhostTextViewData(ghostText: GhostText | GhostTextReplacement, textModel: ITextModel, ghostTextClassName: string) {\n\tconst inlineTexts: { column: number; text: string; preview: boolean; lineDecorations: LineDecoration[] }[] = [];\n\tconst additionalLines: { content: string; decorations: LineDecoration[] }[] = [];\n\n\tfunction addToAdditionalLines(ghLines: readonly IGhostTextLine[], className: string | undefined) {\n\t\tif (additionalLines.length > 0) {\n\t\t\tconst lastLine = additionalLines[additionalLines.length - 1];\n\t\t\tif (className) {\n\t\t\t\tlastLine.decorations.push(new LineDecoration(\n\t\t\t\t\tlastLine.content.length + 1,\n\t\t\t\t\tlastLine.content.length + 1 + ghLines[0].line.length,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t));\n\t\t\t}\n\t\t\tlastLine.content += ghLines[0].line;\n\n\t\t\tghLines = ghLines.slice(1);\n\t\t}\n\t\tfor (const ghLine of ghLines) {\n\t\t\tadditionalLines.push({\n\t\t\t\tcontent: ghLine.line,\n\t\t\t\tdecorations: className ? [new LineDecoration(\n\t\t\t\t\t1,\n\t\t\t\t\tghLine.line.length + 1,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t), ...ghLine.lineDecorations] : [...ghLine.lineDecorations]\n\t\t\t});\n\t\t}\n\t}\n\n\tconst textBufferLine = textModel.getLineContent(ghostText.lineNumber);\n\n\tlet hiddenTextStartColumn: number | undefined = undefined;\n\tlet lastIdx = 0;\n\tfor (const part of ghostText.parts) {\n\t\tlet ghLines = part.lines;\n\t\tif (hiddenTextStartColumn === undefined) {\n\t\t\tinlineTexts.push({ column: part.column, text: ghLines[0].line, preview: part.preview, lineDecorations: ghLines[0].lineDecorations });\n\t\t\tghLines = ghLines.slice(1);\n\t\t} else {\n\t\t\taddToAdditionalLines([{ line: textBufferLine.substring(lastIdx, part.column - 1), lineDecorations: [] }], undefined);\n\t\t}\n\n\t\tif (ghLines.length > 0) {\n\t\t\taddToAdditionalLines(ghLines, ghostTextClassName);\n\t\t\tif (hiddenTextStartColumn === undefined && part.column <= textBufferLine.length) {\n\t\t\t\thiddenTextStartColumn = part.column;\n\t\t\t}\n\t\t}\n\n\t\tlastIdx = part.column - 1;\n\t}\n\tlet additionalLinesOriginalSuffix: RangeSingleLine | undefined = undefined;\n\tif (hiddenTextStartColumn !== undefined) {\n\t\tadditionalLinesOriginalSuffix = new RangeSingleLine(ghostText.lineNumber, new ColumnRange(lastIdx + 1, textBufferLine.length + 1));\n\t}\n\n\tconst hiddenRange = hiddenTextStartColumn !== undefined ? new ColumnRange(hiddenTextStartColumn, textBufferLine.length + 1) : undefined;\n\n\treturn {\n\t\tinlineTexts,\n\t\tadditionalLines,\n\t\thiddenRange,\n\t\tadditionalLinesOriginalSuffix,\n\t};\n}\n\nexport class AdditionalLinesWidget extends Disposable {\n\tprivate _viewZoneInfo: { viewZoneId: string; heightInLines: number; lineNumber: number } | undefined;\n\tpublic get viewZoneId(): string | undefined { return this._viewZoneInfo?.viewZoneId; }\n\n\tprivate _viewZoneHeight;\n\tpublic get viewZoneHeight(): IObservable<number | undefined> { return this._viewZoneHeight; }\n\n\tprivate readonly editorOptionsChanged;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tprivate readonly _viewZoneListener;\n\n\treadonly isHovered;\n\n\tprivate hasBeenAccepted;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _lines: IObservable<{\n\t\t\ttargetTextModel: ITextModel;\n\t\t\tlineNumber: number;\n\t\t\tadditionalLines: LineData[];\n\t\t\tminReservedLineCount: number;\n\t\t} | undefined>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t) {\n\t\tsuper();\n\t\tthis._viewZoneHeight = observableValue<undefined | number>('viewZoneHeight', undefined);\n\t\tthis.editorOptionsChanged = observableSignalFromEvent('editorOptionChanged', Event.filter(\n\t\t\tthis._editor.onDidChangeConfiguration,\n\t\t\te => e.hasChanged(EditorOption.disableMonospaceOptimizations)\n\t\t\t\t|| e.hasChanged(EditorOption.stopRenderingLineAfter)\n\t\t\t\t|| e.hasChanged(EditorOption.renderWhitespace)\n\t\t\t\t|| e.hasChanged(EditorOption.renderControlCharacters)\n\t\t\t\t|| e.hasChanged(EditorOption.fontLigatures)\n\t\t\t\t|| e.hasChanged(EditorOption.fontInfo)\n\t\t\t\t|| e.hasChanged(EditorOption.lineHeight)\n\t\t));\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._viewZoneListener = this._register(new MutableDisposable());\n\t\tthis.isHovered = observableCodeEditor(this._editor).isTargetHovered(\n\t\t\tp => isTargetGhostText(p.target.element),\n\t\t\tthis._store\n\t\t);\n\t\tthis.hasBeenAccepted = false;\n\n\t\tif (this._editor instanceof CodeEditorWidget && this._shouldKeepCursorStable) {\n\t\t\tthis._register(this._editor.onBeforeExecuteEdit(e => this.hasBeenAccepted = e.source === 'inlineSuggestion.accept'));\n\t\t}\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description update view zone */\n\t\t\tconst lines = this._lines.read(reader);\n\t\t\tthis.editorOptionsChanged.read(reader);\n\n\t\t\tif (lines) {\n\t\t\t\tthis.hasBeenAccepted = false;\n\t\t\t\tthis.updateLines(lines.lineNumber, lines.additionalLines, lines.minReservedLineCount);\n\t\t\t} else {\n\t\t\t\tthis.clear();\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.clear();\n\t}\n\n\tprivate clear(): void {\n\t\tthis._viewZoneListener.clear();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\t\t});\n\t}\n\n\tprivate updateLines(lineNumber: number, additionalLines: LineData[], minReservedLineCount: number): void {\n\t\tconst textModel = this._editor.getModel();\n\t\tif (!textModel) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { tabSize } = textModel.getOptions();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tconst store = new DisposableStore();\n\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\n\t\t\tconst heightInLines = Math.max(additionalLines.length, minReservedLineCount);\n\t\t\tif (heightInLines > 0) {\n\t\t\t\tconst domNode = document.createElement('div');\n\t\t\t\trenderLines(domNode, tabSize, additionalLines, this._editor.getOptions(), this._isClickable);\n\n\t\t\t\tif (this._isClickable) {\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'mousedown', (e) => {\n\t\t\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t\t\t}));\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'click', (e) => {\n\t\t\t\t\t\tif (isTargetGhostText(e.target)) {\n\t\t\t\t\t\t\tthis._onDidClick.fire(new StandardMouseEvent(getWindow(e), e));\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tthis.addViewZone(changeAccessor, lineNumber, heightInLines, domNode);\n\t\t\t}\n\n\t\t\tthis._viewZoneListener.value = store;\n\t\t});\n\t}\n\n\tprivate addViewZone(changeAccessor: IViewZoneChangeAccessor, afterLineNumber: number, heightInLines: number, domNode: HTMLElement): void {\n\t\tconst id = changeAccessor.addZone({\n\t\t\tafterLineNumber: afterLineNumber,\n\t\t\theightInLines: heightInLines,\n\t\t\tdomNode,\n\t\t\tafterColumnAffinity: PositionAffinity.Right,\n\t\t\tonComputedHeight: (height: number) => {\n\t\t\t\tthis._viewZoneHeight.set(height, undefined); // TODO: can a transaction be used to avoid flickering?\n\t\t\t}\n\t\t});\n\n\t\tthis.keepCursorStable(afterLineNumber, heightInLines);\n\n\t\tthis._viewZoneInfo = { viewZoneId: id, heightInLines, lineNumber: afterLineNumber };\n\t}\n\n\tprivate removeActiveViewZone(changeAccessor: IViewZoneChangeAccessor): void {\n\t\tif (this._viewZoneInfo) {\n\t\t\tchangeAccessor.removeZone(this._viewZoneInfo.viewZoneId);\n\n\t\t\tif (!this.hasBeenAccepted) {\n\t\t\t\tthis.keepCursorStable(this._viewZoneInfo.lineNumber, -this._viewZoneInfo.heightInLines);\n\t\t\t}\n\n\t\t\tthis._viewZoneInfo = undefined;\n\t\t\tthis._viewZoneHeight.set(undefined, undefined);\n\t\t}\n\t}\n\n\tprivate keepCursorStable(lineNumber: number, heightInLines: number): void {\n\t\tif (!this._shouldKeepCursorStable) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cursorLineNumber = this._editor.getSelection()?.getStartPosition()?.lineNumber;\n\t\tif (cursorLineNumber !== undefined && lineNumber < cursorLineNumber) {\n\t\t\tthis._editor.setScrollTop(this._editor.getScrollTop() + heightInLines * this._editor.getOption(EditorOption.lineHeight));\n\t\t}\n\t}\n}\n\nfunction isTargetGhostText(target: EventTarget | null): boolean {\n\treturn isHTMLElement(target) && target.classList.contains(GHOST_TEXT_CLASS_NAME);\n}\n\nexport interface LineData {\n\tcontent: LineTokens; // Must not contain a linebreak!\n\tdecorations: LineDecoration[];\n}\n\nfunction renderLines(domNode: HTMLElement, tabSize: number, lines: LineData[], opts: IComputedEditorOptions, isClickable: boolean): void {\n\tconst disableMonospaceOptimizations = opts.get(EditorOption.disableMonospaceOptimizations);\n\tconst stopRenderingLineAfter = opts.get(EditorOption.stopRenderingLineAfter);\n\t// To avoid visual confusion, we don't want to render visible whitespace\n\tconst renderWhitespace = 'none';\n\tconst renderControlCharacters = opts.get(EditorOption.renderControlCharacters);\n\tconst fontLigatures = opts.get(EditorOption.fontLigatures);\n\tconst fontInfo = opts.get(EditorOption.fontInfo);\n\tconst lineHeight = opts.get(EditorOption.lineHeight);\n\n\tlet classNames = 'suggest-preview-text';\n\tif (isClickable) {\n\t\tclassNames += ' clickable';\n\t}\n\n\tconst sb = new StringBuilder(10000);\n\tsb.appendString(`<div class=\"${classNames}\">`);\n\n\tfor (let i = 0, len = lines.length; i < len; i++) {\n\t\tconst lineData = lines[i];\n\t\tconst lineTokens = lineData.content;\n\t\tsb.appendString('<div class=\"view-line');\n\t\tsb.appendString('\" style=\"top:');\n\t\tsb.appendString(String(i * lineHeight));\n\t\tsb.appendString('px;width:1000000px;\">');\n\n\t\tconst line = lineTokens.getLineContent();\n\t\tconst isBasicASCII = strings.isBasicASCII(line);\n\t\tconst containsRTL = strings.containsRTL(line);\n\n\t\trenderViewLine(new RenderLineInput(\n\t\t\t(fontInfo.isMonospace && !disableMonospaceOptimizations),\n\t\t\tfontInfo.canUseHalfwidthRightwardsArrow,\n\t\t\tline,\n\t\t\tfalse,\n\t\t\tisBasicASCII,\n\t\t\tcontainsRTL,\n\t\t\t0,\n\t\t\tlineTokens,\n\t\t\tlineData.decorations,\n\t\t\ttabSize,\n\t\t\t0,\n\t\t\tfontInfo.spaceWidth,\n\t\t\tfontInfo.middotWidth,\n\t\t\tfontInfo.wsmiddotWidth,\n\t\t\tstopRenderingLineAfter,\n\t\t\trenderWhitespace,\n\t\t\trenderControlCharacters,\n\t\t\tfontLigatures !== EditorFontLigatures.OFF,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t0\n\t\t), sb);\n\n\t\tsb.appendString('</div>');\n\t}\n\tsb.appendString('</div>');\n\n\tapplyFontInfo(domNode, fontInfo);\n\tconst html = sb.build();\n\tconst trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html;\n\tdomNode.innerHTML = trustedhtml as string;\n}\n\nexport const ttPolicy = createTrustedTypesPolicy('editorGhostText', { createHTML: value => value });\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 { createTrustedTypesPolicy } from '../../../../../../base/browser/trustedTypes.js';\nimport { renderIcon } from '../../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../../base/common/codicons.js';\nimport { Emitter, Event } from '../../../../../../base/common/event.js';\nimport { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../../../../../../base/common/lifecycle.js';\nimport { IObservable, autorun, autorunWithStore, constObservable, derived, observableSignalFromEvent, observableValue } from '../../../../../../base/common/observable.js';\nimport * as strings from '../../../../../../base/common/strings.js';\nimport { applyFontInfo } from '../../../../../browser/config/domFontInfo.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidgetPosition, IViewZoneChangeAccessor, MouseTargetType } from '../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../browser/observableCodeEditor.js';\nimport { EditorFontLigatures, EditorOption, IComputedEditorOptions } from '../../../../../common/config/editorOptions.js';\nimport { StringEdit, StringReplacement } from '../../../../../common/core/edits/stringEdit.js';\nimport { Position } from '../../../../../common/core/position.js';\nimport { Range } from '../../../../../common/core/range.js';\nimport { StringBuilder } from '../../../../../common/core/stringBuilder.js';\nimport { IconPath } from '../../../../../common/languages.js';\nimport { ILanguageService } from '../../../../../common/languages/language.js';\nimport { IModelDeltaDecoration, ITextModel, InjectedTextCursorStops, PositionAffinity } from '../../../../../common/model.js';\nimport { LineTokens } from '../../../../../common/tokens/lineTokens.js';\nimport { LineDecoration } from '../../../../../common/viewLayout/lineDecorations.js';\nimport { RenderLineInput, renderViewLine } from '../../../../../common/viewLayout/viewLineRenderer.js';\nimport { GhostText, GhostTextReplacement, IGhostTextLine } from '../../model/ghostText.js';\nimport { RangeSingleLine } from '../../../../../common/core/ranges/rangeSingleLine.js';\nimport { ColumnRange } from '../../../../../common/core/ranges/columnRange.js';\nimport { addDisposableListener, getWindow, isHTMLElement, n } from '../../../../../../base/browser/dom.js';\nimport './ghostTextView.css';\nimport { IMouseEvent, StandardMouseEvent } from '../../../../../../base/browser/mouseEvent.js';\nimport { CodeEditorWidget } from '../../../../../browser/widget/codeEditor/codeEditorWidget.js';\nimport { TokenWithTextArray } from '../../../../../common/tokens/tokenWithTextArray.js';\nimport { InlineCompletionViewData } from '../inlineEdits/inlineEditsViewInterface.js';\nimport { InlineDecorationType } from '../../../../../common/viewModel/inlineDecorations.js';\nimport { sum } from '../../../../../../base/common/arrays.js';\n\nexport interface IGhostTextWidgetModel {\n\treadonly targetTextModel: IObservable<ITextModel | undefined>;\n\treadonly ghostText: IObservable<GhostText | GhostTextReplacement | undefined>;\n\treadonly warning: IObservable<{ icon: IconPath | undefined } | undefined>;\n\treadonly minReservedLineCount: IObservable<number>;\n\n\treadonly handleInlineCompletionShown: IObservable<(viewData: InlineCompletionViewData) => void>;\n}\n\nconst USE_SQUIGGLES_FOR_WARNING = true;\nconst GHOST_TEXT_CLASS_NAME = 'ghost-text';\n\nexport class GhostTextView extends Disposable {\n\tprivate readonly _isDisposed;\n\tprivate readonly _editorObs;\n\tpublic static hot = createHotClass(this);\n\n\tprivate _warningState;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _model: IGhostTextWidgetModel,\n\t\tprivate readonly _options: IObservable<{\n\t\t\textraClasses?: string[];\n\t\t\tsyntaxHighlightingEnabled: boolean;\n\t\t}>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t\t@ILanguageService private readonly _languageService: ILanguageService,\n\t) {\n\t\tsuper();\n\t\tthis._isDisposed = observableValue(this, false);\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\t\tthis._warningState = derived(reader => {\n\t\t\tconst gt = this._model.ghostText.read(reader);\n\t\t\tif (!gt) { return undefined; }\n\t\t\tconst warning = this._model.warning.read(reader);\n\t\t\tif (!warning) { return undefined; }\n\t\t\treturn { lineNumber: gt.lineNumber, position: new Position(gt.lineNumber, gt.parts[0].column), icon: warning.icon };\n\t\t});\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._useSyntaxHighlighting = this._options.map(o => o.syntaxHighlightingEnabled);\n\t\tthis._extraClassNames = derived(this, reader => {\n\t\t\tconst extraClasses = [...this._options.read(reader).extraClasses ?? []];\n\t\t\tif (this._useSyntaxHighlighting.read(reader)) {\n\t\t\t\textraClasses.push('syntax-highlighted');\n\t\t\t}\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING && this._warningState.read(reader)) {\n\t\t\t\textraClasses.push('warning');\n\t\t\t}\n\t\t\tconst extraClassNames = extraClasses.map(c => ` ${c}`).join('');\n\t\t\treturn extraClassNames;\n\t\t});\n\t\tthis.uiState = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return undefined; }\n\t\t\tconst textModel = this._editorObs.model.read(reader);\n\t\t\tif (textModel !== this._model.targetTextModel.read(reader)) { return undefined; }\n\t\t\tconst ghostText = this._model.ghostText.read(reader);\n\t\t\tif (!ghostText) { return undefined; }\n\n\t\t\tconst replacedRange = ghostText instanceof GhostTextReplacement ? ghostText.columnRange : undefined;\n\n\t\t\tconst syntaxHighlightingEnabled = this._useSyntaxHighlighting.read(reader);\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\t\t\tconst { inlineTexts, additionalLines, hiddenRange, additionalLinesOriginalSuffix } = computeGhostTextViewData(ghostText, textModel, GHOST_TEXT_CLASS_NAME + extraClassNames);\n\n\t\t\tconst currentLine = textModel.getLineContent(ghostText.lineNumber);\n\t\t\tconst edit = new StringEdit(inlineTexts.map(t => StringReplacement.insert(t.column - 1, t.text)));\n\t\t\tconst tokens = syntaxHighlightingEnabled ? textModel.tokenization.tokenizeLinesAt(ghostText.lineNumber, [edit.apply(currentLine), ...additionalLines.map(l => l.content)]) : undefined;\n\t\t\tconst newRanges = edit.getNewRanges();\n\t\t\tconst inlineTextsWithTokens = inlineTexts.map((t, idx) => ({ ...t, tokens: tokens?.[0]?.getTokensInRange(newRanges[idx]) }));\n\n\t\t\tconst tokenizedAdditionalLines: LineData[] = additionalLines.map((l, idx) => {\n\t\t\t\tlet content = tokens?.[idx + 1] ?? LineTokens.createEmpty(l.content, this._languageService.languageIdCodec);\n\t\t\t\tif (idx === additionalLines.length - 1 && additionalLinesOriginalSuffix) {\n\t\t\t\t\tconst t = TokenWithTextArray.fromLineTokens(textModel.tokenization.getLineTokens(additionalLinesOriginalSuffix.lineNumber));\n\t\t\t\t\tconst existingContent = t.slice(additionalLinesOriginalSuffix.columnRange.toZeroBasedOffsetRange());\n\t\t\t\t\tcontent = TokenWithTextArray.fromLineTokens(content).append(existingContent).toLineTokens(content.languageIdCodec);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent,\n\t\t\t\t\tdecorations: l.decorations,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tconst cursorColumn = this._editor.getSelection()?.getStartPosition().column!;\n\t\t\tconst disjointInlineTexts = inlineTextsWithTokens.filter(inline => inline.text !== '');\n\t\t\tconst hasInsertionOnCurrentLine = disjointInlineTexts.length !== 0;\n\t\t\tconst renderData: InlineCompletionViewData = {\n\t\t\t\tcursorColumnDistance: (hasInsertionOnCurrentLine ? disjointInlineTexts[0].column : 1) - cursorColumn,\n\t\t\t\tcursorLineDistance: hasInsertionOnCurrentLine ? 0 : (additionalLines.findIndex(line => line.content !== '') + 1),\n\t\t\t\tlineCountOriginal: hasInsertionOnCurrentLine ? 1 : 0,\n\t\t\t\tlineCountModified: additionalLines.length + (hasInsertionOnCurrentLine ? 1 : 0),\n\t\t\t\tcharacterCountOriginal: 0,\n\t\t\t\tcharacterCountModified: sum(disjointInlineTexts.map(inline => inline.text.length)) + sum(tokenizedAdditionalLines.map(line => line.content.getTextLength())),\n\t\t\t\tdisjointReplacements: disjointInlineTexts.length + (additionalLines.length > 0 ? 1 : 0),\n\t\t\t\tsameShapeReplacements: disjointInlineTexts.length > 1 && tokenizedAdditionalLines.length === 0 ? disjointInlineTexts.every(inline => inline.text === disjointInlineTexts[0].text) : undefined,\n\t\t\t};\n\t\t\tthis._model.handleInlineCompletionShown.read(reader)?.(renderData);\n\n\t\t\treturn {\n\t\t\t\treplacedRange,\n\t\t\t\tinlineTexts: inlineTextsWithTokens,\n\t\t\t\tadditionalLines: tokenizedAdditionalLines,\n\t\t\t\thiddenRange,\n\t\t\t\tlineNumber: ghostText.lineNumber,\n\t\t\t\tadditionalReservedLineCount: this._model.minReservedLineCount.read(reader),\n\t\t\t\ttargetTextModel: textModel,\n\t\t\t\tsyntaxHighlightingEnabled,\n\t\t\t};\n\t\t});\n\t\tthis.decorations = derived(this, reader => {\n\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\tif (!uiState) { return []; }\n\n\t\t\tconst decorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\n\t\t\tif (uiState.replacedRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.replacedRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'inline-completion-text-to-replace' + extraClassNames, description: 'GhostTextReplacement' }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (uiState.hiddenRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.hiddenRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'ghost-text-hidden', description: 'ghost-text-hidden', }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (const p of uiState.inlineTexts) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: Range.fromPositions(new Position(uiState.lineNumber, p.column)),\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tdescription: 'ghost-text-decoration',\n\t\t\t\t\t\tafter: {\n\t\t\t\t\t\t\tcontent: p.text,\n\t\t\t\t\t\t\ttokens: p.tokens,\n\t\t\t\t\t\t\tinlineClassName: (p.preview ? 'ghost-text-decoration-preview' : 'ghost-text-decoration')\n\t\t\t\t\t\t\t\t+ (this._isClickable ? ' clickable' : '')\n\t\t\t\t\t\t\t\t+ extraClassNames\n\t\t\t\t\t\t\t\t+ p.lineDecorations.map(d => ' ' + d.className).join(' '), // TODO: take the ranges into account for line decorations\n\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.Left,\n\t\t\t\t\t\t\tattachedData: new GhostTextAttachedData(this),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn decorations;\n\t\t});\n\t\tthis._additionalLinesWidget = this._register(\n\t\t\tnew AdditionalLinesWidget(\n\t\t\t\tthis._editor,\n\t\t\t\tderived(reader => {\n\t\t\t\t\t/** @description lines */\n\t\t\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\t\t\treturn uiState ? {\n\t\t\t\t\t\tlineNumber: uiState.lineNumber,\n\t\t\t\t\t\tadditionalLines: uiState.additionalLines,\n\t\t\t\t\t\tminReservedLineCount: uiState.additionalReservedLineCount,\n\t\t\t\t\t\ttargetTextModel: uiState.targetTextModel,\n\t\t\t\t\t} : undefined;\n\t\t\t\t}),\n\t\t\t\tthis._shouldKeepCursorStable,\n\t\t\t\tthis._isClickable\n\t\t\t)\n\t\t);\n\t\tthis._isInlineTextHovered = this._editorObs.isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof GhostTextAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis.isHovered = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return false; }\n\t\t\treturn this._isInlineTextHovered.read(reader) || this._additionalLinesWidget.isHovered.read(reader);\n\t\t});\n\t\tthis.height = derived(this, reader => {\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight).read(reader);\n\t\t\treturn lineHeight + (this._additionalLinesWidget.viewZoneHeight.read(reader) ?? 0);\n\t\t});\n\n\t\tthis._register(toDisposable(() => { this._isDisposed.set(true, undefined); }));\n\t\tthis._register(this._editorObs.setDecorations(this.decorations));\n\n\t\tif (this._isClickable) {\n\t\t\tthis._register(this._additionalLinesWidget.onDidClick((e) => this._onDidClick.fire(e)));\n\t\t\tthis._register(this._editor.onMouseUp(e => {\n\t\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\t\tif (a instanceof GhostTextAttachedData && a.owner === this) {\n\t\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst state = this._warningState.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight);\n\t\t\tstore.add(this._editorObs.createContentWidget({\n\t\t\t\tposition: constObservable<IContentWidgetPosition>({\n\t\t\t\t\tposition: new Position(state.lineNumber, Number.MAX_SAFE_INTEGER),\n\t\t\t\t\tpreference: [ContentWidgetPositionPreference.EXACT],\n\t\t\t\t\tpositionAffinity: PositionAffinity.Right,\n\t\t\t\t}),\n\t\t\t\tallowEditorOverflow: false,\n\t\t\t\tdomNode: n.div({\n\t\t\t\t\tclass: 'ghost-text-view-warning-widget',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\twidth: lineHeight,\n\t\t\t\t\t\theight: lineHeight,\n\t\t\t\t\t\tmarginLeft: 4,\n\t\t\t\t\t\tcolor: 'orange',\n\t\t\t\t\t},\n\t\t\t\t\tref: (dom) => {\n\t\t\t\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\t\t\t\t(dom as any as WidgetDomElement).ghostTextViewWarningWidgetData = { range: Range.fromPositions(state.position) };\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'ghost-text-view-warning-widget-icon',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\talignContent: 'center',\n\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [\n\t\t\t\t\t\trenderIcon((state.icon && 'id' in state.icon) ? state.icon : Codicon.warning),\n\t\t\t\t\t])\n\t\t\t\t]).keepUpdated(store).element,\n\t\t\t}));\n\t\t}));\n\t}\n\n\tpublic static getWarningWidgetContext(domNode: HTMLElement): { range: Range } | undefined {\n\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\tconst data = (domNode as any as WidgetDomElement).ghostTextViewWarningWidgetData;\n\t\tif (data) {\n\t\t\treturn data;\n\t\t} else if (domNode.parentElement) {\n\t\t\treturn this.getWarningWidgetContext(domNode.parentElement);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate readonly _useSyntaxHighlighting;\n\n\tprivate readonly _extraClassNames;\n\n\tprivate readonly uiState;\n\n\tprivate readonly decorations;\n\n\tprivate readonly _additionalLinesWidget;\n\n\tprivate readonly _isInlineTextHovered;\n\n\tpublic readonly isHovered;\n\n\tpublic readonly height;\n\n\tpublic ownsViewZone(viewZoneId: string): boolean {\n\t\treturn this._additionalLinesWidget.viewZoneId === viewZoneId;\n\t}\n}\n\nclass GhostTextAttachedData {\n\tconstructor(public readonly owner: GhostTextView) { }\n}\n\ninterface WidgetDomElement {\n\tghostTextViewWarningWidgetData?: {\n\t\trange: Range;\n\t};\n}\n\nfunction computeGhostTextViewData(ghostText: GhostText | GhostTextReplacement, textModel: ITextModel, ghostTextClassName: string) {\n\tconst inlineTexts: { column: number; text: string; preview: boolean; lineDecorations: LineDecoration[] }[] = [];\n\tconst additionalLines: { content: string; decorations: LineDecoration[] }[] = [];\n\n\tfunction addToAdditionalLines(ghLines: readonly IGhostTextLine[], className: string | undefined) {\n\t\tif (additionalLines.length > 0) {\n\t\t\tconst lastLine = additionalLines[additionalLines.length - 1];\n\t\t\tif (className) {\n\t\t\t\tlastLine.decorations.push(new LineDecoration(\n\t\t\t\t\tlastLine.content.length + 1,\n\t\t\t\t\tlastLine.content.length + 1 + ghLines[0].line.length,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t));\n\t\t\t}\n\t\t\tlastLine.content += ghLines[0].line;\n\n\t\t\tghLines = ghLines.slice(1);\n\t\t}\n\t\tfor (const ghLine of ghLines) {\n\t\t\tadditionalLines.push({\n\t\t\t\tcontent: ghLine.line,\n\t\t\t\tdecorations: className ? [new LineDecoration(\n\t\t\t\t\t1,\n\t\t\t\t\tghLine.line.length + 1,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t), ...ghLine.lineDecorations] : [...ghLine.lineDecorations]\n\t\t\t});\n\t\t}\n\t}\n\n\tconst textBufferLine = textModel.getLineContent(ghostText.lineNumber);\n\n\tlet hiddenTextStartColumn: number | undefined = undefined;\n\tlet lastIdx = 0;\n\tfor (const part of ghostText.parts) {\n\t\tlet ghLines = part.lines;\n\t\tif (hiddenTextStartColumn === undefined) {\n\t\t\tinlineTexts.push({ column: part.column, text: ghLines[0].line, preview: part.preview, lineDecorations: ghLines[0].lineDecorations });\n\t\t\tghLines = ghLines.slice(1);\n\t\t} else {\n\t\t\taddToAdditionalLines([{ line: textBufferLine.substring(lastIdx, part.column - 1), lineDecorations: [] }], undefined);\n\t\t}\n\n\t\tif (ghLines.length > 0) {\n\t\t\taddToAdditionalLines(ghLines, ghostTextClassName);\n\t\t\tif (hiddenTextStartColumn === undefined && part.column <= textBufferLine.length) {\n\t\t\t\thiddenTextStartColumn = part.column;\n\t\t\t}\n\t\t}\n\n\t\tlastIdx = part.column - 1;\n\t}\n\tlet additionalLinesOriginalSuffix: RangeSingleLine | undefined = undefined;\n\tif (hiddenTextStartColumn !== undefined) {\n\t\tadditionalLinesOriginalSuffix = new RangeSingleLine(ghostText.lineNumber, new ColumnRange(lastIdx + 1, textBufferLine.length + 1));\n\t}\n\n\tconst hiddenRange = hiddenTextStartColumn !== undefined ? new ColumnRange(hiddenTextStartColumn, textBufferLine.length + 1) : undefined;\n\n\treturn {\n\t\tinlineTexts,\n\t\tadditionalLines,\n\t\thiddenRange,\n\t\tadditionalLinesOriginalSuffix,\n\t};\n}\n\nexport class AdditionalLinesWidget extends Disposable {\n\tprivate _viewZoneInfo: { viewZoneId: string; heightInLines: number; lineNumber: number } | undefined;\n\tpublic get viewZoneId(): string | undefined { return this._viewZoneInfo?.viewZoneId; }\n\n\tprivate _viewZoneHeight;\n\tpublic get viewZoneHeight(): IObservable<number | undefined> { return this._viewZoneHeight; }\n\n\tprivate readonly editorOptionsChanged;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tprivate readonly _viewZoneListener;\n\n\treadonly isHovered;\n\n\tprivate hasBeenAccepted;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _lines: IObservable<{\n\t\t\ttargetTextModel: ITextModel;\n\t\t\tlineNumber: number;\n\t\t\tadditionalLines: LineData[];\n\t\t\tminReservedLineCount: number;\n\t\t} | undefined>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t) {\n\t\tsuper();\n\t\tthis._viewZoneHeight = observableValue<undefined | number>('viewZoneHeight', undefined);\n\t\tthis.editorOptionsChanged = observableSignalFromEvent('editorOptionChanged', Event.filter(\n\t\t\tthis._editor.onDidChangeConfiguration,\n\t\t\te => e.hasChanged(EditorOption.disableMonospaceOptimizations)\n\t\t\t\t|| e.hasChanged(EditorOption.stopRenderingLineAfter)\n\t\t\t\t|| e.hasChanged(EditorOption.renderWhitespace)\n\t\t\t\t|| e.hasChanged(EditorOption.renderControlCharacters)\n\t\t\t\t|| e.hasChanged(EditorOption.fontLigatures)\n\t\t\t\t|| e.hasChanged(EditorOption.fontInfo)\n\t\t\t\t|| e.hasChanged(EditorOption.lineHeight)\n\t\t));\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._viewZoneListener = this._register(new MutableDisposable());\n\t\tthis.isHovered = observableCodeEditor(this._editor).isTargetHovered(\n\t\t\tp => isTargetGhostText(p.target.element),\n\t\t\tthis._store\n\t\t);\n\t\tthis.hasBeenAccepted = false;\n\n\t\tif (this._editor instanceof CodeEditorWidget && this._shouldKeepCursorStable) {\n\t\t\tthis._register(this._editor.onBeforeExecuteEdit(e => this.hasBeenAccepted = e.source === 'inlineSuggestion.accept'));\n\t\t}\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description update view zone */\n\t\t\tconst lines = this._lines.read(reader);\n\t\t\tthis.editorOptionsChanged.read(reader);\n\n\t\t\tif (lines) {\n\t\t\t\tthis.hasBeenAccepted = false;\n\t\t\t\tthis.updateLines(lines.lineNumber, lines.additionalLines, lines.minReservedLineCount);\n\t\t\t} else {\n\t\t\t\tthis.clear();\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.clear();\n\t}\n\n\tprivate clear(): void {\n\t\tthis._viewZoneListener.clear();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\t\t});\n\t}\n\n\tprivate updateLines(lineNumber: number, additionalLines: LineData[], minReservedLineCount: number): void {\n\t\tconst textModel = this._editor.getModel();\n\t\tif (!textModel) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { tabSize } = textModel.getOptions();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tconst store = new DisposableStore();\n\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\n\t\t\tconst heightInLines = Math.max(additionalLines.length, minReservedLineCount);\n\t\t\tif (heightInLines > 0) {\n\t\t\t\tconst domNode = document.createElement('div');\n\t\t\t\trenderLines(domNode, tabSize, additionalLines, this._editor.getOptions(), this._isClickable);\n\n\t\t\t\tif (this._isClickable) {\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'mousedown', (e) => {\n\t\t\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t\t\t}));\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'click', (e) => {\n\t\t\t\t\t\tif (isTargetGhostText(e.target)) {\n\t\t\t\t\t\t\tthis._onDidClick.fire(new StandardMouseEvent(getWindow(e), e));\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tthis.addViewZone(changeAccessor, lineNumber, heightInLines, domNode);\n\t\t\t}\n\n\t\t\tthis._viewZoneListener.value = store;\n\t\t});\n\t}\n\n\tprivate addViewZone(changeAccessor: IViewZoneChangeAccessor, afterLineNumber: number, heightInLines: number, domNode: HTMLElement): void {\n\t\tconst id = changeAccessor.addZone({\n\t\t\tafterLineNumber: afterLineNumber,\n\t\t\theightInLines: heightInLines,\n\t\t\tdomNode,\n\t\t\tafterColumnAffinity: PositionAffinity.Right,\n\t\t\tonComputedHeight: (height: number) => {\n\t\t\t\tthis._viewZoneHeight.set(height, undefined); // TODO: can a transaction be used to avoid flickering?\n\t\t\t}\n\t\t});\n\n\t\tthis.keepCursorStable(afterLineNumber, heightInLines);\n\n\t\tthis._viewZoneInfo = { viewZoneId: id, heightInLines, lineNumber: afterLineNumber };\n\t}\n\n\tprivate removeActiveViewZone(changeAccessor: IViewZoneChangeAccessor): void {\n\t\tif (this._viewZoneInfo) {\n\t\t\tchangeAccessor.removeZone(this._viewZoneInfo.viewZoneId);\n\n\t\t\tif (!this.hasBeenAccepted) {\n\t\t\t\tthis.keepCursorStable(this._viewZoneInfo.lineNumber, -this._viewZoneInfo.heightInLines);\n\t\t\t}\n\n\t\t\tthis._viewZoneInfo = undefined;\n\t\t\tthis._viewZoneHeight.set(undefined, undefined);\n\t\t}\n\t}\n\n\tprivate keepCursorStable(lineNumber: number, heightInLines: number): void {\n\t\tif (!this._shouldKeepCursorStable) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cursorLineNumber = this._editor.getSelection()?.getStartPosition()?.lineNumber;\n\t\tif (cursorLineNumber !== undefined && lineNumber < cursorLineNumber) {\n\t\t\tthis._editor.setScrollTop(this._editor.getScrollTop() + heightInLines * this._editor.getOption(EditorOption.lineHeight));\n\t\t}\n\t}\n}\n\nfunction isTargetGhostText(target: EventTarget | null): boolean {\n\treturn isHTMLElement(target) && target.classList.contains(GHOST_TEXT_CLASS_NAME);\n}\n\nexport interface LineData {\n\tcontent: LineTokens; // Must not contain a linebreak!\n\tdecorations: LineDecoration[];\n}\n\nfunction renderLines(domNode: HTMLElement, tabSize: number, lines: LineData[], opts: IComputedEditorOptions, isClickable: boolean): void {\n\tconst disableMonospaceOptimizations = opts.get(EditorOption.disableMonospaceOptimizations);\n\tconst stopRenderingLineAfter = opts.get(EditorOption.stopRenderingLineAfter);\n\t// To avoid visual confusion, we don't want to render visible whitespace\n\tconst renderWhitespace = 'none';\n\tconst renderControlCharacters = opts.get(EditorOption.renderControlCharacters);\n\tconst fontLigatures = opts.get(EditorOption.fontLigatures);\n\tconst fontInfo = opts.get(EditorOption.fontInfo);\n\tconst lineHeight = opts.get(EditorOption.lineHeight);\n\n\tlet classNames = 'suggest-preview-text';\n\tif (isClickable) {\n\t\tclassNames += ' clickable';\n\t}\n\n\tconst sb = new StringBuilder(10000);\n\tsb.appendString(`<div class=\"${classNames}\">`);\n\n\tfor (let i = 0, len = lines.length; i < len; i++) {\n\t\tconst lineData = lines[i];\n\t\tconst lineTokens = lineData.content;\n\t\tsb.appendString('<div class=\"view-line');\n\t\tsb.appendString('\" style=\"top:');\n\t\tsb.appendString(String(i * lineHeight));\n\t\tsb.appendString('px;width:1000000px;\">');\n\n\t\tconst line = lineTokens.getLineContent();\n\t\tconst isBasicASCII = strings.isBasicASCII(line);\n\t\tconst containsRTL = strings.containsRTL(line);\n\n\t\trenderViewLine(new RenderLineInput(\n\t\t\t(fontInfo.isMonospace && !disableMonospaceOptimizations),\n\t\t\tfontInfo.canUseHalfwidthRightwardsArrow,\n\t\t\tline,\n\t\t\tfalse,\n\t\t\tisBasicASCII,\n\t\t\tcontainsRTL,\n\t\t\t0,\n\t\t\tlineTokens,\n\t\t\tlineData.decorations,\n\t\t\ttabSize,\n\t\t\t0,\n\t\t\tfontInfo.spaceWidth,\n\t\t\tfontInfo.middotWidth,\n\t\t\tfontInfo.wsmiddotWidth,\n\t\t\tstopRenderingLineAfter,\n\t\t\trenderWhitespace,\n\t\t\trenderControlCharacters,\n\t\t\tfontLigatures !== EditorFontLigatures.OFF,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t0\n\t\t), sb);\n\n\t\tsb.appendString('</div>');\n\t}\n\tsb.appendString('</div>');\n\n\tapplyFontInfo(domNode, fontInfo);\n\tconst html = sb.build();\n\tconst trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html;\n\tdomNode.innerHTML = trustedhtml as string;\n}\n\nexport const ttPolicy = createTrustedTypesPolicy('editorGhostText', { createHTML: value => value });\n"]}
@@ -11,7 +11,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
11
11
  var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  return function (target, key) { decorator(target, key, paramIndex); }
13
13
  };
14
- var InlineEditsViewAndDiffProducer_1;
15
14
  import { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js';
16
15
  import { Disposable } from '../../../../../../base/common/lifecycle.js';
17
16
  import { derived } from '../../../../../../base/common/observable.js';
@@ -26,8 +25,7 @@ import { GhostTextIndicator, InlineEditHost, InlineEditModel } from './inlineEdi
26
25
  import { InlineEditsView } from './inlineEditsView.js';
27
26
  import { InlineEditTabAction } from './inlineEditsViewInterface.js';
28
27
  let InlineEditsViewAndDiffProducer = class InlineEditsViewAndDiffProducer extends Disposable {
29
- static { InlineEditsViewAndDiffProducer_1 = this; }
30
- static { this.hot = createHotClass(InlineEditsViewAndDiffProducer_1); }
28
+ static { this.hot = createHotClass(this); }
31
29
  constructor(_editor, _edit, _model, _focusIsInMenu, instantiationService) {
32
30
  super();
33
31
  this._editor = _editor;
@@ -112,7 +110,7 @@ let InlineEditsViewAndDiffProducer = class InlineEditsViewAndDiffProducer extend
112
110
  this._register(instantiationService.createInstance(InlineEditsView, this._editor, this._inlineEditHost, this._inlineEditModel, this._ghostTextIndicator, this._focusIsInMenu));
113
111
  }
114
112
  };
115
- InlineEditsViewAndDiffProducer = InlineEditsViewAndDiffProducer_1 = __decorate([
113
+ InlineEditsViewAndDiffProducer = __decorate([
116
114
  __param(4, IInstantiationService)
117
115
  ], InlineEditsViewAndDiffProducer);
118
116
  export { InlineEditsViewAndDiffProducer };