monaco-editor-core 0.56.0-dev-20260119 → 0.56.0-dev-20260121

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 (91) hide show
  1. package/esm/nls.messages.cs.js +1 -1
  2. package/esm/nls.messages.de.js +1 -1
  3. package/esm/nls.messages.es.js +1 -1
  4. package/esm/nls.messages.fr.js +1 -1
  5. package/esm/nls.messages.it.js +1 -1
  6. package/esm/nls.messages.ja.js +1 -1
  7. package/esm/nls.messages.ko.js +1 -1
  8. package/esm/nls.messages.pl.js +1 -1
  9. package/esm/nls.messages.pt-br.js +1 -1
  10. package/esm/nls.messages.ru.js +1 -1
  11. package/esm/nls.messages.tr.js +1 -1
  12. package/esm/nls.messages.zh-cn.js +1 -1
  13. package/esm/nls.messages.zh-tw.js +1 -1
  14. package/esm/vs/base/browser/dom.js +8 -0
  15. package/esm/vs/base/browser/dom.js.map +1 -1
  16. package/esm/vs/base/browser/markdownRenderer.js +1 -0
  17. package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
  18. package/esm/vs/base/browser/ui/actionbar/actionViewItems.js +4 -1
  19. package/esm/vs/base/browser/ui/actionbar/actionViewItems.js.map +1 -1
  20. package/esm/vs/base/browser/ui/actionbar/actionbar.css +8 -5
  21. package/esm/vs/base/browser/ui/contextview/contextview.js +1 -1
  22. package/esm/vs/base/browser/ui/contextview/contextview.js.map +1 -1
  23. package/esm/vs/base/browser/ui/hover/hover.js.map +1 -1
  24. package/esm/vs/base/browser/ui/list/list.js +1 -0
  25. package/esm/vs/base/browser/ui/list/list.js.map +1 -1
  26. package/esm/vs/base/browser/ui/list/listWidget.js +62 -5
  27. package/esm/vs/base/browser/ui/list/listWidget.js.map +1 -1
  28. package/esm/vs/base/browser/ui/tree/abstractTree.js +4 -1
  29. package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
  30. package/esm/vs/base/browser/ui/tree/asyncDataTree.js +4 -1
  31. package/esm/vs/base/browser/ui/tree/asyncDataTree.js.map +1 -1
  32. package/esm/vs/base/common/defaultAccount.js +0 -4
  33. package/esm/vs/base/common/defaultAccount.js.map +1 -1
  34. package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js +81 -35
  35. package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js.map +1 -1
  36. package/esm/vs/editor/browser/controller/editContext/editContext.js +11 -0
  37. package/esm/vs/editor/browser/controller/editContext/editContext.js.map +1 -1
  38. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +38 -18
  39. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
  40. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js +4 -0
  41. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js.map +1 -1
  42. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js +39 -16
  43. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js.map +1 -1
  44. package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
  45. package/esm/vs/editor/browser/view.js +21 -1
  46. package/esm/vs/editor/browser/view.js.map +1 -1
  47. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +18 -0
  48. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
  49. package/esm/vs/editor/common/model/bracketPairsTextModelPart/colorizedBracketPairsDecorationProvider.js +3 -3
  50. package/esm/vs/editor/common/model/bracketPairsTextModelPart/colorizedBracketPairsDecorationProvider.js.map +1 -1
  51. package/esm/vs/editor/common/model/textModel.js +7 -5
  52. package/esm/vs/editor/common/model/textModel.js.map +1 -1
  53. package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js +21 -17
  54. package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js.map +1 -1
  55. package/esm/vs/editor/common/model.js.map +1 -1
  56. package/esm/vs/editor/common/viewModel/viewModelDecorations.js +11 -4
  57. package/esm/vs/editor/common/viewModel/viewModelDecorations.js.map +1 -1
  58. package/esm/vs/editor/common/viewModel/viewModelImpl.js +25 -14
  59. package/esm/vs/editor/common/viewModel/viewModelImpl.js.map +1 -1
  60. package/esm/vs/editor/common/viewModel.js.map +1 -1
  61. package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +3 -3
  62. package/esm/vs/editor/contrib/clipboard/browser/clipboard.js.map +1 -1
  63. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +28 -64
  64. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js.map +1 -1
  65. package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +27 -20
  66. package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.js +37 -10
  67. package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.js.map +1 -1
  68. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +2 -2
  69. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
  70. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.css +7 -0
  71. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +22 -3
  72. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
  73. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +19 -13
  74. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
  75. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js +1 -0
  76. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js.map +1 -1
  77. package/esm/vs/editor/editor.api.d.ts +5 -1
  78. package/esm/vs/platform/actionWidget/browser/actionList.js +46 -6
  79. package/esm/vs/platform/actionWidget/browser/actionList.js.map +1 -1
  80. package/esm/vs/platform/actionWidget/browser/actionWidget.js +8 -1
  81. package/esm/vs/platform/actionWidget/browser/actionWidget.js.map +1 -1
  82. package/esm/vs/platform/actions/common/actions.js +2 -1
  83. package/esm/vs/platform/actions/common/actions.js.map +1 -1
  84. package/esm/vs/platform/defaultAccount/common/defaultAccount.js.map +1 -1
  85. package/esm/vs/platform/hover/browser/hoverService.js +1 -0
  86. package/esm/vs/platform/hover/browser/hoverService.js.map +1 -1
  87. package/esm/vs/platform/product/common/product.js +16 -1
  88. package/esm/vs/platform/product/common/product.js.map +1 -1
  89. package/monaco.d.ts +5 -1
  90. package/package.json +2 -2
  91. package/version.txt +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["vs/base/browser/ui/actionbar/actionViewItems.ts"],"names":[],"mappings":"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","file":"actionViewItems.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 { isFirefox } from '../../browser.js';\nimport { DataTransfers } from '../../dnd.js';\nimport { addDisposableListener, EventHelper, EventLike, EventType } from '../../dom.js';\nimport { EventType as TouchEventType, Gesture } from '../../touch.js';\nimport { IActionViewItem } from './actionbar.js';\nimport { IContextViewProvider } from '../contextview/contextview.js';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { IHoverDelegate } from '../hover/hoverDelegate.js';\nimport { ISelectBoxOptions, ISelectBoxStyles, ISelectOptionItem, SelectBox } from '../selectBox/selectBox.js';\nimport { IToggleStyles } from '../toggle/toggle.js';\nimport { Action, ActionRunner, IAction, IActionChangeEvent, IActionRunner, Separator } from '../../../common/actions.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport * as platform from '../../../common/platform.js';\nimport * as types from '../../../common/types.js';\nimport './actionbar.css';\nimport * as nls from '../../../../nls.js';\nimport { IManagedHover, IManagedHoverContent } from '../hover/hover.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\n\nexport interface IBaseActionViewItemOptions {\n\treadonly draggable?: boolean;\n\treadonly isMenu?: boolean;\n\treadonly isTabList?: boolean;\n\treadonly useEventAsContext?: boolean;\n\treadonly hoverDelegate?: IHoverDelegate;\n}\n\nexport class BaseActionViewItem extends Disposable implements IActionViewItem {\n\n\telement: HTMLElement | undefined;\n\n\t_context: unknown;\n\treadonly _action: IAction;\n\n\tprivate customHover?: IManagedHover;\n\n\tget action() {\n\t\treturn this._action;\n\t}\n\n\tprivate _actionRunner: IActionRunner | undefined;\n\n\tconstructor(\n\t\tcontext: unknown,\n\t\taction: IAction,\n\t\tprotected readonly options: IBaseActionViewItemOptions = {}\n\t) {\n\t\tsuper();\n\n\t\tthis._context = context || this;\n\t\tthis._action = action;\n\n\t\tif (action instanceof Action) {\n\t\t\tthis._register(action.onDidChange(event => {\n\t\t\t\tif (!this.element) {\n\t\t\t\t\t// we have not been rendered yet, so there\n\t\t\t\t\t// is no point in updating the UI\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.handleActionChangeEvent(event);\n\t\t\t}));\n\t\t}\n\t}\n\n\tprivate handleActionChangeEvent(event: IActionChangeEvent): void {\n\t\tif (event.enabled !== undefined) {\n\t\t\tthis.updateEnabled();\n\t\t}\n\n\t\tif (event.checked !== undefined) {\n\t\t\tthis.updateChecked();\n\t\t}\n\n\t\tif (event.class !== undefined) {\n\t\t\tthis.updateClass();\n\t\t}\n\n\t\tif (event.label !== undefined) {\n\t\t\tthis.updateLabel();\n\t\t\tthis.updateTooltip();\n\t\t}\n\n\t\tif (event.tooltip !== undefined) {\n\t\t\tthis.updateTooltip();\n\t\t}\n\t}\n\n\tget actionRunner(): IActionRunner {\n\t\tif (!this._actionRunner) {\n\t\t\tthis._actionRunner = this._register(new ActionRunner());\n\t\t}\n\n\t\treturn this._actionRunner;\n\t}\n\n\tset actionRunner(actionRunner: IActionRunner) {\n\t\tthis._actionRunner = actionRunner;\n\t}\n\n\tisEnabled(): boolean {\n\t\treturn this._action.enabled;\n\t}\n\n\tsetActionContext(newContext: unknown): void {\n\t\tthis._context = newContext;\n\t}\n\n\trender(container: HTMLElement): void {\n\t\tconst element = this.element = container;\n\t\tthis._register(Gesture.addTarget(container));\n\n\t\tconst enableDragging = this.options && this.options.draggable;\n\t\tif (enableDragging) {\n\t\t\tcontainer.draggable = true;\n\n\t\t\tif (isFirefox) {\n\t\t\t\t// Firefox: requires to set a text data transfer to get going\n\t\t\t\tthis._register(addDisposableListener(container, EventType.DRAG_START, e => e.dataTransfer?.setData(DataTransfers.TEXT, this._action.label)));\n\t\t\t}\n\t\t}\n\n\t\tthis._register(addDisposableListener(element, TouchEventType.Tap, e => this.onClick(e, true))); // Preserve focus on tap #125470\n\n\t\tthis._register(addDisposableListener(element, EventType.MOUSE_DOWN, e => {\n\t\t\tif (!enableDragging) {\n\t\t\t\tEventHelper.stop(e, true); // do not run when dragging is on because that would disable it\n\t\t\t}\n\n\t\t\tif (this._action.enabled && e.button === 0) {\n\t\t\t\telement.classList.add('active');\n\t\t\t}\n\t\t}));\n\n\t\tif (platform.isMacintosh) {\n\t\t\t// macOS: allow to trigger the button when holding Ctrl+key and pressing the\n\t\t\t// main mouse button. This is for scenarios where e.g. some interaction forces\n\t\t\t// the Ctrl+key to be pressed and hold but the user still wants to interact\n\t\t\t// with the actions (for example quick access in quick navigation mode).\n\t\t\tthis._register(addDisposableListener(element, EventType.CONTEXT_MENU, e => {\n\t\t\t\tif (e.button === 0 && e.ctrlKey === true) {\n\t\t\t\t\tthis.onClick(e);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(addDisposableListener(element, EventType.CLICK, e => {\n\t\t\tEventHelper.stop(e, true);\n\n\t\t\t// menus do not use the click event\n\t\t\tif (!(this.options && this.options.isMenu)) {\n\t\t\t\tthis.onClick(e);\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(element, EventType.DBLCLICK, e => {\n\t\t\tEventHelper.stop(e, true);\n\t\t}));\n\n\t\t[EventType.MOUSE_UP, EventType.MOUSE_OUT].forEach(event => {\n\t\t\tthis._register(addDisposableListener(element, event, e => {\n\t\t\t\tEventHelper.stop(e);\n\t\t\t\telement.classList.remove('active');\n\t\t\t}));\n\t\t});\n\t}\n\n\tonClick(event: EventLike, preserveFocus = false): void {\n\t\tEventHelper.stop(event, true);\n\n\t\tconst context = types.isUndefinedOrNull(this._context) ? this.options?.useEventAsContext ? event : { preserveFocus } : this._context;\n\t\tthis.actionRunner.run(this._action, context);\n\t}\n\n\t// Only set the tabIndex on the element once it is about to get focused\n\t// That way this element wont be a tab stop when it is not needed #106441\n\tfocus(): void {\n\t\tif (this.element) {\n\t\t\tthis.element.tabIndex = 0;\n\t\t\tthis.element.focus();\n\t\t\tthis.element.classList.add('focused');\n\t\t}\n\t}\n\n\tblur(): void {\n\t\tif (this.element) {\n\t\t\tthis.element.blur();\n\t\t\tthis.element.tabIndex = -1;\n\t\t\tthis.element.classList.remove('focused');\n\t\t}\n\t}\n\n\tsetFocusable(focusable: boolean): void {\n\t\tif (this.element) {\n\t\t\tthis.element.tabIndex = focusable ? 0 : -1;\n\t\t}\n\t}\n\n\tget trapsArrowNavigation(): boolean {\n\t\treturn false;\n\t}\n\n\tprotected updateEnabled(): void {\n\t\t// implement in subclass\n\t}\n\n\tprotected updateLabel(): void {\n\t\t// implement in subclass\n\t}\n\n\tprotected getClass(): string | undefined {\n\t\treturn this.action.class;\n\t}\n\n\tprotected getTooltip(): string | undefined {\n\t\treturn this.action.tooltip;\n\t}\n\n\tprotected getHoverContents(): IManagedHoverContent | undefined {\n\t\treturn this.getTooltip();\n\t}\n\n\tprotected updateTooltip(): void {\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\t\tconst title = this.getHoverContents() ?? '';\n\t\tthis.updateAriaLabel();\n\n\t\tif (!this.customHover && title !== '') {\n\t\t\tconst hoverDelegate = this.options.hoverDelegate ?? getDefaultHoverDelegate('element');\n\t\t\tthis.customHover = this._store.add(getBaseLayerHoverDelegate().setupManagedHover(hoverDelegate, this.element, title));\n\t\t} else if (this.customHover) {\n\t\t\tthis.customHover.update(title);\n\t\t}\n\t}\n\n\tprotected updateAriaLabel(): void {\n\t\tif (this.element) {\n\t\t\tconst title = this.getTooltip() ?? '';\n\t\t\tthis.element.setAttribute('aria-label', title);\n\t\t}\n\t}\n\n\tprotected updateClass(): void {\n\t\t// implement in subclass\n\t}\n\n\tprotected updateChecked(): void {\n\t\t// implement in subclass\n\t}\n\n\toverride dispose(): void {\n\t\tif (this.element) {\n\t\t\tthis.element.remove();\n\t\t\tthis.element = undefined;\n\t\t}\n\t\tthis._context = undefined;\n\t\tsuper.dispose();\n\t}\n}\n\nexport interface IActionViewItemOptions extends IBaseActionViewItemOptions {\n\ticon?: boolean;\n\tlabel?: boolean;\n\treadonly keybinding?: string | null;\n\treadonly keybindingNotRenderedWithLabel?: boolean;\n\treadonly toggleStyles?: IToggleStyles;\n}\n\nexport class ActionViewItem extends BaseActionViewItem {\n\n\tprotected label: HTMLElement | undefined;\n\tprotected override readonly options: IActionViewItemOptions;\n\n\tprivate cssClass?: string;\n\n\tconstructor(context: unknown, action: IAction, options: IActionViewItemOptions) {\n\t\toptions = {\n\t\t\t...options,\n\t\t\ticon: options.icon !== undefined ? options.icon : false,\n\t\t\tlabel: options.label !== undefined ? options.label : true,\n\t\t};\n\t\tsuper(context, action, options);\n\n\t\tthis.options = options;\n\t\tthis.cssClass = '';\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\t\ttypes.assertType(this.element);\n\n\t\tconst label = document.createElement('a');\n\t\tlabel.classList.add('action-label');\n\t\tlabel.setAttribute('role', this.getDefaultAriaRole());\n\n\t\tthis.label = label;\n\t\tthis.element.appendChild(label);\n\n\t\tif (this.options.label && this.options.keybinding && !this.options.keybindingNotRenderedWithLabel) {\n\t\t\tconst kbLabel = document.createElement('span');\n\t\t\tkbLabel.classList.add('keybinding');\n\t\t\tkbLabel.textContent = this.options.keybinding;\n\t\t\tthis.element.appendChild(kbLabel);\n\t\t}\n\n\t\tthis.updateClass();\n\t\tthis.updateLabel();\n\t\tthis.updateTooltip();\n\t\tthis.updateEnabled();\n\t\tthis.updateChecked();\n\t}\n\n\tprivate getDefaultAriaRole(): 'presentation' | 'menuitem' | 'tab' | 'button' {\n\t\tif (this._action.id === Separator.ID) {\n\t\t\treturn 'presentation'; // A separator is a presentation item\n\t\t} else {\n\t\t\tif (this.options.isMenu) {\n\t\t\t\treturn 'menuitem';\n\t\t\t} else if (this.options.isTabList) {\n\t\t\t\treturn 'tab';\n\t\t\t} else {\n\t\t\t\treturn 'button';\n\t\t\t}\n\t\t}\n\t}\n\n\t// Only set the tabIndex on the element once it is about to get focused\n\t// That way this element wont be a tab stop when it is not needed #106441\n\toverride focus(): void {\n\t\tif (this.label) {\n\t\t\tthis.label.tabIndex = 0;\n\t\t\tthis.label.focus();\n\t\t}\n\t}\n\n\toverride blur(): void {\n\t\tif (this.label) {\n\t\t\tthis.label.tabIndex = -1;\n\t\t}\n\t}\n\n\toverride setFocusable(focusable: boolean): void {\n\t\tif (this.label) {\n\t\t\tthis.label.tabIndex = focusable ? 0 : -1;\n\t\t}\n\t}\n\n\tprotected override updateLabel(): void {\n\t\tif (this.options.label && this.label) {\n\t\t\tthis.label.textContent = this.action.label;\n\t\t}\n\t}\n\n\tprotected override getTooltip() {\n\t\tlet title: string | null = null;\n\n\t\tif (this.action.tooltip) {\n\t\t\ttitle = this.action.tooltip;\n\n\t\t} else if (this.action.label) {\n\t\t\ttitle = this.action.label;\n\t\t\tif (this.options.keybinding) {\n\t\t\t\ttitle = nls.localize({ key: 'titleLabel', comment: ['action title', 'action keybinding'] }, \"{0} ({1})\", title, this.options.keybinding);\n\t\t\t}\n\t\t}\n\t\treturn title ?? undefined;\n\t}\n\n\tprotected override updateClass(): void {\n\t\tif (this.cssClass && this.label) {\n\t\t\tthis.label.classList.remove(...this.cssClass.split(' '));\n\t\t}\n\t\tif (this.options.icon) {\n\t\t\tthis.cssClass = this.getClass();\n\n\t\t\tif (this.label) {\n\t\t\t\tthis.label.classList.add('codicon');\n\t\t\t\tif (this.cssClass) {\n\t\t\t\t\tthis.label.classList.add(...this.cssClass.split(' '));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.updateEnabled();\n\t\t} else {\n\t\t\tthis.label?.classList.remove('codicon');\n\t\t}\n\t}\n\n\tprotected override updateEnabled(): void {\n\t\tif (this.action.enabled) {\n\t\t\tif (this.label) {\n\t\t\t\tthis.label.removeAttribute('aria-disabled');\n\t\t\t\tthis.label.classList.remove('disabled');\n\t\t\t}\n\n\t\t\tthis.element?.classList.remove('disabled');\n\t\t} else {\n\t\t\tif (this.label) {\n\t\t\t\tthis.label.setAttribute('aria-disabled', 'true');\n\t\t\t\tthis.label.classList.add('disabled');\n\t\t\t}\n\n\t\t\tthis.element?.classList.add('disabled');\n\t\t}\n\t}\n\n\tprotected override updateAriaLabel(): void {\n\t\tif (this.label) {\n\t\t\tconst title = this.getTooltip() ?? '';\n\t\t\tthis.label.setAttribute('aria-label', title);\n\t\t}\n\t}\n\n\tprotected override updateChecked(): void {\n\t\tif (this.label) {\n\t\t\tif (this.action.checked !== undefined) {\n\t\t\t\tthis.label.classList.toggle('checked', this.action.checked);\n\t\t\t\tif (this.options.isTabList) {\n\t\t\t\t\tthis.label.setAttribute('aria-selected', this.action.checked ? 'true' : 'false');\n\t\t\t\t} else {\n\t\t\t\t\tthis.label.setAttribute('aria-checked', this.action.checked ? 'true' : 'false');\n\t\t\t\t\tthis.label.setAttribute('role', 'checkbox');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.label.classList.remove('checked');\n\t\t\t\tthis.label.removeAttribute(this.options.isTabList ? 'aria-selected' : 'aria-checked');\n\t\t\t\tthis.label.setAttribute('role', this.getDefaultAriaRole());\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class SelectActionViewItem<T = string> extends BaseActionViewItem {\n\tprotected selectBox: SelectBox;\n\n\tconstructor(ctx: unknown, action: IAction, options: ISelectOptionItem[], selected: number, contextViewProvider: IContextViewProvider, styles: ISelectBoxStyles, selectBoxOptions?: ISelectBoxOptions) {\n\t\tsuper(ctx, action);\n\n\t\tthis.selectBox = new SelectBox(options, selected, contextViewProvider, styles, selectBoxOptions);\n\t\tthis.selectBox.setFocusable(false);\n\n\t\tthis._register(this.selectBox);\n\t\tthis.registerListeners();\n\t}\n\n\tselect(index: number): void {\n\t\tthis.selectBox.select(index);\n\t}\n\n\tprivate registerListeners(): void {\n\t\tthis._register(this.selectBox.onDidSelect(e => this.runAction(e.selected, e.index)));\n\t}\n\n\tprotected runAction(option: string, index: number): void {\n\t\tthis.actionRunner.run(this._action, this.getActionContext(option, index));\n\t}\n\n\tprotected getActionContext(option: string, index: number): T | string {\n\t\treturn option;\n\t}\n\n\toverride setFocusable(focusable: boolean): void {\n\t\tthis.selectBox.setFocusable(focusable);\n\t}\n\n\toverride focus(): void {\n\t\tthis.selectBox?.focus();\n\t}\n\n\toverride blur(): void {\n\t\tthis.selectBox?.blur();\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tthis.selectBox.render(container);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["vs/base/browser/ui/actionbar/actionViewItems.ts"],"names":[],"mappings":"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","file":"actionViewItems.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 { isFirefox } from '../../browser.js';\nimport { DataTransfers } from '../../dnd.js';\nimport { addDisposableListener, EventHelper, EventLike, EventType } from '../../dom.js';\nimport { EventType as TouchEventType, Gesture } from '../../touch.js';\nimport { IActionViewItem } from './actionbar.js';\nimport { IContextViewProvider } from '../contextview/contextview.js';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { IHoverDelegate } from '../hover/hoverDelegate.js';\nimport { ISelectBoxOptions, ISelectBoxStyles, ISelectOptionItem, SelectBox } from '../selectBox/selectBox.js';\nimport { IToggleStyles } from '../toggle/toggle.js';\nimport { Action, ActionRunner, IAction, IActionChangeEvent, IActionRunner, Separator } from '../../../common/actions.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport * as platform from '../../../common/platform.js';\nimport * as types from '../../../common/types.js';\nimport './actionbar.css';\nimport * as nls from '../../../../nls.js';\nimport { IManagedHover, IManagedHoverContent } from '../hover/hover.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\n\nexport interface IBaseActionViewItemOptions {\n\treadonly draggable?: boolean;\n\treadonly isMenu?: boolean;\n\treadonly isTabList?: boolean;\n\treadonly useEventAsContext?: boolean;\n\treadonly hoverDelegate?: IHoverDelegate;\n}\n\nexport class BaseActionViewItem extends Disposable implements IActionViewItem {\n\n\telement: HTMLElement | undefined;\n\n\t_context: unknown;\n\treadonly _action: IAction;\n\n\tprivate customHover?: IManagedHover;\n\n\tget action() {\n\t\treturn this._action;\n\t}\n\n\tprivate _actionRunner: IActionRunner | undefined;\n\n\tconstructor(\n\t\tcontext: unknown,\n\t\taction: IAction,\n\t\tprotected readonly options: IBaseActionViewItemOptions = {}\n\t) {\n\t\tsuper();\n\n\t\tthis._context = context || this;\n\t\tthis._action = action;\n\n\t\tif (action instanceof Action) {\n\t\t\tthis._register(action.onDidChange(event => {\n\t\t\t\tif (!this.element) {\n\t\t\t\t\t// we have not been rendered yet, so there\n\t\t\t\t\t// is no point in updating the UI\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.handleActionChangeEvent(event);\n\t\t\t}));\n\t\t}\n\t}\n\n\tprivate handleActionChangeEvent(event: IActionChangeEvent): void {\n\t\tif (event.enabled !== undefined) {\n\t\t\tthis.updateEnabled();\n\t\t}\n\n\t\tif (event.checked !== undefined) {\n\t\t\tthis.updateChecked();\n\t\t}\n\n\t\tif (event.class !== undefined) {\n\t\t\tthis.updateClass();\n\t\t}\n\n\t\tif (event.label !== undefined) {\n\t\t\tthis.updateLabel();\n\t\t\tthis.updateTooltip();\n\t\t}\n\n\t\tif (event.tooltip !== undefined) {\n\t\t\tthis.updateTooltip();\n\t\t}\n\t}\n\n\tget actionRunner(): IActionRunner {\n\t\tif (!this._actionRunner) {\n\t\t\tthis._actionRunner = this._register(new ActionRunner());\n\t\t}\n\n\t\treturn this._actionRunner;\n\t}\n\n\tset actionRunner(actionRunner: IActionRunner) {\n\t\tthis._actionRunner = actionRunner;\n\t}\n\n\tisEnabled(): boolean {\n\t\treturn this._action.enabled;\n\t}\n\n\tsetActionContext(newContext: unknown): void {\n\t\tthis._context = newContext;\n\t}\n\n\trender(container: HTMLElement): void {\n\t\tconst element = this.element = container;\n\t\tthis._register(Gesture.addTarget(container));\n\n\t\tconst enableDragging = this.options && this.options.draggable;\n\t\tif (enableDragging) {\n\t\t\tcontainer.draggable = true;\n\n\t\t\tif (isFirefox) {\n\t\t\t\t// Firefox: requires to set a text data transfer to get going\n\t\t\t\tthis._register(addDisposableListener(container, EventType.DRAG_START, e => e.dataTransfer?.setData(DataTransfers.TEXT, this._action.label)));\n\t\t\t}\n\t\t}\n\n\t\tthis._register(addDisposableListener(element, TouchEventType.Tap, e => this.onClick(e, true))); // Preserve focus on tap #125470\n\n\t\tthis._register(addDisposableListener(element, EventType.MOUSE_DOWN, e => {\n\t\t\tif (!enableDragging) {\n\t\t\t\tEventHelper.stop(e, true); // do not run when dragging is on because that would disable it\n\t\t\t}\n\n\t\t\tif (this._action.enabled && e.button === 0) {\n\t\t\t\telement.classList.add('active');\n\t\t\t}\n\t\t}));\n\n\t\tif (platform.isMacintosh) {\n\t\t\t// macOS: allow to trigger the button when holding Ctrl+key and pressing the\n\t\t\t// main mouse button. This is for scenarios where e.g. some interaction forces\n\t\t\t// the Ctrl+key to be pressed and hold but the user still wants to interact\n\t\t\t// with the actions (for example quick access in quick navigation mode).\n\t\t\tthis._register(addDisposableListener(element, EventType.CONTEXT_MENU, e => {\n\t\t\t\tif (e.button === 0 && e.ctrlKey === true) {\n\t\t\t\t\tthis.onClick(e);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(addDisposableListener(element, EventType.CLICK, e => {\n\t\t\tEventHelper.stop(e, true);\n\n\t\t\t// menus do not use the click event\n\t\t\tif (!(this.options && this.options.isMenu)) {\n\t\t\t\tthis.onClick(e);\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(addDisposableListener(element, EventType.DBLCLICK, e => {\n\t\t\tEventHelper.stop(e, true);\n\t\t}));\n\n\t\t[EventType.MOUSE_UP, EventType.MOUSE_OUT].forEach(event => {\n\t\t\tthis._register(addDisposableListener(element, event, e => {\n\t\t\t\tEventHelper.stop(e);\n\t\t\t\telement.classList.remove('active');\n\t\t\t}));\n\t\t});\n\t}\n\n\tonClick(event: EventLike, preserveFocus = false): void {\n\t\tEventHelper.stop(event, true);\n\n\t\tconst context = types.isUndefinedOrNull(this._context) ? this.options?.useEventAsContext ? event : { preserveFocus } : this._context;\n\t\tthis.actionRunner.run(this._action, context);\n\t}\n\n\t// Only set the tabIndex on the element once it is about to get focused\n\t// That way this element wont be a tab stop when it is not needed #106441\n\tfocus(): void {\n\t\tif (this.element) {\n\t\t\tthis.element.tabIndex = 0;\n\t\t\tthis.element.focus();\n\t\t\tthis.element.classList.add('focused');\n\t\t}\n\t}\n\n\tblur(): void {\n\t\tif (this.element) {\n\t\t\tthis.element.blur();\n\t\t\tthis.element.tabIndex = -1;\n\t\t\tthis.element.classList.remove('focused');\n\t\t}\n\t}\n\n\tsetFocusable(focusable: boolean): void {\n\t\tif (this.element) {\n\t\t\tthis.element.tabIndex = focusable ? 0 : -1;\n\t\t}\n\t}\n\n\tget trapsArrowNavigation(): boolean {\n\t\treturn false;\n\t}\n\n\tprotected updateEnabled(): void {\n\t\t// implement in subclass\n\t}\n\n\tprotected updateLabel(): void {\n\t\t// implement in subclass\n\t}\n\n\tprotected getClass(): string | undefined {\n\t\treturn this.action.class;\n\t}\n\n\tprotected getTooltip(): string | undefined {\n\t\treturn this.action.tooltip;\n\t}\n\n\tprotected getHoverContents(): IManagedHoverContent | undefined {\n\t\treturn this.getTooltip();\n\t}\n\n\tprotected updateTooltip(): void {\n\t\tif (!this.element) {\n\t\t\treturn;\n\t\t}\n\t\tconst title = this.getHoverContents() ?? '';\n\t\tthis.updateAriaLabel();\n\n\t\tif (!this.customHover && title !== '') {\n\t\t\tconst hoverDelegate = this.options.hoverDelegate ?? getDefaultHoverDelegate('element');\n\t\t\tthis.customHover = this._store.add(getBaseLayerHoverDelegate().setupManagedHover(hoverDelegate, this.element, title));\n\t\t} else if (this.customHover) {\n\t\t\tthis.customHover.update(title);\n\t\t}\n\t}\n\n\tprotected updateAriaLabel(): void {\n\t\tif (this.element) {\n\t\t\tconst title = this.getTooltip() ?? '';\n\t\t\tthis.element.setAttribute('aria-label', title);\n\t\t}\n\t}\n\n\tprotected updateClass(): void {\n\t\t// implement in subclass\n\t}\n\n\tprotected updateChecked(): void {\n\t\t// implement in subclass\n\t}\n\n\toverride dispose(): void {\n\t\tif (this.element) {\n\t\t\tthis.element.remove();\n\t\t\tthis.element = undefined;\n\t\t}\n\t\tthis._context = undefined;\n\t\tsuper.dispose();\n\t}\n}\n\nexport interface IActionViewItemOptions extends IBaseActionViewItemOptions {\n\ticon?: boolean;\n\tlabel?: boolean;\n\treadonly keybinding?: string | null;\n\treadonly keybindingNotRenderedWithLabel?: boolean;\n\treadonly toggleStyles?: IToggleStyles;\n}\n\nexport class ActionViewItem extends BaseActionViewItem {\n\n\tprotected label: HTMLElement | undefined;\n\tprotected override readonly options: IActionViewItemOptions;\n\n\tprivate cssClass?: string;\n\n\tconstructor(context: unknown, action: IAction, options: IActionViewItemOptions) {\n\t\toptions = {\n\t\t\t...options,\n\t\t\ticon: options.icon !== undefined ? options.icon : false,\n\t\t\tlabel: options.label !== undefined ? options.label : true,\n\t\t};\n\t\tsuper(context, action, options);\n\n\t\tthis.options = options;\n\t\tthis.cssClass = '';\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tsuper.render(container);\n\t\ttypes.assertType(this.element);\n\n\t\tconst label = document.createElement('a');\n\t\tlabel.classList.add('action-label');\n\t\tlabel.setAttribute('role', this.getDefaultAriaRole());\n\n\t\tthis.label = label;\n\t\tthis.element.appendChild(label);\n\n\t\tif (this.options.label && this.options.keybinding && !this.options.keybindingNotRenderedWithLabel) {\n\t\t\tconst kbLabel = document.createElement('span');\n\t\t\tkbLabel.classList.add('keybinding');\n\t\t\tkbLabel.textContent = this.options.keybinding;\n\t\t\tthis.element.appendChild(kbLabel);\n\t\t}\n\n\t\tthis.updateClass();\n\t\tthis.updateLabel();\n\t\tthis.updateTooltip();\n\t\tthis.updateEnabled();\n\t\tthis.updateChecked();\n\t}\n\n\tprivate getDefaultAriaRole(): 'presentation' | 'menuitem' | 'tab' | 'button' {\n\t\tif (this._action.id === Separator.ID) {\n\t\t\treturn 'presentation'; // A separator is a presentation item\n\t\t} else {\n\t\t\tif (this.options.isMenu) {\n\t\t\t\treturn 'menuitem';\n\t\t\t} else if (this.options.isTabList) {\n\t\t\t\treturn 'tab';\n\t\t\t} else {\n\t\t\t\treturn 'button';\n\t\t\t}\n\t\t}\n\t}\n\n\t// Only set the tabIndex on the element once it is about to get focused\n\t// That way this element wont be a tab stop when it is not needed #106441\n\toverride focus(): void {\n\t\tif (this.label) {\n\t\t\tthis.label.tabIndex = 0;\n\t\t\tthis.label.focus();\n\t\t}\n\t}\n\n\toverride blur(): void {\n\t\tif (this.label) {\n\t\t\tthis.label.tabIndex = -1;\n\t\t}\n\t}\n\n\toverride setFocusable(focusable: boolean): void {\n\t\tif (this.label) {\n\t\t\tthis.label.tabIndex = focusable ? 0 : -1;\n\t\t}\n\t}\n\n\tprotected override updateLabel(): void {\n\t\tif (this.options.label && this.label) {\n\t\t\tthis.label.textContent = this.action.label;\n\t\t}\n\t}\n\n\tprotected override getTooltip() {\n\t\tlet title: string | null = null;\n\n\t\tif (this.action.tooltip) {\n\t\t\ttitle = this.action.tooltip;\n\n\t\t} else if (this.action.label) {\n\t\t\ttitle = this.action.label;\n\t\t\tif (this.options.keybinding) {\n\t\t\t\ttitle = nls.localize({ key: 'titleLabel', comment: ['action title', 'action keybinding'] }, \"{0} ({1})\", title, this.options.keybinding);\n\t\t\t}\n\t\t}\n\t\treturn title ?? undefined;\n\t}\n\n\tprotected override updateClass(): void {\n\t\tif (this.cssClass && this.label) {\n\t\t\tthis.label.classList.remove(...this.cssClass.split(' '));\n\t\t}\n\t\tif (this.action.id === Separator.ID && this.action.class) {\n\t\t\tthis.label?.classList.add(this.action.class);\n\n\t\t} else if (this.options.icon) {\n\t\t\tthis.cssClass = this.getClass();\n\n\t\t\tif (this.label) {\n\t\t\t\tthis.label.classList.add('codicon');\n\t\t\t\tif (this.cssClass) {\n\t\t\t\t\tthis.label.classList.add(...this.cssClass.split(' '));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.updateEnabled();\n\t\t} else {\n\t\t\tthis.label?.classList.remove('codicon');\n\t\t}\n\t}\n\n\tprotected override updateEnabled(): void {\n\t\tif (this.action.enabled) {\n\t\t\tif (this.label) {\n\t\t\t\tthis.label.removeAttribute('aria-disabled');\n\t\t\t\tthis.label.classList.remove('disabled');\n\t\t\t}\n\n\t\t\tthis.element?.classList.remove('disabled');\n\t\t} else {\n\t\t\tif (this.label) {\n\t\t\t\tthis.label.setAttribute('aria-disabled', 'true');\n\t\t\t\tthis.label.classList.add('disabled');\n\t\t\t}\n\n\t\t\tthis.element?.classList.add('disabled');\n\t\t}\n\t}\n\n\tprotected override updateAriaLabel(): void {\n\t\tif (this.label) {\n\t\t\tconst title = this.getTooltip() ?? '';\n\t\t\tthis.label.setAttribute('aria-label', title);\n\t\t}\n\t}\n\n\tprotected override updateChecked(): void {\n\t\tif (this.label) {\n\t\t\tif (this.action.checked !== undefined) {\n\t\t\t\tthis.label.classList.toggle('checked', this.action.checked);\n\t\t\t\tif (this.options.isTabList) {\n\t\t\t\t\tthis.label.setAttribute('aria-selected', this.action.checked ? 'true' : 'false');\n\t\t\t\t} else {\n\t\t\t\t\tthis.label.setAttribute('aria-checked', this.action.checked ? 'true' : 'false');\n\t\t\t\t\tthis.label.setAttribute('role', 'checkbox');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.label.classList.remove('checked');\n\t\t\t\tthis.label.removeAttribute(this.options.isTabList ? 'aria-selected' : 'aria-checked');\n\t\t\t\tthis.label.setAttribute('role', this.getDefaultAriaRole());\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class SelectActionViewItem<T = string> extends BaseActionViewItem {\n\tprotected selectBox: SelectBox;\n\n\tconstructor(ctx: unknown, action: IAction, options: ISelectOptionItem[], selected: number, contextViewProvider: IContextViewProvider, styles: ISelectBoxStyles, selectBoxOptions?: ISelectBoxOptions) {\n\t\tsuper(ctx, action);\n\n\t\tthis.selectBox = new SelectBox(options, selected, contextViewProvider, styles, selectBoxOptions);\n\t\tthis.selectBox.setFocusable(false);\n\n\t\tthis._register(this.selectBox);\n\t\tthis.registerListeners();\n\t}\n\n\tselect(index: number): void {\n\t\tthis.selectBox.select(index);\n\t}\n\n\tprivate registerListeners(): void {\n\t\tthis._register(this.selectBox.onDidSelect(e => this.runAction(e.selected, e.index)));\n\t}\n\n\tprotected runAction(option: string, index: number): void {\n\t\tthis.actionRunner.run(this._action, this.getActionContext(option, index));\n\t}\n\n\tprotected getActionContext(option: string, index: number): T | string {\n\t\treturn option;\n\t}\n\n\toverride setFocusable(focusable: boolean): void {\n\t\tthis.selectBox.setFocusable(focusable);\n\t}\n\n\toverride focus(): void {\n\t\tthis.selectBox?.focus();\n\t}\n\n\toverride blur(): void {\n\t\tthis.selectBox?.blur();\n\t}\n\n\toverride render(container: HTMLElement): void {\n\t\tthis.selectBox.render(container);\n\t}\n}\n"]}
@@ -45,7 +45,8 @@
45
45
  height: 16px;
46
46
  }
47
47
 
48
- .monaco-action-bar .action-label {
48
+ .monaco-action-bar .action-label,
49
+ .monaco-action-bar .action-item .keybinding {
49
50
  display: flex;
50
51
  font-size: 11px;
51
52
  padding: 3px;
@@ -75,12 +76,14 @@
75
76
  display: block;
76
77
  }
77
78
 
78
- .monaco-action-bar.vertical .action-label.separator {
79
+ .monaco-action-bar.vertical .action-item .action-label.separator {
79
80
  display: block;
80
- border-bottom: 1px solid var(--vscode-disabledForeground);
81
+ border-bottom: 1px solid var(--vscode-menu-separatorBackground, var(--vscode-disabledForeground));
81
82
  padding-top: 1px;
82
- margin-left: .8em;
83
- margin-right: .8em;
83
+ margin: 4px .8em;
84
+ width: 100%;
85
+ height: 0;
86
+ background-color: transparent;
84
87
  }
85
88
 
86
89
  .monaco-action-bar .action-item .action-label.separator {
@@ -38,7 +38,7 @@ export function layout(viewportSize, viewSize, anchor) {
38
38
  if (viewSize <= layoutBeforeAnchorBoundary) {
39
39
  return layoutBeforeAnchorBoundary - viewSize; // happy case, lay it out before the anchor
40
40
  }
41
- if (viewSize <= viewportSize - layoutAfterAnchorBoundary) {
41
+ if (viewSize <= viewportSize - layoutAfterAnchorBoundary && layoutBeforeAnchorBoundary < viewSize / 2) {
42
42
  return layoutAfterAnchorBoundary; // ok case, lay it out after the anchor
43
43
  }
44
44
  return 0; // sad case, lay it over the anchor
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/browser/ui/contextview/contextview.ts","vs/base/browser/ui/contextview/contextview.ts"],"names":[],"mappings":"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","file":"contextview.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 { BrowserFeatures } from '../../canIUse.js';\nimport * as DOM from '../../dom.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../common/lifecycle.js';\nimport * as platform from '../../../common/platform.js';\nimport { Range } from '../../../common/range.js';\nimport { OmitOptional } from '../../../common/types.js';\nimport './contextview.css';\n\nexport const enum ContextViewDOMPosition {\n\tABSOLUTE = 1,\n\tFIXED,\n\tFIXED_SHADOW\n}\n\nexport interface IAnchor {\n\tx: number;\n\ty: number;\n\twidth?: number;\n\theight?: number;\n}\n\nexport function isAnchor(obj: unknown): obj is IAnchor | OmitOptional<IAnchor> {\n\tconst anchor = obj as IAnchor | OmitOptional<IAnchor> | undefined;\n\n\treturn !!anchor && typeof anchor.x === 'number' && typeof anchor.y === 'number';\n}\n\nexport const enum AnchorAlignment {\n\tLEFT, RIGHT\n}\n\nexport const enum AnchorPosition {\n\tBELOW, ABOVE\n}\n\nexport const enum AnchorAxisAlignment {\n\tVERTICAL, HORIZONTAL\n}\n\nexport interface IDelegate {\n\t/**\n\t * The anchor where to position the context view.\n\t * Use a `HTMLElement` to position the view at the element,\n\t * a `StandardMouseEvent` to position it at the mouse position\n\t * or an `IAnchor` to position it at a specific location.\n\t */\n\tgetAnchor(): HTMLElement | StandardMouseEvent | IAnchor;\n\trender(container: HTMLElement): IDisposable | null;\n\tfocus?(): void;\n\tlayout?(): void;\n\tanchorAlignment?: AnchorAlignment; // default: left\n\tanchorPosition?: AnchorPosition; // default: below\n\tanchorAxisAlignment?: AnchorAxisAlignment; // default: vertical\n\tcanRelayout?: boolean; // default: true\n\tonDOMEvent?(e: Event, activeElement: HTMLElement): void;\n\tonHide?(data?: unknown): void;\n\n\t/**\n\t * context views with higher layers are rendered higher in z-index order\n\t */\n\tlayer?: number; // Default: 0\n}\n\nexport interface IContextViewProvider {\n\tshowContextView(delegate: IDelegate, container?: HTMLElement): void;\n\thideContextView(): void;\n\tlayout(): void;\n}\n\nexport interface IPosition {\n\ttop: number;\n\tleft: number;\n}\n\nexport interface ISize {\n\twidth: number;\n\theight: number;\n}\n\nexport interface IView extends IPosition, ISize { }\n\nexport const enum LayoutAnchorPosition {\n\tBefore,\n\tAfter\n}\n\nexport enum LayoutAnchorMode {\n\tAVOID,\n\tALIGN\n}\n\nexport interface ILayoutAnchor {\n\toffset: number;\n\tsize: number;\n\tmode?: LayoutAnchorMode; // default: AVOID\n\tposition: LayoutAnchorPosition;\n}\n\n/**\n * Lays out a one dimensional view next to an anchor in a viewport.\n *\n * @returns The view offset within the viewport.\n */\nexport function layout(viewportSize: number, viewSize: number, anchor: ILayoutAnchor): number {\n\tconst layoutAfterAnchorBoundary = anchor.mode === LayoutAnchorMode.ALIGN ? anchor.offset : anchor.offset + anchor.size;\n\tconst layoutBeforeAnchorBoundary = anchor.mode === LayoutAnchorMode.ALIGN ? anchor.offset + anchor.size : anchor.offset;\n\n\tif (anchor.position === LayoutAnchorPosition.Before) {\n\t\tif (viewSize <= viewportSize - layoutAfterAnchorBoundary) {\n\t\t\treturn layoutAfterAnchorBoundary; // happy case, lay it out after the anchor\n\t\t}\n\n\t\tif (viewSize <= layoutBeforeAnchorBoundary) {\n\t\t\treturn layoutBeforeAnchorBoundary - viewSize; // ok case, lay it out before the anchor\n\t\t}\n\n\t\treturn Math.max(viewportSize - viewSize, 0); // sad case, lay it over the anchor\n\t} else {\n\t\tif (viewSize <= layoutBeforeAnchorBoundary) {\n\t\t\treturn layoutBeforeAnchorBoundary - viewSize; // happy case, lay it out before the anchor\n\t\t}\n\n\t\tif (viewSize <= viewportSize - layoutAfterAnchorBoundary) {\n\t\t\treturn layoutAfterAnchorBoundary; // ok case, lay it out after the anchor\n\t\t}\n\n\t\treturn 0; // sad case, lay it over the anchor\n\t}\n}\n\nexport class ContextView extends Disposable {\n\n\tprivate static readonly BUBBLE_UP_EVENTS = ['click', 'keydown', 'focus', 'blur'];\n\tprivate static readonly BUBBLE_DOWN_EVENTS = ['click'];\n\n\tprivate container: HTMLElement | null = null;\n\tprivate view: HTMLElement;\n\tprivate useFixedPosition = false;\n\tprivate useShadowDOM = false;\n\tprivate delegate: IDelegate | null = null;\n\tprivate toDisposeOnClean: IDisposable = Disposable.None;\n\tprivate toDisposeOnSetContainer: IDisposable = Disposable.None;\n\tprivate shadowRoot: ShadowRoot | null = null;\n\tprivate shadowRootHostElement: HTMLElement | null = null;\n\n\tconstructor(container: HTMLElement, domPosition: ContextViewDOMPosition) {\n\t\tsuper();\n\n\t\tthis.view = DOM.$('.context-view');\n\t\tDOM.hide(this.view);\n\n\t\tthis.setContainer(container, domPosition);\n\t\tthis._register(toDisposable(() => this.setContainer(null, ContextViewDOMPosition.ABSOLUTE)));\n\t}\n\n\tsetContainer(container: HTMLElement | null, domPosition: ContextViewDOMPosition): void {\n\t\tthis.useFixedPosition = domPosition !== ContextViewDOMPosition.ABSOLUTE;\n\t\tconst usedShadowDOM = this.useShadowDOM;\n\t\tthis.useShadowDOM = domPosition === ContextViewDOMPosition.FIXED_SHADOW;\n\n\t\tif (container === this.container && usedShadowDOM === this.useShadowDOM) {\n\t\t\treturn; // container is the same and no shadow DOM usage has changed\n\t\t}\n\n\t\tif (this.container) {\n\t\t\tthis.toDisposeOnSetContainer.dispose();\n\n\t\t\tthis.view.remove();\n\t\t\tif (this.shadowRoot) {\n\t\t\t\tthis.shadowRoot = null;\n\t\t\t\tthis.shadowRootHostElement?.remove();\n\t\t\t\tthis.shadowRootHostElement = null;\n\t\t\t}\n\n\t\t\tthis.container = null;\n\t\t}\n\n\t\tif (container) {\n\t\t\tthis.container = container;\n\n\t\t\tif (this.useShadowDOM) {\n\t\t\t\tthis.shadowRootHostElement = DOM.$('.shadow-root-host');\n\t\t\t\tthis.container.appendChild(this.shadowRootHostElement);\n\t\t\t\tthis.shadowRoot = this.shadowRootHostElement.attachShadow({ mode: 'open' });\n\t\t\t\tconst style = document.createElement('style');\n\t\t\t\tstyle.textContent = SHADOW_ROOT_CSS;\n\t\t\t\tthis.shadowRoot.appendChild(style);\n\t\t\t\tthis.shadowRoot.appendChild(this.view);\n\t\t\t\tthis.shadowRoot.appendChild(DOM.$('slot'));\n\t\t\t} else {\n\t\t\t\tthis.container.appendChild(this.view);\n\t\t\t}\n\n\t\t\tconst toDisposeOnSetContainer = new DisposableStore();\n\n\t\t\tContextView.BUBBLE_UP_EVENTS.forEach(event => {\n\t\t\t\ttoDisposeOnSetContainer.add(DOM.addStandardDisposableListener(this.container!, event, e => {\n\t\t\t\t\tthis.onDOMEvent(e, false);\n\t\t\t\t}));\n\t\t\t});\n\n\t\t\tContextView.BUBBLE_DOWN_EVENTS.forEach(event => {\n\t\t\t\ttoDisposeOnSetContainer.add(DOM.addStandardDisposableListener(this.container!, event, e => {\n\t\t\t\t\tthis.onDOMEvent(e, true);\n\t\t\t\t}, true));\n\t\t\t});\n\n\t\t\tthis.toDisposeOnSetContainer = toDisposeOnSetContainer;\n\t\t}\n\t}\n\n\tshow(delegate: IDelegate): void {\n\t\tif (this.isVisible()) {\n\t\t\tthis.hide();\n\t\t}\n\n\t\t// Show static box\n\t\tDOM.clearNode(this.view);\n\t\tthis.view.className = 'context-view monaco-component';\n\t\tthis.view.style.top = '0px';\n\t\tthis.view.style.left = '0px';\n\t\tthis.view.style.zIndex = `${2575 + (delegate.layer ?? 0)}`;\n\t\tthis.view.style.position = this.useFixedPosition ? 'fixed' : 'absolute';\n\t\tDOM.show(this.view);\n\n\t\t// Render content\n\t\tthis.toDisposeOnClean = delegate.render(this.view) || Disposable.None;\n\n\t\t// Set active delegate\n\t\tthis.delegate = delegate;\n\n\t\t// Layout\n\t\tthis.doLayout();\n\n\t\t// Focus\n\t\tthis.delegate.focus?.();\n\t}\n\n\tgetViewElement(): HTMLElement {\n\t\treturn this.view;\n\t}\n\n\tlayout(): void {\n\t\tif (!this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.delegate!.canRelayout === false && !(platform.isIOS && BrowserFeatures.pointerEvents)) {\n\t\t\tthis.hide();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.delegate?.layout?.();\n\n\t\tthis.doLayout();\n\t}\n\n\tprivate doLayout(): void {\n\t\t// Check that we still have a delegate - this.delegate.layout may have hidden\n\t\tif (!this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get anchor\n\t\tconst anchor = this.delegate!.getAnchor();\n\n\t\t// Compute around\n\t\tlet around: IView;\n\n\t\t// Get the element's position and size (to anchor the view)\n\t\tif (DOM.isHTMLElement(anchor)) {\n\t\t\tconst elementPosition = DOM.getDomNodePagePosition(anchor);\n\n\t\t\t// In areas where zoom is applied to the element or its ancestors, we need to adjust the size of the element\n\t\t\t// e.g. The title bar has counter zoom behavior meaning it applies the inverse of zoom level.\n\t\t\t// Window Zoom Level: 1.5, Title Bar Zoom: 1/1.5, Size Multiplier: 1.5\n\t\t\tconst zoom = DOM.getDomNodeZoomLevel(anchor);\n\n\t\t\taround = {\n\t\t\t\ttop: elementPosition.top * zoom,\n\t\t\t\tleft: elementPosition.left * zoom,\n\t\t\t\twidth: elementPosition.width * zoom,\n\t\t\t\theight: elementPosition.height * zoom\n\t\t\t};\n\t\t} else if (isAnchor(anchor)) {\n\t\t\taround = {\n\t\t\t\ttop: anchor.y,\n\t\t\t\tleft: anchor.x,\n\t\t\t\twidth: anchor.width || 1,\n\t\t\t\theight: anchor.height || 2\n\t\t\t};\n\t\t} else {\n\t\t\taround = {\n\t\t\t\ttop: anchor.posy,\n\t\t\t\tleft: anchor.posx,\n\t\t\t\t// We are about to position the context view where the mouse\n\t\t\t\t// cursor is. To prevent the view being exactly under the mouse\n\t\t\t\t// when showing and thus potentially triggering an action within,\n\t\t\t\t// we treat the mouse location like a small sized block element.\n\t\t\t\twidth: 2,\n\t\t\t\theight: 2\n\t\t\t};\n\t\t}\n\n\t\tconst viewSizeWidth = DOM.getTotalWidth(this.view);\n\t\tconst viewSizeHeight = DOM.getTotalHeight(this.view);\n\n\t\tconst anchorPosition = this.delegate!.anchorPosition ?? AnchorPosition.BELOW;\n\t\tconst anchorAlignment = this.delegate!.anchorAlignment ?? AnchorAlignment.LEFT;\n\t\tconst anchorAxisAlignment = this.delegate!.anchorAxisAlignment ?? AnchorAxisAlignment.VERTICAL;\n\n\t\tlet top: number;\n\t\tlet left: number;\n\n\t\tconst activeWindow = DOM.getActiveWindow();\n\t\tif (anchorAxisAlignment === AnchorAxisAlignment.VERTICAL) {\n\t\t\tconst verticalAnchor: ILayoutAnchor = { offset: around.top - activeWindow.pageYOffset, size: around.height, position: anchorPosition === AnchorPosition.BELOW ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After };\n\t\t\tconst horizontalAnchor: ILayoutAnchor = { offset: around.left, size: around.width, position: anchorAlignment === AnchorAlignment.LEFT ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After, mode: LayoutAnchorMode.ALIGN };\n\n\t\t\ttop = layout(activeWindow.innerHeight, viewSizeHeight, verticalAnchor) + activeWindow.pageYOffset;\n\n\t\t\t// if view intersects vertically with anchor, we must avoid the anchor\n\t\t\tif (Range.intersects({ start: top, end: top + viewSizeHeight }, { start: verticalAnchor.offset, end: verticalAnchor.offset + verticalAnchor.size })) {\n\t\t\t\thorizontalAnchor.mode = LayoutAnchorMode.AVOID;\n\t\t\t}\n\n\t\t\tleft = layout(activeWindow.innerWidth, viewSizeWidth, horizontalAnchor);\n\t\t} else {\n\t\t\tconst horizontalAnchor: ILayoutAnchor = { offset: around.left, size: around.width, position: anchorAlignment === AnchorAlignment.LEFT ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After };\n\t\t\tconst verticalAnchor: ILayoutAnchor = { offset: around.top, size: around.height, position: anchorPosition === AnchorPosition.BELOW ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After, mode: LayoutAnchorMode.ALIGN };\n\n\t\t\tleft = layout(activeWindow.innerWidth, viewSizeWidth, horizontalAnchor);\n\n\t\t\t// if view intersects horizontally with anchor, we must avoid the anchor\n\t\t\tif (Range.intersects({ start: left, end: left + viewSizeWidth }, { start: horizontalAnchor.offset, end: horizontalAnchor.offset + horizontalAnchor.size })) {\n\t\t\t\tverticalAnchor.mode = LayoutAnchorMode.AVOID;\n\t\t\t}\n\n\t\t\ttop = layout(activeWindow.innerHeight, viewSizeHeight, verticalAnchor) + activeWindow.pageYOffset;\n\t\t}\n\n\t\tthis.view.classList.remove('top', 'bottom', 'left', 'right');\n\t\tthis.view.classList.add(anchorPosition === AnchorPosition.BELOW ? 'bottom' : 'top');\n\t\tthis.view.classList.add(anchorAlignment === AnchorAlignment.LEFT ? 'left' : 'right');\n\t\tthis.view.classList.toggle('fixed', this.useFixedPosition);\n\n\t\tconst containerPosition = DOM.getDomNodePagePosition(this.container!);\n\n\t\t// Account for container scroll when positioning the context view\n\t\tconst containerScrollTop = this.container!.scrollTop || 0;\n\t\tconst containerScrollLeft = this.container!.scrollLeft || 0;\n\n\t\tthis.view.style.top = `${top - (this.useFixedPosition ? DOM.getDomNodePagePosition(this.view).top : containerPosition.top) + containerScrollTop}px`;\n\t\tthis.view.style.left = `${left - (this.useFixedPosition ? DOM.getDomNodePagePosition(this.view).left : containerPosition.left) + containerScrollLeft}px`;\n\t\tthis.view.style.width = 'initial';\n\t}\n\n\thide(data?: unknown): void {\n\t\tconst delegate = this.delegate;\n\t\tthis.delegate = null;\n\n\t\tif (delegate?.onHide) {\n\t\t\tdelegate.onHide(data);\n\t\t}\n\n\t\tthis.toDisposeOnClean.dispose();\n\n\t\tDOM.hide(this.view);\n\t}\n\n\tprivate isVisible(): boolean {\n\t\treturn !!this.delegate;\n\t}\n\n\tprivate onDOMEvent(e: UIEvent, onCapture: boolean): void {\n\t\tif (this.delegate) {\n\t\t\tif (this.delegate.onDOMEvent) {\n\t\t\t\tthis.delegate.onDOMEvent(e, <HTMLElement>DOM.getWindow(e).document.activeElement);\n\t\t\t} else if (onCapture && !DOM.isAncestor(<HTMLElement>e.target, this.container)) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\toverride dispose(): void {\n\t\tthis.hide();\n\n\t\tsuper.dispose();\n\t}\n}\n\nconst SHADOW_ROOT_CSS = /* css */ `\n\t:host {\n\t\tall: initial; /* 1st rule so subsequent properties are reset. */\n\t}\n\n\t.codicon[class*='codicon-'] {\n\t\tfont: normal normal normal 16px/1 codicon;\n\t\tdisplay: inline-block;\n\t\ttext-decoration: none;\n\t\ttext-rendering: auto;\n\t\ttext-align: center;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t\tuser-select: none;\n\t\t-webkit-user-select: none;\n\t\t-ms-user-select: none;\n\t}\n\n\t:host {\n\t\tfont-family: -apple-system, BlinkMacSystemFont, \"Segoe WPC\", \"Segoe UI\", \"HelveticaNeue-Light\", system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif;\n\t}\n\n\t:host-context(.mac) { font-family: -apple-system, BlinkMacSystemFont, sans-serif; }\n\t:host-context(.mac:lang(zh-Hans)) { font-family: -apple-system, BlinkMacSystemFont, \"PingFang SC\", \"Hiragino Sans GB\", sans-serif; }\n\t:host-context(.mac:lang(zh-Hant)) { font-family: -apple-system, BlinkMacSystemFont, \"PingFang TC\", sans-serif; }\n\t:host-context(.mac:lang(ja)) { font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic Pro\", sans-serif; }\n\t:host-context(.mac:lang(ko)) { font-family: -apple-system, BlinkMacSystemFont, \"Apple SD Gothic Neo\", \"Nanum Gothic\", \"AppleGothic\", sans-serif; }\n\n\t:host-context(.windows) { font-family: \"Segoe WPC\", \"Segoe UI\", sans-serif; }\n\t:host-context(.windows:lang(zh-Hans)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Microsoft YaHei\", sans-serif; }\n\t:host-context(.windows:lang(zh-Hant)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Microsoft Jhenghei\", sans-serif; }\n\t:host-context(.windows:lang(ja)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Yu Gothic UI\", \"Meiryo UI\", sans-serif; }\n\t:host-context(.windows:lang(ko)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Malgun Gothic\", \"Dotom\", sans-serif; }\n\n\t:host-context(.linux) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif; }\n\t:host-context(.linux:lang(zh-Hans)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans SC\", \"Source Han Sans CN\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(zh-Hant)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans TC\", \"Source Han Sans TW\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(ja)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans J\", \"Source Han Sans JP\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(ko)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans K\", \"Source Han Sans JR\", \"Source Han Sans\", \"UnDotum\", \"FBaekmuk Gulim\", sans-serif; }\n`;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { BrowserFeatures } from '../../canIUse.js';\nimport * as DOM from '../../dom.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../common/lifecycle.js';\nimport * as platform from '../../../common/platform.js';\nimport { Range } from '../../../common/range.js';\nimport { OmitOptional } from '../../../common/types.js';\nimport './contextview.css';\n\nexport const enum ContextViewDOMPosition {\n\tABSOLUTE = 1,\n\tFIXED,\n\tFIXED_SHADOW\n}\n\nexport interface IAnchor {\n\tx: number;\n\ty: number;\n\twidth?: number;\n\theight?: number;\n}\n\nexport function isAnchor(obj: unknown): obj is IAnchor | OmitOptional<IAnchor> {\n\tconst anchor = obj as IAnchor | OmitOptional<IAnchor> | undefined;\n\n\treturn !!anchor && typeof anchor.x === 'number' && typeof anchor.y === 'number';\n}\n\nexport const enum AnchorAlignment {\n\tLEFT, RIGHT\n}\n\nexport const enum AnchorPosition {\n\tBELOW, ABOVE\n}\n\nexport const enum AnchorAxisAlignment {\n\tVERTICAL, HORIZONTAL\n}\n\nexport interface IDelegate {\n\t/**\n\t * The anchor where to position the context view.\n\t * Use a `HTMLElement` to position the view at the element,\n\t * a `StandardMouseEvent` to position it at the mouse position\n\t * or an `IAnchor` to position it at a specific location.\n\t */\n\tgetAnchor(): HTMLElement | StandardMouseEvent | IAnchor;\n\trender(container: HTMLElement): IDisposable | null;\n\tfocus?(): void;\n\tlayout?(): void;\n\tanchorAlignment?: AnchorAlignment; // default: left\n\tanchorPosition?: AnchorPosition; // default: below\n\tanchorAxisAlignment?: AnchorAxisAlignment; // default: vertical\n\tcanRelayout?: boolean; // default: true\n\tonDOMEvent?(e: Event, activeElement: HTMLElement): void;\n\tonHide?(data?: unknown): void;\n\n\t/**\n\t * context views with higher layers are rendered higher in z-index order\n\t */\n\tlayer?: number; // Default: 0\n}\n\nexport interface IContextViewProvider {\n\tshowContextView(delegate: IDelegate, container?: HTMLElement): void;\n\thideContextView(): void;\n\tlayout(): void;\n}\n\nexport interface IPosition {\n\ttop: number;\n\tleft: number;\n}\n\nexport interface ISize {\n\twidth: number;\n\theight: number;\n}\n\nexport interface IView extends IPosition, ISize { }\n\nexport const enum LayoutAnchorPosition {\n\tBefore,\n\tAfter\n}\n\nexport enum LayoutAnchorMode {\n\tAVOID,\n\tALIGN\n}\n\nexport interface ILayoutAnchor {\n\toffset: number;\n\tsize: number;\n\tmode?: LayoutAnchorMode; // default: AVOID\n\tposition: LayoutAnchorPosition;\n}\n\n/**\n * Lays out a one dimensional view next to an anchor in a viewport.\n *\n * @returns The view offset within the viewport.\n */\nexport function layout(viewportSize: number, viewSize: number, anchor: ILayoutAnchor): number {\n\tconst layoutAfterAnchorBoundary = anchor.mode === LayoutAnchorMode.ALIGN ? anchor.offset : anchor.offset + anchor.size;\n\tconst layoutBeforeAnchorBoundary = anchor.mode === LayoutAnchorMode.ALIGN ? anchor.offset + anchor.size : anchor.offset;\n\n\tif (anchor.position === LayoutAnchorPosition.Before) {\n\t\tif (viewSize <= viewportSize - layoutAfterAnchorBoundary) {\n\t\t\treturn layoutAfterAnchorBoundary; // happy case, lay it out after the anchor\n\t\t}\n\n\t\tif (viewSize <= layoutBeforeAnchorBoundary) {\n\t\t\treturn layoutBeforeAnchorBoundary - viewSize; // ok case, lay it out before the anchor\n\t\t}\n\n\t\treturn Math.max(viewportSize - viewSize, 0); // sad case, lay it over the anchor\n\t} else {\n\t\tif (viewSize <= layoutBeforeAnchorBoundary) {\n\t\t\treturn layoutBeforeAnchorBoundary - viewSize; // happy case, lay it out before the anchor\n\t\t}\n\n\t\tif (viewSize <= viewportSize - layoutAfterAnchorBoundary) {\n\t\t\treturn layoutAfterAnchorBoundary; // ok case, lay it out after the anchor\n\t\t}\n\n\t\treturn 0; // sad case, lay it over the anchor\n\t}\n}\n\nexport class ContextView extends Disposable {\n\n\tprivate static readonly BUBBLE_UP_EVENTS = ['click', 'keydown', 'focus', 'blur'];\n\tprivate static readonly BUBBLE_DOWN_EVENTS = ['click'];\n\n\tprivate container: HTMLElement | null = null;\n\tprivate view: HTMLElement;\n\tprivate useFixedPosition = false;\n\tprivate useShadowDOM = false;\n\tprivate delegate: IDelegate | null = null;\n\tprivate toDisposeOnClean: IDisposable = Disposable.None;\n\tprivate toDisposeOnSetContainer: IDisposable = Disposable.None;\n\tprivate shadowRoot: ShadowRoot | null = null;\n\tprivate shadowRootHostElement: HTMLElement | null = null;\n\n\tconstructor(container: HTMLElement, domPosition: ContextViewDOMPosition) {\n\t\tsuper();\n\n\t\tthis.view = DOM.$('.context-view');\n\t\tDOM.hide(this.view);\n\n\t\tthis.setContainer(container, domPosition);\n\t\tthis._register(toDisposable(() => this.setContainer(null, ContextViewDOMPosition.ABSOLUTE)));\n\t}\n\n\tsetContainer(container: HTMLElement | null, domPosition: ContextViewDOMPosition): void {\n\t\tthis.useFixedPosition = domPosition !== ContextViewDOMPosition.ABSOLUTE;\n\t\tconst usedShadowDOM = this.useShadowDOM;\n\t\tthis.useShadowDOM = domPosition === ContextViewDOMPosition.FIXED_SHADOW;\n\n\t\tif (container === this.container && usedShadowDOM === this.useShadowDOM) {\n\t\t\treturn; // container is the same and no shadow DOM usage has changed\n\t\t}\n\n\t\tif (this.container) {\n\t\t\tthis.toDisposeOnSetContainer.dispose();\n\n\t\t\tthis.view.remove();\n\t\t\tif (this.shadowRoot) {\n\t\t\t\tthis.shadowRoot = null;\n\t\t\t\tthis.shadowRootHostElement?.remove();\n\t\t\t\tthis.shadowRootHostElement = null;\n\t\t\t}\n\n\t\t\tthis.container = null;\n\t\t}\n\n\t\tif (container) {\n\t\t\tthis.container = container;\n\n\t\t\tif (this.useShadowDOM) {\n\t\t\t\tthis.shadowRootHostElement = DOM.$('.shadow-root-host');\n\t\t\t\tthis.container.appendChild(this.shadowRootHostElement);\n\t\t\t\tthis.shadowRoot = this.shadowRootHostElement.attachShadow({ mode: 'open' });\n\t\t\t\tconst style = document.createElement('style');\n\t\t\t\tstyle.textContent = SHADOW_ROOT_CSS;\n\t\t\t\tthis.shadowRoot.appendChild(style);\n\t\t\t\tthis.shadowRoot.appendChild(this.view);\n\t\t\t\tthis.shadowRoot.appendChild(DOM.$('slot'));\n\t\t\t} else {\n\t\t\t\tthis.container.appendChild(this.view);\n\t\t\t}\n\n\t\t\tconst toDisposeOnSetContainer = new DisposableStore();\n\n\t\t\tContextView.BUBBLE_UP_EVENTS.forEach(event => {\n\t\t\t\ttoDisposeOnSetContainer.add(DOM.addStandardDisposableListener(this.container!, event, e => {\n\t\t\t\t\tthis.onDOMEvent(e, false);\n\t\t\t\t}));\n\t\t\t});\n\n\t\t\tContextView.BUBBLE_DOWN_EVENTS.forEach(event => {\n\t\t\t\ttoDisposeOnSetContainer.add(DOM.addStandardDisposableListener(this.container!, event, e => {\n\t\t\t\t\tthis.onDOMEvent(e, true);\n\t\t\t\t}, true));\n\t\t\t});\n\n\t\t\tthis.toDisposeOnSetContainer = toDisposeOnSetContainer;\n\t\t}\n\t}\n\n\tshow(delegate: IDelegate): void {\n\t\tif (this.isVisible()) {\n\t\t\tthis.hide();\n\t\t}\n\n\t\t// Show static box\n\t\tDOM.clearNode(this.view);\n\t\tthis.view.className = 'context-view monaco-component';\n\t\tthis.view.style.top = '0px';\n\t\tthis.view.style.left = '0px';\n\t\tthis.view.style.zIndex = `${2575 + (delegate.layer ?? 0)}`;\n\t\tthis.view.style.position = this.useFixedPosition ? 'fixed' : 'absolute';\n\t\tDOM.show(this.view);\n\n\t\t// Render content\n\t\tthis.toDisposeOnClean = delegate.render(this.view) || Disposable.None;\n\n\t\t// Set active delegate\n\t\tthis.delegate = delegate;\n\n\t\t// Layout\n\t\tthis.doLayout();\n\n\t\t// Focus\n\t\tthis.delegate.focus?.();\n\t}\n\n\tgetViewElement(): HTMLElement {\n\t\treturn this.view;\n\t}\n\n\tlayout(): void {\n\t\tif (!this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.delegate!.canRelayout === false && !(platform.isIOS && BrowserFeatures.pointerEvents)) {\n\t\t\tthis.hide();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.delegate?.layout?.();\n\n\t\tthis.doLayout();\n\t}\n\n\tprivate doLayout(): void {\n\t\t// Check that we still have a delegate - this.delegate.layout may have hidden\n\t\tif (!this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get anchor\n\t\tconst anchor = this.delegate!.getAnchor();\n\n\t\t// Compute around\n\t\tlet around: IView;\n\n\t\t// Get the element's position and size (to anchor the view)\n\t\tif (DOM.isHTMLElement(anchor)) {\n\t\t\tconst elementPosition = DOM.getDomNodePagePosition(anchor);\n\n\t\t\t// In areas where zoom is applied to the element or its ancestors, we need to adjust the size of the element\n\t\t\t// e.g. The title bar has counter zoom behavior meaning it applies the inverse of zoom level.\n\t\t\t// Window Zoom Level: 1.5, Title Bar Zoom: 1/1.5, Size Multiplier: 1.5\n\t\t\tconst zoom = DOM.getDomNodeZoomLevel(anchor);\n\n\t\t\taround = {\n\t\t\t\ttop: elementPosition.top * zoom,\n\t\t\t\tleft: elementPosition.left * zoom,\n\t\t\t\twidth: elementPosition.width * zoom,\n\t\t\t\theight: elementPosition.height * zoom\n\t\t\t};\n\t\t} else if (isAnchor(anchor)) {\n\t\t\taround = {\n\t\t\t\ttop: anchor.y,\n\t\t\t\tleft: anchor.x,\n\t\t\t\twidth: anchor.width || 1,\n\t\t\t\theight: anchor.height || 2\n\t\t\t};\n\t\t} else {\n\t\t\taround = {\n\t\t\t\ttop: anchor.posy,\n\t\t\t\tleft: anchor.posx,\n\t\t\t\t// We are about to position the context view where the mouse\n\t\t\t\t// cursor is. To prevent the view being exactly under the mouse\n\t\t\t\t// when showing and thus potentially triggering an action within,\n\t\t\t\t// we treat the mouse location like a small sized block element.\n\t\t\t\twidth: 2,\n\t\t\t\theight: 2\n\t\t\t};\n\t\t}\n\n\t\tconst viewSizeWidth = DOM.getTotalWidth(this.view);\n\t\tconst viewSizeHeight = DOM.getTotalHeight(this.view);\n\n\t\tconst anchorPosition = this.delegate!.anchorPosition ?? AnchorPosition.BELOW;\n\t\tconst anchorAlignment = this.delegate!.anchorAlignment ?? AnchorAlignment.LEFT;\n\t\tconst anchorAxisAlignment = this.delegate!.anchorAxisAlignment ?? AnchorAxisAlignment.VERTICAL;\n\n\t\tlet top: number;\n\t\tlet left: number;\n\n\t\tconst activeWindow = DOM.getActiveWindow();\n\t\tif (anchorAxisAlignment === AnchorAxisAlignment.VERTICAL) {\n\t\t\tconst verticalAnchor: ILayoutAnchor = { offset: around.top - activeWindow.pageYOffset, size: around.height, position: anchorPosition === AnchorPosition.BELOW ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After };\n\t\t\tconst horizontalAnchor: ILayoutAnchor = { offset: around.left, size: around.width, position: anchorAlignment === AnchorAlignment.LEFT ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After, mode: LayoutAnchorMode.ALIGN };\n\n\t\t\ttop = layout(activeWindow.innerHeight, viewSizeHeight, verticalAnchor) + activeWindow.pageYOffset;\n\n\t\t\t// if view intersects vertically with anchor, we must avoid the anchor\n\t\t\tif (Range.intersects({ start: top, end: top + viewSizeHeight }, { start: verticalAnchor.offset, end: verticalAnchor.offset + verticalAnchor.size })) {\n\t\t\t\thorizontalAnchor.mode = LayoutAnchorMode.AVOID;\n\t\t\t}\n\n\t\t\tleft = layout(activeWindow.innerWidth, viewSizeWidth, horizontalAnchor);\n\t\t} else {\n\t\t\tconst horizontalAnchor: ILayoutAnchor = { offset: around.left, size: around.width, position: anchorAlignment === AnchorAlignment.LEFT ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After };\n\t\t\tconst verticalAnchor: ILayoutAnchor = { offset: around.top, size: around.height, position: anchorPosition === AnchorPosition.BELOW ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After, mode: LayoutAnchorMode.ALIGN };\n\n\t\t\tleft = layout(activeWindow.innerWidth, viewSizeWidth, horizontalAnchor);\n\n\t\t\t// if view intersects horizontally with anchor, we must avoid the anchor\n\t\t\tif (Range.intersects({ start: left, end: left + viewSizeWidth }, { start: horizontalAnchor.offset, end: horizontalAnchor.offset + horizontalAnchor.size })) {\n\t\t\t\tverticalAnchor.mode = LayoutAnchorMode.AVOID;\n\t\t\t}\n\n\t\t\ttop = layout(activeWindow.innerHeight, viewSizeHeight, verticalAnchor) + activeWindow.pageYOffset;\n\t\t}\n\n\t\tthis.view.classList.remove('top', 'bottom', 'left', 'right');\n\t\tthis.view.classList.add(anchorPosition === AnchorPosition.BELOW ? 'bottom' : 'top');\n\t\tthis.view.classList.add(anchorAlignment === AnchorAlignment.LEFT ? 'left' : 'right');\n\t\tthis.view.classList.toggle('fixed', this.useFixedPosition);\n\n\t\tconst containerPosition = DOM.getDomNodePagePosition(this.container!);\n\n\t\t// Account for container scroll when positioning the context view\n\t\tconst containerScrollTop = this.container!.scrollTop || 0;\n\t\tconst containerScrollLeft = this.container!.scrollLeft || 0;\n\n\t\tthis.view.style.top = `${top - (this.useFixedPosition ? DOM.getDomNodePagePosition(this.view).top : containerPosition.top) + containerScrollTop}px`;\n\t\tthis.view.style.left = `${left - (this.useFixedPosition ? DOM.getDomNodePagePosition(this.view).left : containerPosition.left) + containerScrollLeft}px`;\n\t\tthis.view.style.width = 'initial';\n\t}\n\n\thide(data?: unknown): void {\n\t\tconst delegate = this.delegate;\n\t\tthis.delegate = null;\n\n\t\tif (delegate?.onHide) {\n\t\t\tdelegate.onHide(data);\n\t\t}\n\n\t\tthis.toDisposeOnClean.dispose();\n\n\t\tDOM.hide(this.view);\n\t}\n\n\tprivate isVisible(): boolean {\n\t\treturn !!this.delegate;\n\t}\n\n\tprivate onDOMEvent(e: UIEvent, onCapture: boolean): void {\n\t\tif (this.delegate) {\n\t\t\tif (this.delegate.onDOMEvent) {\n\t\t\t\tthis.delegate.onDOMEvent(e, <HTMLElement>DOM.getWindow(e).document.activeElement);\n\t\t\t} else if (onCapture && !DOM.isAncestor(<HTMLElement>e.target, this.container)) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\toverride dispose(): void {\n\t\tthis.hide();\n\n\t\tsuper.dispose();\n\t}\n}\n\nconst SHADOW_ROOT_CSS = /* css */ `\n\t:host {\n\t\tall: initial; /* 1st rule so subsequent properties are reset. */\n\t}\n\n\t.codicon[class*='codicon-'] {\n\t\tfont: normal normal normal 16px/1 codicon;\n\t\tdisplay: inline-block;\n\t\ttext-decoration: none;\n\t\ttext-rendering: auto;\n\t\ttext-align: center;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t\tuser-select: none;\n\t\t-webkit-user-select: none;\n\t\t-ms-user-select: none;\n\t}\n\n\t:host {\n\t\tfont-family: -apple-system, BlinkMacSystemFont, \"Segoe WPC\", \"Segoe UI\", \"HelveticaNeue-Light\", system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif;\n\t}\n\n\t:host-context(.mac) { font-family: -apple-system, BlinkMacSystemFont, sans-serif; }\n\t:host-context(.mac:lang(zh-Hans)) { font-family: -apple-system, BlinkMacSystemFont, \"PingFang SC\", \"Hiragino Sans GB\", sans-serif; }\n\t:host-context(.mac:lang(zh-Hant)) { font-family: -apple-system, BlinkMacSystemFont, \"PingFang TC\", sans-serif; }\n\t:host-context(.mac:lang(ja)) { font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic Pro\", sans-serif; }\n\t:host-context(.mac:lang(ko)) { font-family: -apple-system, BlinkMacSystemFont, \"Apple SD Gothic Neo\", \"Nanum Gothic\", \"AppleGothic\", sans-serif; }\n\n\t:host-context(.windows) { font-family: \"Segoe WPC\", \"Segoe UI\", sans-serif; }\n\t:host-context(.windows:lang(zh-Hans)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Microsoft YaHei\", sans-serif; }\n\t:host-context(.windows:lang(zh-Hant)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Microsoft Jhenghei\", sans-serif; }\n\t:host-context(.windows:lang(ja)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Yu Gothic UI\", \"Meiryo UI\", sans-serif; }\n\t:host-context(.windows:lang(ko)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Malgun Gothic\", \"Dotom\", sans-serif; }\n\n\t:host-context(.linux) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif; }\n\t:host-context(.linux:lang(zh-Hans)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans SC\", \"Source Han Sans CN\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(zh-Hant)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans TC\", \"Source Han Sans TW\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(ja)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans J\", \"Source Han Sans JP\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(ko)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans K\", \"Source Han Sans JR\", \"Source Han Sans\", \"UnDotum\", \"FBaekmuk Gulim\", sans-serif; }\n`;\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/browser/ui/contextview/contextview.ts","vs/base/browser/ui/contextview/contextview.ts"],"names":[],"mappings":"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","file":"contextview.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 { BrowserFeatures } from '../../canIUse.js';\nimport * as DOM from '../../dom.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../common/lifecycle.js';\nimport * as platform from '../../../common/platform.js';\nimport { Range } from '../../../common/range.js';\nimport { OmitOptional } from '../../../common/types.js';\nimport './contextview.css';\n\nexport const enum ContextViewDOMPosition {\n\tABSOLUTE = 1,\n\tFIXED,\n\tFIXED_SHADOW\n}\n\nexport interface IAnchor {\n\tx: number;\n\ty: number;\n\twidth?: number;\n\theight?: number;\n}\n\nexport function isAnchor(obj: unknown): obj is IAnchor | OmitOptional<IAnchor> {\n\tconst anchor = obj as IAnchor | OmitOptional<IAnchor> | undefined;\n\n\treturn !!anchor && typeof anchor.x === 'number' && typeof anchor.y === 'number';\n}\n\nexport const enum AnchorAlignment {\n\tLEFT, RIGHT\n}\n\nexport const enum AnchorPosition {\n\tBELOW, ABOVE\n}\n\nexport const enum AnchorAxisAlignment {\n\tVERTICAL, HORIZONTAL\n}\n\nexport interface IDelegate {\n\t/**\n\t * The anchor where to position the context view.\n\t * Use a `HTMLElement` to position the view at the element,\n\t * a `StandardMouseEvent` to position it at the mouse position\n\t * or an `IAnchor` to position it at a specific location.\n\t */\n\tgetAnchor(): HTMLElement | StandardMouseEvent | IAnchor;\n\trender(container: HTMLElement): IDisposable | null;\n\tfocus?(): void;\n\tlayout?(): void;\n\tanchorAlignment?: AnchorAlignment; // default: left\n\tanchorPosition?: AnchorPosition; // default: below\n\tanchorAxisAlignment?: AnchorAxisAlignment; // default: vertical\n\tcanRelayout?: boolean; // default: true\n\tonDOMEvent?(e: Event, activeElement: HTMLElement): void;\n\tonHide?(data?: unknown): void;\n\n\t/**\n\t * context views with higher layers are rendered higher in z-index order\n\t */\n\tlayer?: number; // Default: 0\n}\n\nexport interface IContextViewProvider {\n\tshowContextView(delegate: IDelegate, container?: HTMLElement): void;\n\thideContextView(): void;\n\tlayout(): void;\n}\n\nexport interface IPosition {\n\ttop: number;\n\tleft: number;\n}\n\nexport interface ISize {\n\twidth: number;\n\theight: number;\n}\n\nexport interface IView extends IPosition, ISize { }\n\nexport const enum LayoutAnchorPosition {\n\tBefore,\n\tAfter\n}\n\nexport enum LayoutAnchorMode {\n\tAVOID,\n\tALIGN\n}\n\nexport interface ILayoutAnchor {\n\toffset: number;\n\tsize: number;\n\tmode?: LayoutAnchorMode; // default: AVOID\n\tposition: LayoutAnchorPosition;\n}\n\n/**\n * Lays out a one dimensional view next to an anchor in a viewport.\n *\n * @returns The view offset within the viewport.\n */\nexport function layout(viewportSize: number, viewSize: number, anchor: ILayoutAnchor): number {\n\tconst layoutAfterAnchorBoundary = anchor.mode === LayoutAnchorMode.ALIGN ? anchor.offset : anchor.offset + anchor.size;\n\tconst layoutBeforeAnchorBoundary = anchor.mode === LayoutAnchorMode.ALIGN ? anchor.offset + anchor.size : anchor.offset;\n\n\tif (anchor.position === LayoutAnchorPosition.Before) {\n\t\tif (viewSize <= viewportSize - layoutAfterAnchorBoundary) {\n\t\t\treturn layoutAfterAnchorBoundary; // happy case, lay it out after the anchor\n\t\t}\n\n\t\tif (viewSize <= layoutBeforeAnchorBoundary) {\n\t\t\treturn layoutBeforeAnchorBoundary - viewSize; // ok case, lay it out before the anchor\n\t\t}\n\n\t\treturn Math.max(viewportSize - viewSize, 0); // sad case, lay it over the anchor\n\t} else {\n\t\tif (viewSize <= layoutBeforeAnchorBoundary) {\n\t\t\treturn layoutBeforeAnchorBoundary - viewSize; // happy case, lay it out before the anchor\n\t\t}\n\n\n\t\tif (viewSize <= viewportSize - layoutAfterAnchorBoundary && layoutBeforeAnchorBoundary < viewSize / 2) {\n\t\t\treturn layoutAfterAnchorBoundary; // ok case, lay it out after the anchor\n\t\t}\n\n\n\t\treturn 0; // sad case, lay it over the anchor\n\t}\n}\n\nexport class ContextView extends Disposable {\n\n\tprivate static readonly BUBBLE_UP_EVENTS = ['click', 'keydown', 'focus', 'blur'];\n\tprivate static readonly BUBBLE_DOWN_EVENTS = ['click'];\n\n\tprivate container: HTMLElement | null = null;\n\tprivate view: HTMLElement;\n\tprivate useFixedPosition = false;\n\tprivate useShadowDOM = false;\n\tprivate delegate: IDelegate | null = null;\n\tprivate toDisposeOnClean: IDisposable = Disposable.None;\n\tprivate toDisposeOnSetContainer: IDisposable = Disposable.None;\n\tprivate shadowRoot: ShadowRoot | null = null;\n\tprivate shadowRootHostElement: HTMLElement | null = null;\n\n\tconstructor(container: HTMLElement, domPosition: ContextViewDOMPosition) {\n\t\tsuper();\n\n\t\tthis.view = DOM.$('.context-view');\n\t\tDOM.hide(this.view);\n\n\t\tthis.setContainer(container, domPosition);\n\t\tthis._register(toDisposable(() => this.setContainer(null, ContextViewDOMPosition.ABSOLUTE)));\n\t}\n\n\tsetContainer(container: HTMLElement | null, domPosition: ContextViewDOMPosition): void {\n\t\tthis.useFixedPosition = domPosition !== ContextViewDOMPosition.ABSOLUTE;\n\t\tconst usedShadowDOM = this.useShadowDOM;\n\t\tthis.useShadowDOM = domPosition === ContextViewDOMPosition.FIXED_SHADOW;\n\n\t\tif (container === this.container && usedShadowDOM === this.useShadowDOM) {\n\t\t\treturn; // container is the same and no shadow DOM usage has changed\n\t\t}\n\n\t\tif (this.container) {\n\t\t\tthis.toDisposeOnSetContainer.dispose();\n\n\t\t\tthis.view.remove();\n\t\t\tif (this.shadowRoot) {\n\t\t\t\tthis.shadowRoot = null;\n\t\t\t\tthis.shadowRootHostElement?.remove();\n\t\t\t\tthis.shadowRootHostElement = null;\n\t\t\t}\n\n\t\t\tthis.container = null;\n\t\t}\n\n\t\tif (container) {\n\t\t\tthis.container = container;\n\n\t\t\tif (this.useShadowDOM) {\n\t\t\t\tthis.shadowRootHostElement = DOM.$('.shadow-root-host');\n\t\t\t\tthis.container.appendChild(this.shadowRootHostElement);\n\t\t\t\tthis.shadowRoot = this.shadowRootHostElement.attachShadow({ mode: 'open' });\n\t\t\t\tconst style = document.createElement('style');\n\t\t\t\tstyle.textContent = SHADOW_ROOT_CSS;\n\t\t\t\tthis.shadowRoot.appendChild(style);\n\t\t\t\tthis.shadowRoot.appendChild(this.view);\n\t\t\t\tthis.shadowRoot.appendChild(DOM.$('slot'));\n\t\t\t} else {\n\t\t\t\tthis.container.appendChild(this.view);\n\t\t\t}\n\n\t\t\tconst toDisposeOnSetContainer = new DisposableStore();\n\n\t\t\tContextView.BUBBLE_UP_EVENTS.forEach(event => {\n\t\t\t\ttoDisposeOnSetContainer.add(DOM.addStandardDisposableListener(this.container!, event, e => {\n\t\t\t\t\tthis.onDOMEvent(e, false);\n\t\t\t\t}));\n\t\t\t});\n\n\t\t\tContextView.BUBBLE_DOWN_EVENTS.forEach(event => {\n\t\t\t\ttoDisposeOnSetContainer.add(DOM.addStandardDisposableListener(this.container!, event, e => {\n\t\t\t\t\tthis.onDOMEvent(e, true);\n\t\t\t\t}, true));\n\t\t\t});\n\n\t\t\tthis.toDisposeOnSetContainer = toDisposeOnSetContainer;\n\t\t}\n\t}\n\n\tshow(delegate: IDelegate): void {\n\t\tif (this.isVisible()) {\n\t\t\tthis.hide();\n\t\t}\n\n\t\t// Show static box\n\t\tDOM.clearNode(this.view);\n\t\tthis.view.className = 'context-view monaco-component';\n\t\tthis.view.style.top = '0px';\n\t\tthis.view.style.left = '0px';\n\t\tthis.view.style.zIndex = `${2575 + (delegate.layer ?? 0)}`;\n\t\tthis.view.style.position = this.useFixedPosition ? 'fixed' : 'absolute';\n\t\tDOM.show(this.view);\n\n\t\t// Render content\n\t\tthis.toDisposeOnClean = delegate.render(this.view) || Disposable.None;\n\n\t\t// Set active delegate\n\t\tthis.delegate = delegate;\n\n\t\t// Layout\n\t\tthis.doLayout();\n\n\t\t// Focus\n\t\tthis.delegate.focus?.();\n\t}\n\n\tgetViewElement(): HTMLElement {\n\t\treturn this.view;\n\t}\n\n\tlayout(): void {\n\t\tif (!this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.delegate!.canRelayout === false && !(platform.isIOS && BrowserFeatures.pointerEvents)) {\n\t\t\tthis.hide();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.delegate?.layout?.();\n\n\t\tthis.doLayout();\n\t}\n\n\tprivate doLayout(): void {\n\t\t// Check that we still have a delegate - this.delegate.layout may have hidden\n\t\tif (!this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get anchor\n\t\tconst anchor = this.delegate!.getAnchor();\n\n\t\t// Compute around\n\t\tlet around: IView;\n\n\t\t// Get the element's position and size (to anchor the view)\n\t\tif (DOM.isHTMLElement(anchor)) {\n\t\t\tconst elementPosition = DOM.getDomNodePagePosition(anchor);\n\n\t\t\t// In areas where zoom is applied to the element or its ancestors, we need to adjust the size of the element\n\t\t\t// e.g. The title bar has counter zoom behavior meaning it applies the inverse of zoom level.\n\t\t\t// Window Zoom Level: 1.5, Title Bar Zoom: 1/1.5, Size Multiplier: 1.5\n\t\t\tconst zoom = DOM.getDomNodeZoomLevel(anchor);\n\n\t\t\taround = {\n\t\t\t\ttop: elementPosition.top * zoom,\n\t\t\t\tleft: elementPosition.left * zoom,\n\t\t\t\twidth: elementPosition.width * zoom,\n\t\t\t\theight: elementPosition.height * zoom\n\t\t\t};\n\t\t} else if (isAnchor(anchor)) {\n\t\t\taround = {\n\t\t\t\ttop: anchor.y,\n\t\t\t\tleft: anchor.x,\n\t\t\t\twidth: anchor.width || 1,\n\t\t\t\theight: anchor.height || 2\n\t\t\t};\n\t\t} else {\n\t\t\taround = {\n\t\t\t\ttop: anchor.posy,\n\t\t\t\tleft: anchor.posx,\n\t\t\t\t// We are about to position the context view where the mouse\n\t\t\t\t// cursor is. To prevent the view being exactly under the mouse\n\t\t\t\t// when showing and thus potentially triggering an action within,\n\t\t\t\t// we treat the mouse location like a small sized block element.\n\t\t\t\twidth: 2,\n\t\t\t\theight: 2\n\t\t\t};\n\t\t}\n\n\t\tconst viewSizeWidth = DOM.getTotalWidth(this.view);\n\t\tconst viewSizeHeight = DOM.getTotalHeight(this.view);\n\n\t\tconst anchorPosition = this.delegate!.anchorPosition ?? AnchorPosition.BELOW;\n\t\tconst anchorAlignment = this.delegate!.anchorAlignment ?? AnchorAlignment.LEFT;\n\t\tconst anchorAxisAlignment = this.delegate!.anchorAxisAlignment ?? AnchorAxisAlignment.VERTICAL;\n\n\t\tlet top: number;\n\t\tlet left: number;\n\n\t\tconst activeWindow = DOM.getActiveWindow();\n\t\tif (anchorAxisAlignment === AnchorAxisAlignment.VERTICAL) {\n\t\t\tconst verticalAnchor: ILayoutAnchor = { offset: around.top - activeWindow.pageYOffset, size: around.height, position: anchorPosition === AnchorPosition.BELOW ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After };\n\t\t\tconst horizontalAnchor: ILayoutAnchor = { offset: around.left, size: around.width, position: anchorAlignment === AnchorAlignment.LEFT ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After, mode: LayoutAnchorMode.ALIGN };\n\n\t\t\ttop = layout(activeWindow.innerHeight, viewSizeHeight, verticalAnchor) + activeWindow.pageYOffset;\n\n\t\t\t// if view intersects vertically with anchor, we must avoid the anchor\n\t\t\tif (Range.intersects({ start: top, end: top + viewSizeHeight }, { start: verticalAnchor.offset, end: verticalAnchor.offset + verticalAnchor.size })) {\n\t\t\t\thorizontalAnchor.mode = LayoutAnchorMode.AVOID;\n\t\t\t}\n\n\t\t\tleft = layout(activeWindow.innerWidth, viewSizeWidth, horizontalAnchor);\n\t\t} else {\n\t\t\tconst horizontalAnchor: ILayoutAnchor = { offset: around.left, size: around.width, position: anchorAlignment === AnchorAlignment.LEFT ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After };\n\t\t\tconst verticalAnchor: ILayoutAnchor = { offset: around.top, size: around.height, position: anchorPosition === AnchorPosition.BELOW ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After, mode: LayoutAnchorMode.ALIGN };\n\n\t\t\tleft = layout(activeWindow.innerWidth, viewSizeWidth, horizontalAnchor);\n\n\t\t\t// if view intersects horizontally with anchor, we must avoid the anchor\n\t\t\tif (Range.intersects({ start: left, end: left + viewSizeWidth }, { start: horizontalAnchor.offset, end: horizontalAnchor.offset + horizontalAnchor.size })) {\n\t\t\t\tverticalAnchor.mode = LayoutAnchorMode.AVOID;\n\t\t\t}\n\n\t\t\ttop = layout(activeWindow.innerHeight, viewSizeHeight, verticalAnchor) + activeWindow.pageYOffset;\n\t\t}\n\n\t\tthis.view.classList.remove('top', 'bottom', 'left', 'right');\n\t\tthis.view.classList.add(anchorPosition === AnchorPosition.BELOW ? 'bottom' : 'top');\n\t\tthis.view.classList.add(anchorAlignment === AnchorAlignment.LEFT ? 'left' : 'right');\n\t\tthis.view.classList.toggle('fixed', this.useFixedPosition);\n\n\t\tconst containerPosition = DOM.getDomNodePagePosition(this.container!);\n\n\t\t// Account for container scroll when positioning the context view\n\t\tconst containerScrollTop = this.container!.scrollTop || 0;\n\t\tconst containerScrollLeft = this.container!.scrollLeft || 0;\n\n\t\tthis.view.style.top = `${top - (this.useFixedPosition ? DOM.getDomNodePagePosition(this.view).top : containerPosition.top) + containerScrollTop}px`;\n\t\tthis.view.style.left = `${left - (this.useFixedPosition ? DOM.getDomNodePagePosition(this.view).left : containerPosition.left) + containerScrollLeft}px`;\n\t\tthis.view.style.width = 'initial';\n\t}\n\n\thide(data?: unknown): void {\n\t\tconst delegate = this.delegate;\n\t\tthis.delegate = null;\n\n\t\tif (delegate?.onHide) {\n\t\t\tdelegate.onHide(data);\n\t\t}\n\n\t\tthis.toDisposeOnClean.dispose();\n\n\t\tDOM.hide(this.view);\n\t}\n\n\tprivate isVisible(): boolean {\n\t\treturn !!this.delegate;\n\t}\n\n\tprivate onDOMEvent(e: UIEvent, onCapture: boolean): void {\n\t\tif (this.delegate) {\n\t\t\tif (this.delegate.onDOMEvent) {\n\t\t\t\tthis.delegate.onDOMEvent(e, <HTMLElement>DOM.getWindow(e).document.activeElement);\n\t\t\t} else if (onCapture && !DOM.isAncestor(<HTMLElement>e.target, this.container)) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\toverride dispose(): void {\n\t\tthis.hide();\n\n\t\tsuper.dispose();\n\t}\n}\n\nconst SHADOW_ROOT_CSS = /* css */ `\n\t:host {\n\t\tall: initial; /* 1st rule so subsequent properties are reset. */\n\t}\n\n\t.codicon[class*='codicon-'] {\n\t\tfont: normal normal normal 16px/1 codicon;\n\t\tdisplay: inline-block;\n\t\ttext-decoration: none;\n\t\ttext-rendering: auto;\n\t\ttext-align: center;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t\tuser-select: none;\n\t\t-webkit-user-select: none;\n\t\t-ms-user-select: none;\n\t}\n\n\t:host {\n\t\tfont-family: -apple-system, BlinkMacSystemFont, \"Segoe WPC\", \"Segoe UI\", \"HelveticaNeue-Light\", system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif;\n\t}\n\n\t:host-context(.mac) { font-family: -apple-system, BlinkMacSystemFont, sans-serif; }\n\t:host-context(.mac:lang(zh-Hans)) { font-family: -apple-system, BlinkMacSystemFont, \"PingFang SC\", \"Hiragino Sans GB\", sans-serif; }\n\t:host-context(.mac:lang(zh-Hant)) { font-family: -apple-system, BlinkMacSystemFont, \"PingFang TC\", sans-serif; }\n\t:host-context(.mac:lang(ja)) { font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic Pro\", sans-serif; }\n\t:host-context(.mac:lang(ko)) { font-family: -apple-system, BlinkMacSystemFont, \"Apple SD Gothic Neo\", \"Nanum Gothic\", \"AppleGothic\", sans-serif; }\n\n\t:host-context(.windows) { font-family: \"Segoe WPC\", \"Segoe UI\", sans-serif; }\n\t:host-context(.windows:lang(zh-Hans)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Microsoft YaHei\", sans-serif; }\n\t:host-context(.windows:lang(zh-Hant)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Microsoft Jhenghei\", sans-serif; }\n\t:host-context(.windows:lang(ja)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Yu Gothic UI\", \"Meiryo UI\", sans-serif; }\n\t:host-context(.windows:lang(ko)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Malgun Gothic\", \"Dotom\", sans-serif; }\n\n\t:host-context(.linux) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif; }\n\t:host-context(.linux:lang(zh-Hans)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans SC\", \"Source Han Sans CN\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(zh-Hant)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans TC\", \"Source Han Sans TW\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(ja)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans J\", \"Source Han Sans JP\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(ko)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans K\", \"Source Han Sans JR\", \"Source Han Sans\", \"UnDotum\", \"FBaekmuk Gulim\", sans-serif; }\n`;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { BrowserFeatures } from '../../canIUse.js';\nimport * as DOM from '../../dom.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../common/lifecycle.js';\nimport * as platform from '../../../common/platform.js';\nimport { Range } from '../../../common/range.js';\nimport { OmitOptional } from '../../../common/types.js';\nimport './contextview.css';\n\nexport const enum ContextViewDOMPosition {\n\tABSOLUTE = 1,\n\tFIXED,\n\tFIXED_SHADOW\n}\n\nexport interface IAnchor {\n\tx: number;\n\ty: number;\n\twidth?: number;\n\theight?: number;\n}\n\nexport function isAnchor(obj: unknown): obj is IAnchor | OmitOptional<IAnchor> {\n\tconst anchor = obj as IAnchor | OmitOptional<IAnchor> | undefined;\n\n\treturn !!anchor && typeof anchor.x === 'number' && typeof anchor.y === 'number';\n}\n\nexport const enum AnchorAlignment {\n\tLEFT, RIGHT\n}\n\nexport const enum AnchorPosition {\n\tBELOW, ABOVE\n}\n\nexport const enum AnchorAxisAlignment {\n\tVERTICAL, HORIZONTAL\n}\n\nexport interface IDelegate {\n\t/**\n\t * The anchor where to position the context view.\n\t * Use a `HTMLElement` to position the view at the element,\n\t * a `StandardMouseEvent` to position it at the mouse position\n\t * or an `IAnchor` to position it at a specific location.\n\t */\n\tgetAnchor(): HTMLElement | StandardMouseEvent | IAnchor;\n\trender(container: HTMLElement): IDisposable | null;\n\tfocus?(): void;\n\tlayout?(): void;\n\tanchorAlignment?: AnchorAlignment; // default: left\n\tanchorPosition?: AnchorPosition; // default: below\n\tanchorAxisAlignment?: AnchorAxisAlignment; // default: vertical\n\tcanRelayout?: boolean; // default: true\n\tonDOMEvent?(e: Event, activeElement: HTMLElement): void;\n\tonHide?(data?: unknown): void;\n\n\t/**\n\t * context views with higher layers are rendered higher in z-index order\n\t */\n\tlayer?: number; // Default: 0\n}\n\nexport interface IContextViewProvider {\n\tshowContextView(delegate: IDelegate, container?: HTMLElement): void;\n\thideContextView(): void;\n\tlayout(): void;\n}\n\nexport interface IPosition {\n\ttop: number;\n\tleft: number;\n}\n\nexport interface ISize {\n\twidth: number;\n\theight: number;\n}\n\nexport interface IView extends IPosition, ISize { }\n\nexport const enum LayoutAnchorPosition {\n\tBefore,\n\tAfter\n}\n\nexport enum LayoutAnchorMode {\n\tAVOID,\n\tALIGN\n}\n\nexport interface ILayoutAnchor {\n\toffset: number;\n\tsize: number;\n\tmode?: LayoutAnchorMode; // default: AVOID\n\tposition: LayoutAnchorPosition;\n}\n\n/**\n * Lays out a one dimensional view next to an anchor in a viewport.\n *\n * @returns The view offset within the viewport.\n */\nexport function layout(viewportSize: number, viewSize: number, anchor: ILayoutAnchor): number {\n\tconst layoutAfterAnchorBoundary = anchor.mode === LayoutAnchorMode.ALIGN ? anchor.offset : anchor.offset + anchor.size;\n\tconst layoutBeforeAnchorBoundary = anchor.mode === LayoutAnchorMode.ALIGN ? anchor.offset + anchor.size : anchor.offset;\n\n\tif (anchor.position === LayoutAnchorPosition.Before) {\n\t\tif (viewSize <= viewportSize - layoutAfterAnchorBoundary) {\n\t\t\treturn layoutAfterAnchorBoundary; // happy case, lay it out after the anchor\n\t\t}\n\n\t\tif (viewSize <= layoutBeforeAnchorBoundary) {\n\t\t\treturn layoutBeforeAnchorBoundary - viewSize; // ok case, lay it out before the anchor\n\t\t}\n\n\t\treturn Math.max(viewportSize - viewSize, 0); // sad case, lay it over the anchor\n\t} else {\n\t\tif (viewSize <= layoutBeforeAnchorBoundary) {\n\t\t\treturn layoutBeforeAnchorBoundary - viewSize; // happy case, lay it out before the anchor\n\t\t}\n\n\n\t\tif (viewSize <= viewportSize - layoutAfterAnchorBoundary && layoutBeforeAnchorBoundary < viewSize / 2) {\n\t\t\treturn layoutAfterAnchorBoundary; // ok case, lay it out after the anchor\n\t\t}\n\n\n\t\treturn 0; // sad case, lay it over the anchor\n\t}\n}\n\nexport class ContextView extends Disposable {\n\n\tprivate static readonly BUBBLE_UP_EVENTS = ['click', 'keydown', 'focus', 'blur'];\n\tprivate static readonly BUBBLE_DOWN_EVENTS = ['click'];\n\n\tprivate container: HTMLElement | null = null;\n\tprivate view: HTMLElement;\n\tprivate useFixedPosition = false;\n\tprivate useShadowDOM = false;\n\tprivate delegate: IDelegate | null = null;\n\tprivate toDisposeOnClean: IDisposable = Disposable.None;\n\tprivate toDisposeOnSetContainer: IDisposable = Disposable.None;\n\tprivate shadowRoot: ShadowRoot | null = null;\n\tprivate shadowRootHostElement: HTMLElement | null = null;\n\n\tconstructor(container: HTMLElement, domPosition: ContextViewDOMPosition) {\n\t\tsuper();\n\n\t\tthis.view = DOM.$('.context-view');\n\t\tDOM.hide(this.view);\n\n\t\tthis.setContainer(container, domPosition);\n\t\tthis._register(toDisposable(() => this.setContainer(null, ContextViewDOMPosition.ABSOLUTE)));\n\t}\n\n\tsetContainer(container: HTMLElement | null, domPosition: ContextViewDOMPosition): void {\n\t\tthis.useFixedPosition = domPosition !== ContextViewDOMPosition.ABSOLUTE;\n\t\tconst usedShadowDOM = this.useShadowDOM;\n\t\tthis.useShadowDOM = domPosition === ContextViewDOMPosition.FIXED_SHADOW;\n\n\t\tif (container === this.container && usedShadowDOM === this.useShadowDOM) {\n\t\t\treturn; // container is the same and no shadow DOM usage has changed\n\t\t}\n\n\t\tif (this.container) {\n\t\t\tthis.toDisposeOnSetContainer.dispose();\n\n\t\t\tthis.view.remove();\n\t\t\tif (this.shadowRoot) {\n\t\t\t\tthis.shadowRoot = null;\n\t\t\t\tthis.shadowRootHostElement?.remove();\n\t\t\t\tthis.shadowRootHostElement = null;\n\t\t\t}\n\n\t\t\tthis.container = null;\n\t\t}\n\n\t\tif (container) {\n\t\t\tthis.container = container;\n\n\t\t\tif (this.useShadowDOM) {\n\t\t\t\tthis.shadowRootHostElement = DOM.$('.shadow-root-host');\n\t\t\t\tthis.container.appendChild(this.shadowRootHostElement);\n\t\t\t\tthis.shadowRoot = this.shadowRootHostElement.attachShadow({ mode: 'open' });\n\t\t\t\tconst style = document.createElement('style');\n\t\t\t\tstyle.textContent = SHADOW_ROOT_CSS;\n\t\t\t\tthis.shadowRoot.appendChild(style);\n\t\t\t\tthis.shadowRoot.appendChild(this.view);\n\t\t\t\tthis.shadowRoot.appendChild(DOM.$('slot'));\n\t\t\t} else {\n\t\t\t\tthis.container.appendChild(this.view);\n\t\t\t}\n\n\t\t\tconst toDisposeOnSetContainer = new DisposableStore();\n\n\t\t\tContextView.BUBBLE_UP_EVENTS.forEach(event => {\n\t\t\t\ttoDisposeOnSetContainer.add(DOM.addStandardDisposableListener(this.container!, event, e => {\n\t\t\t\t\tthis.onDOMEvent(e, false);\n\t\t\t\t}));\n\t\t\t});\n\n\t\t\tContextView.BUBBLE_DOWN_EVENTS.forEach(event => {\n\t\t\t\ttoDisposeOnSetContainer.add(DOM.addStandardDisposableListener(this.container!, event, e => {\n\t\t\t\t\tthis.onDOMEvent(e, true);\n\t\t\t\t}, true));\n\t\t\t});\n\n\t\t\tthis.toDisposeOnSetContainer = toDisposeOnSetContainer;\n\t\t}\n\t}\n\n\tshow(delegate: IDelegate): void {\n\t\tif (this.isVisible()) {\n\t\t\tthis.hide();\n\t\t}\n\n\t\t// Show static box\n\t\tDOM.clearNode(this.view);\n\t\tthis.view.className = 'context-view monaco-component';\n\t\tthis.view.style.top = '0px';\n\t\tthis.view.style.left = '0px';\n\t\tthis.view.style.zIndex = `${2575 + (delegate.layer ?? 0)}`;\n\t\tthis.view.style.position = this.useFixedPosition ? 'fixed' : 'absolute';\n\t\tDOM.show(this.view);\n\n\t\t// Render content\n\t\tthis.toDisposeOnClean = delegate.render(this.view) || Disposable.None;\n\n\t\t// Set active delegate\n\t\tthis.delegate = delegate;\n\n\t\t// Layout\n\t\tthis.doLayout();\n\n\t\t// Focus\n\t\tthis.delegate.focus?.();\n\t}\n\n\tgetViewElement(): HTMLElement {\n\t\treturn this.view;\n\t}\n\n\tlayout(): void {\n\t\tif (!this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.delegate!.canRelayout === false && !(platform.isIOS && BrowserFeatures.pointerEvents)) {\n\t\t\tthis.hide();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.delegate?.layout?.();\n\n\t\tthis.doLayout();\n\t}\n\n\tprivate doLayout(): void {\n\t\t// Check that we still have a delegate - this.delegate.layout may have hidden\n\t\tif (!this.isVisible()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get anchor\n\t\tconst anchor = this.delegate!.getAnchor();\n\n\t\t// Compute around\n\t\tlet around: IView;\n\n\t\t// Get the element's position and size (to anchor the view)\n\t\tif (DOM.isHTMLElement(anchor)) {\n\t\t\tconst elementPosition = DOM.getDomNodePagePosition(anchor);\n\n\t\t\t// In areas where zoom is applied to the element or its ancestors, we need to adjust the size of the element\n\t\t\t// e.g. The title bar has counter zoom behavior meaning it applies the inverse of zoom level.\n\t\t\t// Window Zoom Level: 1.5, Title Bar Zoom: 1/1.5, Size Multiplier: 1.5\n\t\t\tconst zoom = DOM.getDomNodeZoomLevel(anchor);\n\n\t\t\taround = {\n\t\t\t\ttop: elementPosition.top * zoom,\n\t\t\t\tleft: elementPosition.left * zoom,\n\t\t\t\twidth: elementPosition.width * zoom,\n\t\t\t\theight: elementPosition.height * zoom\n\t\t\t};\n\t\t} else if (isAnchor(anchor)) {\n\t\t\taround = {\n\t\t\t\ttop: anchor.y,\n\t\t\t\tleft: anchor.x,\n\t\t\t\twidth: anchor.width || 1,\n\t\t\t\theight: anchor.height || 2\n\t\t\t};\n\t\t} else {\n\t\t\taround = {\n\t\t\t\ttop: anchor.posy,\n\t\t\t\tleft: anchor.posx,\n\t\t\t\t// We are about to position the context view where the mouse\n\t\t\t\t// cursor is. To prevent the view being exactly under the mouse\n\t\t\t\t// when showing and thus potentially triggering an action within,\n\t\t\t\t// we treat the mouse location like a small sized block element.\n\t\t\t\twidth: 2,\n\t\t\t\theight: 2\n\t\t\t};\n\t\t}\n\n\t\tconst viewSizeWidth = DOM.getTotalWidth(this.view);\n\t\tconst viewSizeHeight = DOM.getTotalHeight(this.view);\n\n\t\tconst anchorPosition = this.delegate!.anchorPosition ?? AnchorPosition.BELOW;\n\t\tconst anchorAlignment = this.delegate!.anchorAlignment ?? AnchorAlignment.LEFT;\n\t\tconst anchorAxisAlignment = this.delegate!.anchorAxisAlignment ?? AnchorAxisAlignment.VERTICAL;\n\n\t\tlet top: number;\n\t\tlet left: number;\n\n\t\tconst activeWindow = DOM.getActiveWindow();\n\t\tif (anchorAxisAlignment === AnchorAxisAlignment.VERTICAL) {\n\t\t\tconst verticalAnchor: ILayoutAnchor = { offset: around.top - activeWindow.pageYOffset, size: around.height, position: anchorPosition === AnchorPosition.BELOW ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After };\n\t\t\tconst horizontalAnchor: ILayoutAnchor = { offset: around.left, size: around.width, position: anchorAlignment === AnchorAlignment.LEFT ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After, mode: LayoutAnchorMode.ALIGN };\n\n\t\t\ttop = layout(activeWindow.innerHeight, viewSizeHeight, verticalAnchor) + activeWindow.pageYOffset;\n\n\t\t\t// if view intersects vertically with anchor, we must avoid the anchor\n\t\t\tif (Range.intersects({ start: top, end: top + viewSizeHeight }, { start: verticalAnchor.offset, end: verticalAnchor.offset + verticalAnchor.size })) {\n\t\t\t\thorizontalAnchor.mode = LayoutAnchorMode.AVOID;\n\t\t\t}\n\n\t\t\tleft = layout(activeWindow.innerWidth, viewSizeWidth, horizontalAnchor);\n\t\t} else {\n\t\t\tconst horizontalAnchor: ILayoutAnchor = { offset: around.left, size: around.width, position: anchorAlignment === AnchorAlignment.LEFT ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After };\n\t\t\tconst verticalAnchor: ILayoutAnchor = { offset: around.top, size: around.height, position: anchorPosition === AnchorPosition.BELOW ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After, mode: LayoutAnchorMode.ALIGN };\n\n\t\t\tleft = layout(activeWindow.innerWidth, viewSizeWidth, horizontalAnchor);\n\n\t\t\t// if view intersects horizontally with anchor, we must avoid the anchor\n\t\t\tif (Range.intersects({ start: left, end: left + viewSizeWidth }, { start: horizontalAnchor.offset, end: horizontalAnchor.offset + horizontalAnchor.size })) {\n\t\t\t\tverticalAnchor.mode = LayoutAnchorMode.AVOID;\n\t\t\t}\n\n\t\t\ttop = layout(activeWindow.innerHeight, viewSizeHeight, verticalAnchor) + activeWindow.pageYOffset;\n\t\t}\n\n\t\tthis.view.classList.remove('top', 'bottom', 'left', 'right');\n\t\tthis.view.classList.add(anchorPosition === AnchorPosition.BELOW ? 'bottom' : 'top');\n\t\tthis.view.classList.add(anchorAlignment === AnchorAlignment.LEFT ? 'left' : 'right');\n\t\tthis.view.classList.toggle('fixed', this.useFixedPosition);\n\n\t\tconst containerPosition = DOM.getDomNodePagePosition(this.container!);\n\n\t\t// Account for container scroll when positioning the context view\n\t\tconst containerScrollTop = this.container!.scrollTop || 0;\n\t\tconst containerScrollLeft = this.container!.scrollLeft || 0;\n\n\t\tthis.view.style.top = `${top - (this.useFixedPosition ? DOM.getDomNodePagePosition(this.view).top : containerPosition.top) + containerScrollTop}px`;\n\t\tthis.view.style.left = `${left - (this.useFixedPosition ? DOM.getDomNodePagePosition(this.view).left : containerPosition.left) + containerScrollLeft}px`;\n\t\tthis.view.style.width = 'initial';\n\t}\n\n\thide(data?: unknown): void {\n\t\tconst delegate = this.delegate;\n\t\tthis.delegate = null;\n\n\t\tif (delegate?.onHide) {\n\t\t\tdelegate.onHide(data);\n\t\t}\n\n\t\tthis.toDisposeOnClean.dispose();\n\n\t\tDOM.hide(this.view);\n\t}\n\n\tprivate isVisible(): boolean {\n\t\treturn !!this.delegate;\n\t}\n\n\tprivate onDOMEvent(e: UIEvent, onCapture: boolean): void {\n\t\tif (this.delegate) {\n\t\t\tif (this.delegate.onDOMEvent) {\n\t\t\t\tthis.delegate.onDOMEvent(e, <HTMLElement>DOM.getWindow(e).document.activeElement);\n\t\t\t} else if (onCapture && !DOM.isAncestor(<HTMLElement>e.target, this.container)) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\toverride dispose(): void {\n\t\tthis.hide();\n\n\t\tsuper.dispose();\n\t}\n}\n\nconst SHADOW_ROOT_CSS = /* css */ `\n\t:host {\n\t\tall: initial; /* 1st rule so subsequent properties are reset. */\n\t}\n\n\t.codicon[class*='codicon-'] {\n\t\tfont: normal normal normal 16px/1 codicon;\n\t\tdisplay: inline-block;\n\t\ttext-decoration: none;\n\t\ttext-rendering: auto;\n\t\ttext-align: center;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t\tuser-select: none;\n\t\t-webkit-user-select: none;\n\t\t-ms-user-select: none;\n\t}\n\n\t:host {\n\t\tfont-family: -apple-system, BlinkMacSystemFont, \"Segoe WPC\", \"Segoe UI\", \"HelveticaNeue-Light\", system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif;\n\t}\n\n\t:host-context(.mac) { font-family: -apple-system, BlinkMacSystemFont, sans-serif; }\n\t:host-context(.mac:lang(zh-Hans)) { font-family: -apple-system, BlinkMacSystemFont, \"PingFang SC\", \"Hiragino Sans GB\", sans-serif; }\n\t:host-context(.mac:lang(zh-Hant)) { font-family: -apple-system, BlinkMacSystemFont, \"PingFang TC\", sans-serif; }\n\t:host-context(.mac:lang(ja)) { font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic Pro\", sans-serif; }\n\t:host-context(.mac:lang(ko)) { font-family: -apple-system, BlinkMacSystemFont, \"Apple SD Gothic Neo\", \"Nanum Gothic\", \"AppleGothic\", sans-serif; }\n\n\t:host-context(.windows) { font-family: \"Segoe WPC\", \"Segoe UI\", sans-serif; }\n\t:host-context(.windows:lang(zh-Hans)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Microsoft YaHei\", sans-serif; }\n\t:host-context(.windows:lang(zh-Hant)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Microsoft Jhenghei\", sans-serif; }\n\t:host-context(.windows:lang(ja)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Yu Gothic UI\", \"Meiryo UI\", sans-serif; }\n\t:host-context(.windows:lang(ko)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Malgun Gothic\", \"Dotom\", sans-serif; }\n\n\t:host-context(.linux) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif; }\n\t:host-context(.linux:lang(zh-Hans)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans SC\", \"Source Han Sans CN\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(zh-Hant)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans TC\", \"Source Han Sans TW\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(ja)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans J\", \"Source Han Sans JP\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(ko)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans K\", \"Source Han Sans JR\", \"Source Han Sans\", \"UnDotum\", \"FBaekmuk Gulim\", sans-serif; }\n`;\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/browser/ui/hover/hover.ts","vs/base/browser/ui/hover/hover.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAoZhG,MAAM,UAAU,mCAAmC,CAAC,GAAY;IAC/D,MAAM,SAAS,GAAG,GAAyC,CAAC;IAC5D,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,UAAU,IAAI,SAAS,IAAI,8BAA8B,IAAI,SAAS,CAAC;AAChH,CAAC;AA8BD,2BAA2B","file":"hover.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 { IHoverDelegate } from './hoverDelegate.js';\nimport { HoverPosition } from './hoverWidget.js';\nimport { CancellationToken } from '../../../common/cancellation.js';\nimport { IMarkdownString } from '../../../common/htmlContent.js';\nimport { IDisposable } from '../../../common/lifecycle.js';\n\n/**\n * Enables the convenient display of rich markdown-based hovers in the workbench.\n */\nexport interface IHoverDelegate2 {\n\t/**\n\t * Shows a hover after a delay, or immediately if the {@link groupId} matches the currently\n\t * shown hover.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Control showing the hover yourself.\n\t * - Show the hover after the standard delay.\n\t *\n\t * @param options The options of the hover.\n\t * @param groupId The group ID of the hover. If the group ID is the same as the currently shown\n\t * hover, the hover will be shown immediately, skipping the delay.\n\t */\n\tshowDelayedHover(\n\t\toptions: IHoverOptions,\n\t\tlifecycleOptions: Pick<IHoverLifecycleOptions, 'groupId'>,\n\t): IHoverWidget | undefined;\n\n\t/**\n\t * A simple wrapper around showDelayedHover that includes listening to events on the\n\t * {@link target} element that shows the hover.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Let the hover service handle showing the hover.\n\t * - Show the hover after the standard delay.\n\t * - Want the hover positioned beside the {@link target} element.\n\t *\n\t * @param target The target element to listener for mouseover events on.\n\t * @param hoverOptions The options of the hover.\n\t * @param lifecycleOptions The options of the hover's lifecycle.\n\t */\n\tsetupDelayedHover(\n\t\ttarget: HTMLElement,\n\t\thoverOptions: (() => IDelayedHoverOptions) | IDelayedHoverOptions,\n\t\tlifecycleOptions?: IHoverLifecycleOptions,\n\t): IDisposable;\n\n\t/**\n\t * A simple wrapper around showDelayedHover that includes listening to events on the\n\t * {@link target} element that shows the hover. This differs from {@link setupDelayedHover} in\n\t * that the hover will be shown at the mouse position instead of the\n\t * {@link target target} element's position, ignoring any\n\t * {@link IHoverOptions.position position options} that are passed in.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Let the hover service handle showing the hover.\n\t * - Show the hover after the standard delay.\n\t * - Want the hover positioned beside the mouse.\n\t *\n\t * @param target The target element to listener for mouseover events on.\n\t * @param hoverOptions The options of the hover.\n\t * @param lifecycleOptions The options of the hover's lifecycle.\n\t */\n\tsetupDelayedHoverAtMouse(\n\t\ttarget: HTMLElement,\n\t\thoverOptions: (() => IDelayedHoverAtMouseOptions) | IDelayedHoverAtMouseOptions,\n\t\tlifecycleOptions?: IHoverLifecycleOptions,\n\t): IDisposable;\n\n\t/**\n\t * Shows a hover immediately, provided a hover with the same {@link options} object is not\n\t * already visible.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Control showing the hover yourself.\n\t * - Show the hover immediately.\n\t *\n\t * @param options A set of options defining the characteristics of the hover.\n\t * @param focus Whether to focus the hover (useful for keyboard accessibility).\n\t *\n\t * @example A simple usage with a single element target.\n\t *\n\t * ```typescript\n\t * showInstantHover({\n\t * text: new MarkdownString('Hello world'),\n\t * target: someElement\n\t * });\n\t * ```\n\t */\n\tshowInstantHover(\n\t\toptions: IHoverOptions,\n\t\tfocus?: boolean\n\t): IHoverWidget | undefined;\n\n\t/**\n\t * Hides the hover if it was visible. This call will be ignored if the hover is currently\n\t * \"locked\" via the alt/option key unless `force` is set.\n\t */\n\thideHover(force?: boolean): void;\n\n\t/**\n\t * This should only be used until we have the ability to show multiple context views\n\t * simultaneously. #188822\n\t */\n\tshowAndFocusLastHover(): void;\n\n\t/**\n\t * Sets up a managed hover for the given element. A managed hover will set up listeners for\n\t * mouse events, show the hover after a delay and provide hooks to easily update the content.\n\t *\n\t * This should be used over {@link showInstantHover} when fine-grained control is not needed. The\n\t * managed hover also does not scale well, consider using {@link showInstantHover} when showing hovers\n\t * for many elements.\n\t *\n\t * @param hoverDelegate The hover delegate containing hooks and configuration for the hover.\n\t * @param targetElement The target element to show the hover for.\n\t * @param content The content of the hover or a factory that creates it at the time it's shown.\n\t * @param options Additional options for the managed hover.\n\t *\n\t * @deprecated Use {@link setupDelayedHover} or {@link setupDelayedHoverAtMouse} instead where\n\t * possible.\n\t */\n\tsetupManagedHover(hoverDelegate: IHoverDelegate, targetElement: HTMLElement, content: IManagedHoverContentOrFactory, options?: IManagedHoverOptions): IManagedHover;\n\n\t/**\n\t * Shows the hover for the given element if one has been setup.\n\t *\n\t * @param targetElement The target element of the hover, as set up in {@link setupManagedHover}.\n\t *\n\t * @deprecated Use {@link setupDelayedHover} or {@link setupDelayedHoverAtMouse} instead where\n\t * possible.\n\t */\n\tshowManagedHover(targetElement: HTMLElement): void;\n}\n\nexport interface IHoverWidget extends IDisposable {\n\t/**\n\t * Whether the hover widget has been disposed.\n\t */\n\treadonly isDisposed: boolean;\n}\n\nexport const enum HoverStyle {\n\t/**\n\t * The hover is anchored below the element with a pointer above it pointing at the target.\n\t */\n\tPointer = 1,\n\t/**\n\t * The hover is anchored to the bottom right of the cursor's location.\n\t */\n\tMouse = 2,\n}\n\nexport interface IHoverOptions {\n\t/**\n\t * The content to display in the primary section of the hover. The type of text determines the\n\t * default `hideOnHover` behavior.\n\t */\n\tcontent: IMarkdownString | string | HTMLElement;\n\n\t/**\n\t * The target for the hover. This determines the position of the hover and it will only be\n\t * hidden when the mouse leaves both the hover and the target. A HTMLElement can be used for\n\t * simple cases and a IHoverTarget for more complex cases where multiple elements and/or a\n\t * dispose method is required.\n\t */\n\ttarget: IHoverTarget | HTMLElement;\n\n\t/*\n\t * The container to pass to {@link IContextViewProvider.showContextView} which renders the hover\n\t * in. This is particularly useful for more natural tab focusing behavior, where the hover is\n\t * created as the next tab index after the element being hovered and/or to workaround the\n\t * element's container hiding on `focusout`.\n\t */\n\tcontainer?: HTMLElement;\n\n\t/**\n\t * An ID to associate with the hover to be used as an equality check. Normally when calling\n\t * {@link IHoverService.showHover} the options object itself is used to determine if the hover\n\t * is the same one that is already showing, when this is set, the ID will be used instead.\n\t *\n\t * When `undefined`, this will default to a serialized version of {@link content}. In this case\n\t * it will remain `undefined` if {@link content} is a `HTMLElement`.\n\t */\n\tid?: string;\n\n\t/**\n\t * A set of actions for the hover's \"status bar\".\n\t */\n\tactions?: IHoverAction[];\n\n\t/**\n\t * An optional array of classes to add to the hover element.\n\t */\n\tadditionalClasses?: string[];\n\n\t/**\n\t * An optional link handler for markdown links, if this is not provided the IOpenerService will\n\t * be used to open the links using its default options.\n\t */\n\tlinkHandler?(url: string): void;\n\n\t/**\n\t * Whether to trap focus in the following ways:\n\t * - When the hover closes, focus goes to the element that had focus before the hover opened\n\t * - If there are elements in the hover to focus, focus stays inside of the hover when tabbing\n\t * Note that this is overridden to true when in screen reader optimized mode.\n\t */\n\ttrapFocus?: boolean;\n\n\t/**\n\t * The style of the hover, this sets default values of {@link position} and {@link appearance}:\n\t */\n\tstyle?: HoverStyle;\n\n\t/**\n\t * Options that defines where the hover is positioned.\n\t */\n\tposition?: IHoverPositionOptions;\n\n\t/**\n\t * Options that defines how long the hover is shown and when it hides.\n\t */\n\tpersistence?: IHoverPersistenceOptions;\n\n\t/**\n\t * Options that define how the hover looks.\n\t */\n\tappearance?: IHoverAppearanceOptions;\n}\n\n// `target` is ignored for delayed hover methods as it's included in the method and added\n// automatically when the hover options get resolved.\nexport type IDelayedHoverOptions = Omit<IHoverOptions, 'target'>;\n\n// `position` is ignored for delayed at mouse hover methods as it's overwritten by the mouse event.\n// `showPointer` is always false when using mouse positioning\nexport type IDelayedHoverAtMouseOptions = Omit<IDelayedHoverOptions, 'position' | 'appearance'> & { appearance?: Omit<IHoverAppearanceOptions, 'showPointer'> };\n\nexport interface IHoverLifecycleOptions {\n\t/**\n\t * The group ID of the hover. If the group ID is the same as the currently shown hover, the\n\t * hover will be shown immediately, skipping the delay.\n\t *\n\t * @example Use a UUID to set a unique `groupId` for related hovers\n\t *\n\t * ```typescript\n\t * const groupId = generateUuid();\n\t * showDelayedHover({ content: 'Button 1', target: someElement1 }, { groupId });\n\t * showDelayedHover({ content: 'Button 2', target: someElement2 }, { groupId });\n\t * ```\n\t *\n\t * @example Use a feature-specific string to set a unqiue `groupId` for related hovers\n\t *\n\t * ```typescript\n\t * showDelayedHover({ content: 'Button 1', target: someElement1 }, { groupId: 'my-feature-items' });\n\t * showDelayedHover({ content: 'Button 2', target: someElement2 }, { groupId: 'my-feature-items' });\n\t * ```\n\t */\n\tgroupId?: string;\n\n\t/**\n\t * Whether to set up space and enter keyboard events for the hover, when these are pressed when\n\t * the hover's target is focused it will show and focus the hover.\n\t *\n\t * Typically this should _not_ be used when the space or enter events are already handled by\n\t * something else.\n\t */\n\tsetupKeyboardEvents?: boolean;\n}\n\nexport interface IHoverPositionOptions {\n\t/**\n\t * Position of the hover. The default is to show above the target. This option will be ignored\n\t * if there is not enough room to layout the hover in the specified position, unless the\n\t * forcePosition option is set.\n\t */\n\thoverPosition?: HoverPosition | MouseEvent;\n\n\t/**\n\t * Force the hover position, reducing the size of the hover instead of adjusting the hover\n\t * position.\n\t */\n\tforcePosition?: boolean;\n}\n\nexport interface IHoverPersistenceOptions {\n\t/**\n\t * Whether to hide the hover when the mouse leaves the `target` and enters the actual hover.\n\t * This is false by default when text is an `IMarkdownString` and true when `text` is a\n\t * `string`. Note that this will be ignored if any `actions` are provided as hovering is\n\t * required to make them accessible.\n\t *\n\t * In general hiding on hover is desired for:\n\t * - Regular text where selection is not important\n\t * - Markdown that contains no links where selection is not important\n\t */\n\thideOnHover?: boolean;\n\n\t/**\n\t * Whether to hide the hover when a key is pressed.\n\t */\n\thideOnKeyDown?: boolean;\n\n\t/**\n\t * Whether to make the hover sticky, this means it will not be hidden when the mouse leaves the\n\t * hover.\n\t */\n\tsticky?: boolean;\n}\n\nexport interface IHoverAppearanceOptions {\n\t/**\n\t * Whether to show the hover pointer, a little arrow that connects the target and the hover.\n\t */\n\tshowPointer?: boolean;\n\n\t/**\n\t * Whether to show a compact hover, reducing the font size and padding of the hover.\n\t */\n\tcompact?: boolean;\n\n\t/**\n\t * When {@link hideOnHover} is explicitly true or undefined and its auto value is detected to\n\t * hide, show a hint at the bottom of the hover explaining how to mouse over the widget. This\n\t * should be used in the cases where despite the hover having no interactive content, it's\n\t * likely the user may want to interact with it somehow.\n\t */\n\tshowHoverHint?: boolean;\n\n\t/**\n\t * Whether to skip the fade in animation, this should be used when hovering from one hover to\n\t * another in the same group so it looks like the hover is moving from one element to the other.\n\t */\n\tskipFadeInAnimation?: boolean;\n\n\t/**\n\t * The max height of the hover relative to the window height.\n\t * Accepted values: (0,1]\n\t * Default: 0.5\n\t */\n\tmaxHeightRatio?: number;\n}\n\nexport interface IHoverAction {\n\t/**\n\t * The label to use in the hover's status bar.\n\t */\n\tlabel: string;\n\n\t/**\n\t * The command ID of the action, this is used to resolve the keybinding to display after the\n\t * action label.\n\t */\n\tcommandId: string;\n\n\t/**\n\t * An optional class of an icon that will be displayed before the label.\n\t */\n\ticonClass?: string;\n\n\t/**\n\t * The callback to run the action.\n\t * @param target The action element that was activated.\n\t */\n\trun(target: HTMLElement): void;\n}\n\n/**\n * A target for a hover.\n */\nexport interface IHoverTarget extends Partial<IDisposable> {\n\t/**\n\t * A set of target elements used to position the hover. If multiple elements are used the hover\n\t * will try to not overlap any target element. An example use case for this is show a hover for\n\t * wrapped text.\n\t */\n\treadonly targetElements: readonly HTMLElement[];\n\n\t/**\n\t * An optional absolute x coordinate to position the hover with, for example to position the\n\t * hover using `MouseEvent.pageX`.\n\t */\n\treadonly x?: number;\n\n\t/**\n\t * An optional absolute y coordinate to position the hover with, for example to position the\n\t * hover using `MouseEvent.pageY`.\n\t */\n\treadonly y?: number;\n}\n\n// #region Managed hover\n\nexport interface IManagedHoverTooltipMarkdownString {\n\tmarkdown: IMarkdownString | string | undefined | ((token: CancellationToken) => Promise<IMarkdownString | string | undefined>);\n\tmarkdownNotSupportedFallback: string | undefined;\n}\n\nexport function isManagedHoverTooltipMarkdownString(obj: unknown): obj is IManagedHoverTooltipMarkdownString {\n\tconst candidate = obj as IManagedHoverTooltipMarkdownString;\n\treturn typeof candidate === 'object' && 'markdown' in candidate && 'markdownNotSupportedFallback' in candidate;\n}\n\nexport interface IManagedHoverTooltipHTMLElement {\n\telement: (token: CancellationToken) => HTMLElement | Promise<HTMLElement>;\n}\n\nexport type IManagedHoverContent = string | IManagedHoverTooltipMarkdownString | IManagedHoverTooltipHTMLElement | HTMLElement | undefined;\nexport type IManagedHoverContentOrFactory = IManagedHoverContent | (() => IManagedHoverContent);\n\nexport interface IManagedHoverOptions extends Pick<IHoverOptions, 'actions' | 'linkHandler' | 'trapFocus'> {\n\tappearance?: Pick<IHoverAppearanceOptions, 'showHoverHint'>;\n}\n\nexport interface IManagedHover extends IDisposable {\n\t/**\n\t * Allows to programmatically open the hover.\n\t */\n\tshow(focus?: boolean): void;\n\n\t/**\n\t * Allows to programmatically hide the hover.\n\t */\n\thide(): void;\n\n\t/**\n\t * Updates the contents of the hover.\n\t */\n\tupdate(tooltip: IManagedHoverContent, options?: IManagedHoverOptions): void;\n}\n\n// #endregion Managed hover\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 { IHoverDelegate } from './hoverDelegate.js';\nimport { HoverPosition } from './hoverWidget.js';\nimport { CancellationToken } from '../../../common/cancellation.js';\nimport { IMarkdownString } from '../../../common/htmlContent.js';\nimport { IDisposable } from '../../../common/lifecycle.js';\n\n/**\n * Enables the convenient display of rich markdown-based hovers in the workbench.\n */\nexport interface IHoverDelegate2 {\n\t/**\n\t * Shows a hover after a delay, or immediately if the {@link groupId} matches the currently\n\t * shown hover.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Control showing the hover yourself.\n\t * - Show the hover after the standard delay.\n\t *\n\t * @param options The options of the hover.\n\t * @param groupId The group ID of the hover. If the group ID is the same as the currently shown\n\t * hover, the hover will be shown immediately, skipping the delay.\n\t */\n\tshowDelayedHover(\n\t\toptions: IHoverOptions,\n\t\tlifecycleOptions: Pick<IHoverLifecycleOptions, 'groupId'>,\n\t): IHoverWidget | undefined;\n\n\t/**\n\t * A simple wrapper around showDelayedHover that includes listening to events on the\n\t * {@link target} element that shows the hover.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Let the hover service handle showing the hover.\n\t * - Show the hover after the standard delay.\n\t * - Want the hover positioned beside the {@link target} element.\n\t *\n\t * @param target The target element to listener for mouseover events on.\n\t * @param hoverOptions The options of the hover.\n\t * @param lifecycleOptions The options of the hover's lifecycle.\n\t */\n\tsetupDelayedHover(\n\t\ttarget: HTMLElement,\n\t\thoverOptions: (() => IDelayedHoverOptions) | IDelayedHoverOptions,\n\t\tlifecycleOptions?: IHoverLifecycleOptions,\n\t): IDisposable;\n\n\t/**\n\t * A simple wrapper around showDelayedHover that includes listening to events on the\n\t * {@link target} element that shows the hover. This differs from {@link setupDelayedHover} in\n\t * that the hover will be shown at the mouse position instead of the\n\t * {@link target target} element's position, ignoring any\n\t * {@link IHoverOptions.position position options} that are passed in.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Let the hover service handle showing the hover.\n\t * - Show the hover after the standard delay.\n\t * - Want the hover positioned beside the mouse.\n\t *\n\t * @param target The target element to listener for mouseover events on.\n\t * @param hoverOptions The options of the hover.\n\t * @param lifecycleOptions The options of the hover's lifecycle.\n\t */\n\tsetupDelayedHoverAtMouse(\n\t\ttarget: HTMLElement,\n\t\thoverOptions: (() => IDelayedHoverAtMouseOptions) | IDelayedHoverAtMouseOptions,\n\t\tlifecycleOptions?: IHoverLifecycleOptions,\n\t): IDisposable;\n\n\t/**\n\t * Shows a hover immediately, provided a hover with the same {@link options} object is not\n\t * already visible.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Control showing the hover yourself.\n\t * - Show the hover immediately.\n\t *\n\t * @param options A set of options defining the characteristics of the hover.\n\t * @param focus Whether to focus the hover (useful for keyboard accessibility).\n\t *\n\t * @example A simple usage with a single element target.\n\t *\n\t * ```typescript\n\t * showInstantHover({\n\t * text: new MarkdownString('Hello world'),\n\t * target: someElement\n\t * });\n\t * ```\n\t */\n\tshowInstantHover(\n\t\toptions: IHoverOptions,\n\t\tfocus?: boolean\n\t): IHoverWidget | undefined;\n\n\t/**\n\t * Hides the hover if it was visible. This call will be ignored if the hover is currently\n\t * \"locked\" via the alt/option key unless `force` is set.\n\t */\n\thideHover(force?: boolean): void;\n\n\t/**\n\t * This should only be used until we have the ability to show multiple context views\n\t * simultaneously. #188822\n\t */\n\tshowAndFocusLastHover(): void;\n\n\t/**\n\t * Sets up a managed hover for the given element. A managed hover will set up listeners for\n\t * mouse events, show the hover after a delay and provide hooks to easily update the content.\n\t *\n\t * This should be used over {@link showInstantHover} when fine-grained control is not needed. The\n\t * managed hover also does not scale well, consider using {@link showInstantHover} when showing hovers\n\t * for many elements.\n\t *\n\t * @param hoverDelegate The hover delegate containing hooks and configuration for the hover.\n\t * @param targetElement The target element to show the hover for.\n\t * @param content The content of the hover or a factory that creates it at the time it's shown.\n\t * @param options Additional options for the managed hover.\n\t *\n\t * @deprecated Use {@link setupDelayedHover} or {@link setupDelayedHoverAtMouse} instead where\n\t * possible.\n\t */\n\tsetupManagedHover(hoverDelegate: IHoverDelegate, targetElement: HTMLElement, content: IManagedHoverContentOrFactory, options?: IManagedHoverOptions): IManagedHover;\n\n\t/**\n\t * Shows the hover for the given element if one has been setup.\n\t *\n\t * @param targetElement The target element of the hover, as set up in {@link setupManagedHover}.\n\t *\n\t * @deprecated Use {@link setupDelayedHover} or {@link setupDelayedHoverAtMouse} instead where\n\t * possible.\n\t */\n\tshowManagedHover(targetElement: HTMLElement): void;\n}\n\nexport interface IHoverWidget extends IDisposable {\n\t/**\n\t * Whether the hover widget has been disposed.\n\t */\n\treadonly isDisposed: boolean;\n}\n\nexport const enum HoverStyle {\n\t/**\n\t * The hover is anchored below the element with a pointer above it pointing at the target.\n\t */\n\tPointer = 1,\n\t/**\n\t * The hover is anchored to the bottom right of the cursor's location.\n\t */\n\tMouse = 2,\n}\n\nexport interface IHoverOptions {\n\t/**\n\t * The content to display in the primary section of the hover. The type of text determines the\n\t * default `hideOnHover` behavior.\n\t */\n\tcontent: IMarkdownString | string | HTMLElement;\n\n\t/**\n\t * The target for the hover. This determines the position of the hover and it will only be\n\t * hidden when the mouse leaves both the hover and the target. A HTMLElement can be used for\n\t * simple cases and a IHoverTarget for more complex cases where multiple elements and/or a\n\t * dispose method is required.\n\t */\n\ttarget: IHoverTarget | HTMLElement;\n\n\t/*\n\t * The container to pass to {@link IContextViewProvider.showContextView} which renders the hover\n\t * in. This is particularly useful for more natural tab focusing behavior, where the hover is\n\t * created as the next tab index after the element being hovered and/or to workaround the\n\t * element's container hiding on `focusout`.\n\t */\n\tcontainer?: HTMLElement;\n\n\t/**\n\t * An ID to associate with the hover to be used as an equality check. Normally when calling\n\t * {@link IHoverService.showHover} the options object itself is used to determine if the hover\n\t * is the same one that is already showing, when this is set, the ID will be used instead.\n\t *\n\t * When `undefined`, this will default to a serialized version of {@link content}. In this case\n\t * it will remain `undefined` if {@link content} is a `HTMLElement`.\n\t */\n\tid?: string;\n\n\t/**\n\t * A set of actions for the hover's \"status bar\".\n\t */\n\tactions?: IHoverAction[];\n\n\t/**\n\t * An optional array of classes to add to the hover element.\n\t */\n\tadditionalClasses?: string[];\n\n\t/**\n\t * An optional link handler for markdown links, if this is not provided the IOpenerService will\n\t * be used to open the links using its default options.\n\t */\n\tlinkHandler?(url: string): void;\n\n\t/**\n\t * Whether to trap focus in the following ways:\n\t * - When the hover closes, focus goes to the element that had focus before the hover opened\n\t * - If there are elements in the hover to focus, focus stays inside of the hover when tabbing\n\t * Note that this is overridden to true when in screen reader optimized mode.\n\t */\n\ttrapFocus?: boolean;\n\n\t/**\n\t * The style of the hover, this sets default values of {@link position} and {@link appearance}:\n\t */\n\tstyle?: HoverStyle;\n\n\t/**\n\t * Options that defines where the hover is positioned.\n\t */\n\tposition?: IHoverPositionOptions;\n\n\t/**\n\t * Options that defines how long the hover is shown and when it hides.\n\t */\n\tpersistence?: IHoverPersistenceOptions;\n\n\t/**\n\t * Options that define how the hover looks.\n\t */\n\tappearance?: IHoverAppearanceOptions;\n}\n\n// `target` is ignored for delayed hover methods as it's included in the method and added\n// automatically when the hover options get resolved.\nexport type IDelayedHoverOptions = Omit<IHoverOptions, 'target'>;\n\n// `position` is ignored for delayed at mouse hover methods as it's overwritten by the mouse event.\n// `showPointer` is always false when using mouse positioning\nexport type IDelayedHoverAtMouseOptions = Omit<IDelayedHoverOptions, 'position' | 'appearance'> & { appearance?: Omit<IHoverAppearanceOptions, 'showPointer'> };\n\nexport interface IHoverLifecycleOptions {\n\t/**\n\t * The group ID of the hover. If the group ID is the same as the currently shown hover, the\n\t * hover will be shown immediately, skipping the delay.\n\t *\n\t * @example Use a UUID to set a unique `groupId` for related hovers\n\t *\n\t * ```typescript\n\t * const groupId = generateUuid();\n\t * showDelayedHover({ content: 'Button 1', target: someElement1 }, { groupId });\n\t * showDelayedHover({ content: 'Button 2', target: someElement2 }, { groupId });\n\t * ```\n\t *\n\t * @example Use a feature-specific string to set a unqiue `groupId` for related hovers\n\t *\n\t * ```typescript\n\t * showDelayedHover({ content: 'Button 1', target: someElement1 }, { groupId: 'my-feature-items' });\n\t * showDelayedHover({ content: 'Button 2', target: someElement2 }, { groupId: 'my-feature-items' });\n\t * ```\n\t */\n\tgroupId?: string;\n\n\t/**\n\t * Whether to set up space and enter keyboard events for the hover, when these are pressed when\n\t * the hover's target is focused it will show and focus the hover.\n\t *\n\t * Typically this should _not_ be used when the space or enter events are already handled by\n\t * something else.\n\t */\n\tsetupKeyboardEvents?: boolean;\n}\n\nexport interface IHoverPositionOptions {\n\t/**\n\t * Position of the hover. The default is to show above the target. This option will be ignored\n\t * if there is not enough room to layout the hover in the specified position, unless the\n\t * forcePosition option is set.\n\t */\n\thoverPosition?: HoverPosition | MouseEvent;\n\n\t/**\n\t * Force the hover position, reducing the size of the hover instead of adjusting the hover\n\t * position.\n\t */\n\tforcePosition?: boolean;\n}\n\nexport interface IHoverPersistenceOptions {\n\t/**\n\t * Whether to hide the hover when the mouse leaves the `target` and enters the actual hover.\n\t * This is false by default when text is an `IMarkdownString` and true when `text` is a\n\t * `string`. Note that this will be ignored if any `actions` are provided as hovering is\n\t * required to make them accessible.\n\t *\n\t * In general hiding on hover is desired for:\n\t * - Regular text where selection is not important\n\t * - Markdown that contains no links where selection is not important\n\t */\n\thideOnHover?: boolean;\n\n\t/**\n\t * Whether to hide the hover when a key is pressed.\n\t */\n\thideOnKeyDown?: boolean;\n\n\t/**\n\t * Whether to make the hover sticky, this means it will not be hidden when the mouse leaves the\n\t * hover.\n\t */\n\tsticky?: boolean;\n}\n\nexport interface IHoverAppearanceOptions {\n\t/**\n\t * Whether to show the hover pointer, a little arrow that connects the target and the hover.\n\t */\n\tshowPointer?: boolean;\n\n\t/**\n\t * Whether to show a compact hover, reducing the font size and padding of the hover.\n\t */\n\tcompact?: boolean;\n\n\t/**\n\t * When {@link hideOnHover} is explicitly true or undefined and its auto value is detected to\n\t * hide, show a hint at the bottom of the hover explaining how to mouse over the widget. This\n\t * should be used in the cases where despite the hover having no interactive content, it's\n\t * likely the user may want to interact with it somehow.\n\t */\n\tshowHoverHint?: boolean;\n\n\t/**\n\t * Whether to skip the fade in animation, this should be used when hovering from one hover to\n\t * another in the same group so it looks like the hover is moving from one element to the other.\n\t */\n\tskipFadeInAnimation?: boolean;\n\n\t/**\n\t * The max height of the hover relative to the window height.\n\t * Accepted values: (0,1]\n\t * Default: 0.5\n\t */\n\tmaxHeightRatio?: number;\n}\n\nexport interface IHoverAction {\n\t/**\n\t * The label to use in the hover's status bar.\n\t */\n\tlabel: string;\n\n\t/**\n\t * The command ID of the action, this is used to resolve the keybinding to display after the\n\t * action label.\n\t */\n\tcommandId: string;\n\n\t/**\n\t * An optional class of an icon that will be displayed before the label.\n\t */\n\ticonClass?: string;\n\n\t/**\n\t * The callback to run the action.\n\t * @param target The action element that was activated.\n\t */\n\trun(target: HTMLElement): void;\n}\n\n/**\n * A target for a hover.\n */\nexport interface IHoverTarget extends Partial<IDisposable> {\n\t/**\n\t * A set of target elements used to position the hover. If multiple elements are used the hover\n\t * will try to not overlap any target element. An example use case for this is show a hover for\n\t * wrapped text.\n\t */\n\treadonly targetElements: readonly HTMLElement[];\n\n\t/**\n\t * An optional absolute x coordinate to position the hover with, for example to position the\n\t * hover using `MouseEvent.pageX`.\n\t */\n\treadonly x?: number;\n\n\t/**\n\t * An optional absolute y coordinate to position the hover with, for example to position the\n\t * hover using `MouseEvent.pageY`.\n\t */\n\treadonly y?: number;\n}\n\n// #region Managed hover\n\nexport interface IManagedHoverTooltipMarkdownString {\n\tmarkdown: IMarkdownString | string | undefined | ((token: CancellationToken) => Promise<IMarkdownString | string | undefined>);\n\tmarkdownNotSupportedFallback: string | undefined;\n}\n\nexport function isManagedHoverTooltipMarkdownString(obj: unknown): obj is IManagedHoverTooltipMarkdownString {\n\tconst candidate = obj as IManagedHoverTooltipMarkdownString;\n\treturn typeof candidate === 'object' && 'markdown' in candidate && 'markdownNotSupportedFallback' in candidate;\n}\n\nexport interface IManagedHoverTooltipHTMLElement {\n\telement: (token: CancellationToken) => HTMLElement | Promise<HTMLElement>;\n}\n\nexport type IManagedHoverContent = string | IManagedHoverTooltipMarkdownString | IManagedHoverTooltipHTMLElement | HTMLElement | undefined;\nexport type IManagedHoverContentOrFactory = IManagedHoverContent | (() => IManagedHoverContent);\n\nexport interface IManagedHoverOptions extends Pick<IHoverOptions, 'actions' | 'linkHandler' | 'trapFocus'> {\n\tappearance?: Pick<IHoverAppearanceOptions, 'showHoverHint'>;\n}\n\nexport interface IManagedHover extends IDisposable {\n\t/**\n\t * Allows to programmatically open the hover.\n\t */\n\tshow(focus?: boolean): void;\n\n\t/**\n\t * Allows to programmatically hide the hover.\n\t */\n\thide(): void;\n\n\t/**\n\t * Updates the contents of the hover.\n\t */\n\tupdate(tooltip: IManagedHoverContent, options?: IManagedHoverOptions): void;\n}\n\n// #endregion Managed hover\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/browser/ui/hover/hover.ts","vs/base/browser/ui/hover/hover.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AA0ZhG,MAAM,UAAU,mCAAmC,CAAC,GAAY;IAC/D,MAAM,SAAS,GAAG,GAAyC,CAAC;IAC5D,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,UAAU,IAAI,SAAS,IAAI,8BAA8B,IAAI,SAAS,CAAC;AAChH,CAAC;AA8BD,2BAA2B","file":"hover.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 { IHoverDelegate } from './hoverDelegate.js';\nimport { HoverPosition } from './hoverWidget.js';\nimport { CancellationToken } from '../../../common/cancellation.js';\nimport { IMarkdownString } from '../../../common/htmlContent.js';\nimport { IDisposable } from '../../../common/lifecycle.js';\n\n/**\n * Enables the convenient display of rich markdown-based hovers in the workbench.\n */\nexport interface IHoverDelegate2 {\n\t/**\n\t * Shows a hover after a delay, or immediately if the {@link groupId} matches the currently\n\t * shown hover.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Control showing the hover yourself.\n\t * - Show the hover after the standard delay.\n\t *\n\t * @param options The options of the hover.\n\t * @param groupId The group ID of the hover. If the group ID is the same as the currently shown\n\t * hover, the hover will be shown immediately, skipping the delay.\n\t */\n\tshowDelayedHover(\n\t\toptions: IHoverOptions,\n\t\tlifecycleOptions: Pick<IHoverLifecycleOptions, 'groupId'>,\n\t): IHoverWidget | undefined;\n\n\t/**\n\t * A simple wrapper around showDelayedHover that includes listening to events on the\n\t * {@link target} element that shows the hover.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Let the hover service handle showing the hover.\n\t * - Show the hover after the standard delay.\n\t * - Want the hover positioned beside the {@link target} element.\n\t *\n\t * @param target The target element to listener for mouseover events on.\n\t * @param hoverOptions The options of the hover.\n\t * @param lifecycleOptions The options of the hover's lifecycle.\n\t */\n\tsetupDelayedHover(\n\t\ttarget: HTMLElement,\n\t\thoverOptions: (() => IDelayedHoverOptions) | IDelayedHoverOptions,\n\t\tlifecycleOptions?: IHoverLifecycleOptions,\n\t): IDisposable;\n\n\t/**\n\t * A simple wrapper around showDelayedHover that includes listening to events on the\n\t * {@link target} element that shows the hover. This differs from {@link setupDelayedHover} in\n\t * that the hover will be shown at the mouse position instead of the\n\t * {@link target target} element's position, ignoring any\n\t * {@link IHoverOptions.position position options} that are passed in.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Let the hover service handle showing the hover.\n\t * - Show the hover after the standard delay.\n\t * - Want the hover positioned beside the mouse.\n\t *\n\t * @param target The target element to listener for mouseover events on.\n\t * @param hoverOptions The options of the hover.\n\t * @param lifecycleOptions The options of the hover's lifecycle.\n\t */\n\tsetupDelayedHoverAtMouse(\n\t\ttarget: HTMLElement,\n\t\thoverOptions: (() => IDelayedHoverAtMouseOptions) | IDelayedHoverAtMouseOptions,\n\t\tlifecycleOptions?: IHoverLifecycleOptions,\n\t): IDisposable;\n\n\t/**\n\t * Shows a hover immediately, provided a hover with the same {@link options} object is not\n\t * already visible.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Control showing the hover yourself.\n\t * - Show the hover immediately.\n\t *\n\t * @param options A set of options defining the characteristics of the hover.\n\t * @param focus Whether to focus the hover (useful for keyboard accessibility).\n\t *\n\t * @example A simple usage with a single element target.\n\t *\n\t * ```typescript\n\t * showInstantHover({\n\t * text: new MarkdownString('Hello world'),\n\t * target: someElement\n\t * });\n\t * ```\n\t */\n\tshowInstantHover(\n\t\toptions: IHoverOptions,\n\t\tfocus?: boolean\n\t): IHoverWidget | undefined;\n\n\t/**\n\t * Hides the hover if it was visible. This call will be ignored if the hover is currently\n\t * \"locked\" via the alt/option key unless `force` is set.\n\t */\n\thideHover(force?: boolean): void;\n\n\t/**\n\t * This should only be used until we have the ability to show multiple context views\n\t * simultaneously. #188822\n\t */\n\tshowAndFocusLastHover(): void;\n\n\t/**\n\t * Sets up a managed hover for the given element. A managed hover will set up listeners for\n\t * mouse events, show the hover after a delay and provide hooks to easily update the content.\n\t *\n\t * This should be used over {@link showInstantHover} when fine-grained control is not needed. The\n\t * managed hover also does not scale well, consider using {@link showInstantHover} when showing hovers\n\t * for many elements.\n\t *\n\t * @param hoverDelegate The hover delegate containing hooks and configuration for the hover.\n\t * @param targetElement The target element to show the hover for.\n\t * @param content The content of the hover or a factory that creates it at the time it's shown.\n\t * @param options Additional options for the managed hover.\n\t *\n\t * @deprecated Use {@link setupDelayedHover} or {@link setupDelayedHoverAtMouse} instead where\n\t * possible.\n\t */\n\tsetupManagedHover(hoverDelegate: IHoverDelegate, targetElement: HTMLElement, content: IManagedHoverContentOrFactory, options?: IManagedHoverOptions): IManagedHover;\n\n\t/**\n\t * Shows the hover for the given element if one has been setup.\n\t *\n\t * @param targetElement The target element of the hover, as set up in {@link setupManagedHover}.\n\t *\n\t * @deprecated Use {@link setupDelayedHover} or {@link setupDelayedHoverAtMouse} instead where\n\t * possible.\n\t */\n\tshowManagedHover(targetElement: HTMLElement): void;\n}\n\nexport interface IHoverWidget extends IDisposable {\n\t/**\n\t * Whether the hover widget has been disposed.\n\t */\n\treadonly isDisposed: boolean;\n}\n\nexport const enum HoverStyle {\n\t/**\n\t * The hover is anchored below the element with a pointer above it pointing at the target.\n\t */\n\tPointer = 1,\n\t/**\n\t * The hover is anchored to the bottom right of the cursor's location.\n\t */\n\tMouse = 2,\n}\n\nexport interface IHoverOptions {\n\t/**\n\t * The content to display in the primary section of the hover. The type of text determines the\n\t * default `hideOnHover` behavior.\n\t */\n\tcontent: IMarkdownString | string | HTMLElement;\n\n\t/**\n\t * The target for the hover. This determines the position of the hover and it will only be\n\t * hidden when the mouse leaves both the hover and the target. A HTMLElement can be used for\n\t * simple cases and a IHoverTarget for more complex cases where multiple elements and/or a\n\t * dispose method is required.\n\t */\n\ttarget: IHoverTarget | HTMLElement;\n\n\t/*\n\t * The container to pass to {@link IContextViewProvider.showContextView} which renders the hover\n\t * in. This is particularly useful for more natural tab focusing behavior, where the hover is\n\t * created as the next tab index after the element being hovered and/or to workaround the\n\t * element's container hiding on `focusout`.\n\t */\n\tcontainer?: HTMLElement;\n\n\t/**\n\t * An ID to associate with the hover to be used as an equality check. Normally when calling\n\t * {@link IHoverService.showHover} the options object itself is used to determine if the hover\n\t * is the same one that is already showing, when this is set, the ID will be used instead.\n\t *\n\t * When `undefined`, this will default to a serialized version of {@link content}. In this case\n\t * it will remain `undefined` if {@link content} is a `HTMLElement`.\n\t */\n\tid?: string;\n\n\t/**\n\t * A set of actions for the hover's \"status bar\".\n\t */\n\tactions?: IHoverAction[];\n\n\t/**\n\t * An optional array of classes to add to the hover element.\n\t */\n\tadditionalClasses?: string[];\n\n\t/**\n\t * An optional link handler for markdown links, if this is not provided the IOpenerService will\n\t * be used to open the links using its default options.\n\t */\n\tlinkHandler?(url: string): void;\n\n\t/**\n\t * Whether to trap focus in the following ways:\n\t * - When the hover closes, focus goes to the element that had focus before the hover opened\n\t * - If there are elements in the hover to focus, focus stays inside of the hover when tabbing\n\t * Note that this is overridden to true when in screen reader optimized mode.\n\t */\n\ttrapFocus?: boolean;\n\n\t/**\n\t * The style of the hover, this sets default values of {@link position} and {@link appearance}:\n\t */\n\tstyle?: HoverStyle;\n\n\t/**\n\t * Options that defines where the hover is positioned.\n\t */\n\tposition?: IHoverPositionOptions;\n\n\t/**\n\t * Options that defines how long the hover is shown and when it hides.\n\t */\n\tpersistence?: IHoverPersistenceOptions;\n\n\t/**\n\t * Options that define how the hover looks.\n\t */\n\tappearance?: IHoverAppearanceOptions;\n\n\t/**\n\t * An optional callback that is called when the hover is shown. This is called\n\t * later for delayed hovers.\n\t */\n\tonDidShow?(): void;\n}\n\n// `target` is ignored for delayed hover methods as it's included in the method and added\n// automatically when the hover options get resolved.\nexport type IDelayedHoverOptions = Omit<IHoverOptions, 'target'>;\n\n// `position` is ignored for delayed at mouse hover methods as it's overwritten by the mouse event.\n// `showPointer` is always false when using mouse positioning\nexport type IDelayedHoverAtMouseOptions = Omit<IDelayedHoverOptions, 'position' | 'appearance'> & { appearance?: Omit<IHoverAppearanceOptions, 'showPointer'> };\n\nexport interface IHoverLifecycleOptions {\n\t/**\n\t * The group ID of the hover. If the group ID is the same as the currently shown hover, the\n\t * hover will be shown immediately, skipping the delay.\n\t *\n\t * @example Use a UUID to set a unique `groupId` for related hovers\n\t *\n\t * ```typescript\n\t * const groupId = generateUuid();\n\t * showDelayedHover({ content: 'Button 1', target: someElement1 }, { groupId });\n\t * showDelayedHover({ content: 'Button 2', target: someElement2 }, { groupId });\n\t * ```\n\t *\n\t * @example Use a feature-specific string to set a unqiue `groupId` for related hovers\n\t *\n\t * ```typescript\n\t * showDelayedHover({ content: 'Button 1', target: someElement1 }, { groupId: 'my-feature-items' });\n\t * showDelayedHover({ content: 'Button 2', target: someElement2 }, { groupId: 'my-feature-items' });\n\t * ```\n\t */\n\tgroupId?: string;\n\n\t/**\n\t * Whether to set up space and enter keyboard events for the hover, when these are pressed when\n\t * the hover's target is focused it will show and focus the hover.\n\t *\n\t * Typically this should _not_ be used when the space or enter events are already handled by\n\t * something else.\n\t */\n\tsetupKeyboardEvents?: boolean;\n}\n\nexport interface IHoverPositionOptions {\n\t/**\n\t * Position of the hover. The default is to show above the target. This option will be ignored\n\t * if there is not enough room to layout the hover in the specified position, unless the\n\t * forcePosition option is set.\n\t */\n\thoverPosition?: HoverPosition | MouseEvent;\n\n\t/**\n\t * Force the hover position, reducing the size of the hover instead of adjusting the hover\n\t * position.\n\t */\n\tforcePosition?: boolean;\n}\n\nexport interface IHoverPersistenceOptions {\n\t/**\n\t * Whether to hide the hover when the mouse leaves the `target` and enters the actual hover.\n\t * This is false by default when text is an `IMarkdownString` and true when `text` is a\n\t * `string`. Note that this will be ignored if any `actions` are provided as hovering is\n\t * required to make them accessible.\n\t *\n\t * In general hiding on hover is desired for:\n\t * - Regular text where selection is not important\n\t * - Markdown that contains no links where selection is not important\n\t */\n\thideOnHover?: boolean;\n\n\t/**\n\t * Whether to hide the hover when a key is pressed.\n\t */\n\thideOnKeyDown?: boolean;\n\n\t/**\n\t * Whether to make the hover sticky, this means it will not be hidden when the mouse leaves the\n\t * hover.\n\t */\n\tsticky?: boolean;\n}\n\nexport interface IHoverAppearanceOptions {\n\t/**\n\t * Whether to show the hover pointer, a little arrow that connects the target and the hover.\n\t */\n\tshowPointer?: boolean;\n\n\t/**\n\t * Whether to show a compact hover, reducing the font size and padding of the hover.\n\t */\n\tcompact?: boolean;\n\n\t/**\n\t * When {@link hideOnHover} is explicitly true or undefined and its auto value is detected to\n\t * hide, show a hint at the bottom of the hover explaining how to mouse over the widget. This\n\t * should be used in the cases where despite the hover having no interactive content, it's\n\t * likely the user may want to interact with it somehow.\n\t */\n\tshowHoverHint?: boolean;\n\n\t/**\n\t * Whether to skip the fade in animation, this should be used when hovering from one hover to\n\t * another in the same group so it looks like the hover is moving from one element to the other.\n\t */\n\tskipFadeInAnimation?: boolean;\n\n\t/**\n\t * The max height of the hover relative to the window height.\n\t * Accepted values: (0,1]\n\t * Default: 0.5\n\t */\n\tmaxHeightRatio?: number;\n}\n\nexport interface IHoverAction {\n\t/**\n\t * The label to use in the hover's status bar.\n\t */\n\tlabel: string;\n\n\t/**\n\t * The command ID of the action, this is used to resolve the keybinding to display after the\n\t * action label.\n\t */\n\tcommandId: string;\n\n\t/**\n\t * An optional class of an icon that will be displayed before the label.\n\t */\n\ticonClass?: string;\n\n\t/**\n\t * The callback to run the action.\n\t * @param target The action element that was activated.\n\t */\n\trun(target: HTMLElement): void;\n}\n\n/**\n * A target for a hover.\n */\nexport interface IHoverTarget extends Partial<IDisposable> {\n\t/**\n\t * A set of target elements used to position the hover. If multiple elements are used the hover\n\t * will try to not overlap any target element. An example use case for this is show a hover for\n\t * wrapped text.\n\t */\n\treadonly targetElements: readonly HTMLElement[];\n\n\t/**\n\t * An optional absolute x coordinate to position the hover with, for example to position the\n\t * hover using `MouseEvent.pageX`.\n\t */\n\treadonly x?: number;\n\n\t/**\n\t * An optional absolute y coordinate to position the hover with, for example to position the\n\t * hover using `MouseEvent.pageY`.\n\t */\n\treadonly y?: number;\n}\n\n// #region Managed hover\n\nexport interface IManagedHoverTooltipMarkdownString {\n\tmarkdown: IMarkdownString | string | undefined | ((token: CancellationToken) => Promise<IMarkdownString | string | undefined>);\n\tmarkdownNotSupportedFallback: string | undefined;\n}\n\nexport function isManagedHoverTooltipMarkdownString(obj: unknown): obj is IManagedHoverTooltipMarkdownString {\n\tconst candidate = obj as IManagedHoverTooltipMarkdownString;\n\treturn typeof candidate === 'object' && 'markdown' in candidate && 'markdownNotSupportedFallback' in candidate;\n}\n\nexport interface IManagedHoverTooltipHTMLElement {\n\telement: (token: CancellationToken) => HTMLElement | Promise<HTMLElement>;\n}\n\nexport type IManagedHoverContent = string | IManagedHoverTooltipMarkdownString | IManagedHoverTooltipHTMLElement | HTMLElement | undefined;\nexport type IManagedHoverContentOrFactory = IManagedHoverContent | (() => IManagedHoverContent);\n\nexport interface IManagedHoverOptions extends Pick<IHoverOptions, 'actions' | 'linkHandler' | 'trapFocus'> {\n\tappearance?: Pick<IHoverAppearanceOptions, 'showHoverHint'>;\n}\n\nexport interface IManagedHover extends IDisposable {\n\t/**\n\t * Allows to programmatically open the hover.\n\t */\n\tshow(focus?: boolean): void;\n\n\t/**\n\t * Allows to programmatically hide the hover.\n\t */\n\thide(): void;\n\n\t/**\n\t * Updates the contents of the hover.\n\t */\n\tupdate(tooltip: IManagedHoverContent, options?: IManagedHoverOptions): void;\n}\n\n// #endregion Managed hover\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 { IHoverDelegate } from './hoverDelegate.js';\nimport { HoverPosition } from './hoverWidget.js';\nimport { CancellationToken } from '../../../common/cancellation.js';\nimport { IMarkdownString } from '../../../common/htmlContent.js';\nimport { IDisposable } from '../../../common/lifecycle.js';\n\n/**\n * Enables the convenient display of rich markdown-based hovers in the workbench.\n */\nexport interface IHoverDelegate2 {\n\t/**\n\t * Shows a hover after a delay, or immediately if the {@link groupId} matches the currently\n\t * shown hover.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Control showing the hover yourself.\n\t * - Show the hover after the standard delay.\n\t *\n\t * @param options The options of the hover.\n\t * @param groupId The group ID of the hover. If the group ID is the same as the currently shown\n\t * hover, the hover will be shown immediately, skipping the delay.\n\t */\n\tshowDelayedHover(\n\t\toptions: IHoverOptions,\n\t\tlifecycleOptions: Pick<IHoverLifecycleOptions, 'groupId'>,\n\t): IHoverWidget | undefined;\n\n\t/**\n\t * A simple wrapper around showDelayedHover that includes listening to events on the\n\t * {@link target} element that shows the hover.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Let the hover service handle showing the hover.\n\t * - Show the hover after the standard delay.\n\t * - Want the hover positioned beside the {@link target} element.\n\t *\n\t * @param target The target element to listener for mouseover events on.\n\t * @param hoverOptions The options of the hover.\n\t * @param lifecycleOptions The options of the hover's lifecycle.\n\t */\n\tsetupDelayedHover(\n\t\ttarget: HTMLElement,\n\t\thoverOptions: (() => IDelayedHoverOptions) | IDelayedHoverOptions,\n\t\tlifecycleOptions?: IHoverLifecycleOptions,\n\t): IDisposable;\n\n\t/**\n\t * A simple wrapper around showDelayedHover that includes listening to events on the\n\t * {@link target} element that shows the hover. This differs from {@link setupDelayedHover} in\n\t * that the hover will be shown at the mouse position instead of the\n\t * {@link target target} element's position, ignoring any\n\t * {@link IHoverOptions.position position options} that are passed in.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Let the hover service handle showing the hover.\n\t * - Show the hover after the standard delay.\n\t * - Want the hover positioned beside the mouse.\n\t *\n\t * @param target The target element to listener for mouseover events on.\n\t * @param hoverOptions The options of the hover.\n\t * @param lifecycleOptions The options of the hover's lifecycle.\n\t */\n\tsetupDelayedHoverAtMouse(\n\t\ttarget: HTMLElement,\n\t\thoverOptions: (() => IDelayedHoverAtMouseOptions) | IDelayedHoverAtMouseOptions,\n\t\tlifecycleOptions?: IHoverLifecycleOptions,\n\t): IDisposable;\n\n\t/**\n\t * Shows a hover immediately, provided a hover with the same {@link options} object is not\n\t * already visible.\n\t *\n\t * Use this method when you want to:\n\t *\n\t * - Control showing the hover yourself.\n\t * - Show the hover immediately.\n\t *\n\t * @param options A set of options defining the characteristics of the hover.\n\t * @param focus Whether to focus the hover (useful for keyboard accessibility).\n\t *\n\t * @example A simple usage with a single element target.\n\t *\n\t * ```typescript\n\t * showInstantHover({\n\t * text: new MarkdownString('Hello world'),\n\t * target: someElement\n\t * });\n\t * ```\n\t */\n\tshowInstantHover(\n\t\toptions: IHoverOptions,\n\t\tfocus?: boolean\n\t): IHoverWidget | undefined;\n\n\t/**\n\t * Hides the hover if it was visible. This call will be ignored if the hover is currently\n\t * \"locked\" via the alt/option key unless `force` is set.\n\t */\n\thideHover(force?: boolean): void;\n\n\t/**\n\t * This should only be used until we have the ability to show multiple context views\n\t * simultaneously. #188822\n\t */\n\tshowAndFocusLastHover(): void;\n\n\t/**\n\t * Sets up a managed hover for the given element. A managed hover will set up listeners for\n\t * mouse events, show the hover after a delay and provide hooks to easily update the content.\n\t *\n\t * This should be used over {@link showInstantHover} when fine-grained control is not needed. The\n\t * managed hover also does not scale well, consider using {@link showInstantHover} when showing hovers\n\t * for many elements.\n\t *\n\t * @param hoverDelegate The hover delegate containing hooks and configuration for the hover.\n\t * @param targetElement The target element to show the hover for.\n\t * @param content The content of the hover or a factory that creates it at the time it's shown.\n\t * @param options Additional options for the managed hover.\n\t *\n\t * @deprecated Use {@link setupDelayedHover} or {@link setupDelayedHoverAtMouse} instead where\n\t * possible.\n\t */\n\tsetupManagedHover(hoverDelegate: IHoverDelegate, targetElement: HTMLElement, content: IManagedHoverContentOrFactory, options?: IManagedHoverOptions): IManagedHover;\n\n\t/**\n\t * Shows the hover for the given element if one has been setup.\n\t *\n\t * @param targetElement The target element of the hover, as set up in {@link setupManagedHover}.\n\t *\n\t * @deprecated Use {@link setupDelayedHover} or {@link setupDelayedHoverAtMouse} instead where\n\t * possible.\n\t */\n\tshowManagedHover(targetElement: HTMLElement): void;\n}\n\nexport interface IHoverWidget extends IDisposable {\n\t/**\n\t * Whether the hover widget has been disposed.\n\t */\n\treadonly isDisposed: boolean;\n}\n\nexport const enum HoverStyle {\n\t/**\n\t * The hover is anchored below the element with a pointer above it pointing at the target.\n\t */\n\tPointer = 1,\n\t/**\n\t * The hover is anchored to the bottom right of the cursor's location.\n\t */\n\tMouse = 2,\n}\n\nexport interface IHoverOptions {\n\t/**\n\t * The content to display in the primary section of the hover. The type of text determines the\n\t * default `hideOnHover` behavior.\n\t */\n\tcontent: IMarkdownString | string | HTMLElement;\n\n\t/**\n\t * The target for the hover. This determines the position of the hover and it will only be\n\t * hidden when the mouse leaves both the hover and the target. A HTMLElement can be used for\n\t * simple cases and a IHoverTarget for more complex cases where multiple elements and/or a\n\t * dispose method is required.\n\t */\n\ttarget: IHoverTarget | HTMLElement;\n\n\t/*\n\t * The container to pass to {@link IContextViewProvider.showContextView} which renders the hover\n\t * in. This is particularly useful for more natural tab focusing behavior, where the hover is\n\t * created as the next tab index after the element being hovered and/or to workaround the\n\t * element's container hiding on `focusout`.\n\t */\n\tcontainer?: HTMLElement;\n\n\t/**\n\t * An ID to associate with the hover to be used as an equality check. Normally when calling\n\t * {@link IHoverService.showHover} the options object itself is used to determine if the hover\n\t * is the same one that is already showing, when this is set, the ID will be used instead.\n\t *\n\t * When `undefined`, this will default to a serialized version of {@link content}. In this case\n\t * it will remain `undefined` if {@link content} is a `HTMLElement`.\n\t */\n\tid?: string;\n\n\t/**\n\t * A set of actions for the hover's \"status bar\".\n\t */\n\tactions?: IHoverAction[];\n\n\t/**\n\t * An optional array of classes to add to the hover element.\n\t */\n\tadditionalClasses?: string[];\n\n\t/**\n\t * An optional link handler for markdown links, if this is not provided the IOpenerService will\n\t * be used to open the links using its default options.\n\t */\n\tlinkHandler?(url: string): void;\n\n\t/**\n\t * Whether to trap focus in the following ways:\n\t * - When the hover closes, focus goes to the element that had focus before the hover opened\n\t * - If there are elements in the hover to focus, focus stays inside of the hover when tabbing\n\t * Note that this is overridden to true when in screen reader optimized mode.\n\t */\n\ttrapFocus?: boolean;\n\n\t/**\n\t * The style of the hover, this sets default values of {@link position} and {@link appearance}:\n\t */\n\tstyle?: HoverStyle;\n\n\t/**\n\t * Options that defines where the hover is positioned.\n\t */\n\tposition?: IHoverPositionOptions;\n\n\t/**\n\t * Options that defines how long the hover is shown and when it hides.\n\t */\n\tpersistence?: IHoverPersistenceOptions;\n\n\t/**\n\t * Options that define how the hover looks.\n\t */\n\tappearance?: IHoverAppearanceOptions;\n\n\t/**\n\t * An optional callback that is called when the hover is shown. This is called\n\t * later for delayed hovers.\n\t */\n\tonDidShow?(): void;\n}\n\n// `target` is ignored for delayed hover methods as it's included in the method and added\n// automatically when the hover options get resolved.\nexport type IDelayedHoverOptions = Omit<IHoverOptions, 'target'>;\n\n// `position` is ignored for delayed at mouse hover methods as it's overwritten by the mouse event.\n// `showPointer` is always false when using mouse positioning\nexport type IDelayedHoverAtMouseOptions = Omit<IDelayedHoverOptions, 'position' | 'appearance'> & { appearance?: Omit<IHoverAppearanceOptions, 'showPointer'> };\n\nexport interface IHoverLifecycleOptions {\n\t/**\n\t * The group ID of the hover. If the group ID is the same as the currently shown hover, the\n\t * hover will be shown immediately, skipping the delay.\n\t *\n\t * @example Use a UUID to set a unique `groupId` for related hovers\n\t *\n\t * ```typescript\n\t * const groupId = generateUuid();\n\t * showDelayedHover({ content: 'Button 1', target: someElement1 }, { groupId });\n\t * showDelayedHover({ content: 'Button 2', target: someElement2 }, { groupId });\n\t * ```\n\t *\n\t * @example Use a feature-specific string to set a unqiue `groupId` for related hovers\n\t *\n\t * ```typescript\n\t * showDelayedHover({ content: 'Button 1', target: someElement1 }, { groupId: 'my-feature-items' });\n\t * showDelayedHover({ content: 'Button 2', target: someElement2 }, { groupId: 'my-feature-items' });\n\t * ```\n\t */\n\tgroupId?: string;\n\n\t/**\n\t * Whether to set up space and enter keyboard events for the hover, when these are pressed when\n\t * the hover's target is focused it will show and focus the hover.\n\t *\n\t * Typically this should _not_ be used when the space or enter events are already handled by\n\t * something else.\n\t */\n\tsetupKeyboardEvents?: boolean;\n}\n\nexport interface IHoverPositionOptions {\n\t/**\n\t * Position of the hover. The default is to show above the target. This option will be ignored\n\t * if there is not enough room to layout the hover in the specified position, unless the\n\t * forcePosition option is set.\n\t */\n\thoverPosition?: HoverPosition | MouseEvent;\n\n\t/**\n\t * Force the hover position, reducing the size of the hover instead of adjusting the hover\n\t * position.\n\t */\n\tforcePosition?: boolean;\n}\n\nexport interface IHoverPersistenceOptions {\n\t/**\n\t * Whether to hide the hover when the mouse leaves the `target` and enters the actual hover.\n\t * This is false by default when text is an `IMarkdownString` and true when `text` is a\n\t * `string`. Note that this will be ignored if any `actions` are provided as hovering is\n\t * required to make them accessible.\n\t *\n\t * In general hiding on hover is desired for:\n\t * - Regular text where selection is not important\n\t * - Markdown that contains no links where selection is not important\n\t */\n\thideOnHover?: boolean;\n\n\t/**\n\t * Whether to hide the hover when a key is pressed.\n\t */\n\thideOnKeyDown?: boolean;\n\n\t/**\n\t * Whether to make the hover sticky, this means it will not be hidden when the mouse leaves the\n\t * hover.\n\t */\n\tsticky?: boolean;\n}\n\nexport interface IHoverAppearanceOptions {\n\t/**\n\t * Whether to show the hover pointer, a little arrow that connects the target and the hover.\n\t */\n\tshowPointer?: boolean;\n\n\t/**\n\t * Whether to show a compact hover, reducing the font size and padding of the hover.\n\t */\n\tcompact?: boolean;\n\n\t/**\n\t * When {@link hideOnHover} is explicitly true or undefined and its auto value is detected to\n\t * hide, show a hint at the bottom of the hover explaining how to mouse over the widget. This\n\t * should be used in the cases where despite the hover having no interactive content, it's\n\t * likely the user may want to interact with it somehow.\n\t */\n\tshowHoverHint?: boolean;\n\n\t/**\n\t * Whether to skip the fade in animation, this should be used when hovering from one hover to\n\t * another in the same group so it looks like the hover is moving from one element to the other.\n\t */\n\tskipFadeInAnimation?: boolean;\n\n\t/**\n\t * The max height of the hover relative to the window height.\n\t * Accepted values: (0,1]\n\t * Default: 0.5\n\t */\n\tmaxHeightRatio?: number;\n}\n\nexport interface IHoverAction {\n\t/**\n\t * The label to use in the hover's status bar.\n\t */\n\tlabel: string;\n\n\t/**\n\t * The command ID of the action, this is used to resolve the keybinding to display after the\n\t * action label.\n\t */\n\tcommandId: string;\n\n\t/**\n\t * An optional class of an icon that will be displayed before the label.\n\t */\n\ticonClass?: string;\n\n\t/**\n\t * The callback to run the action.\n\t * @param target The action element that was activated.\n\t */\n\trun(target: HTMLElement): void;\n}\n\n/**\n * A target for a hover.\n */\nexport interface IHoverTarget extends Partial<IDisposable> {\n\t/**\n\t * A set of target elements used to position the hover. If multiple elements are used the hover\n\t * will try to not overlap any target element. An example use case for this is show a hover for\n\t * wrapped text.\n\t */\n\treadonly targetElements: readonly HTMLElement[];\n\n\t/**\n\t * An optional absolute x coordinate to position the hover with, for example to position the\n\t * hover using `MouseEvent.pageX`.\n\t */\n\treadonly x?: number;\n\n\t/**\n\t * An optional absolute y coordinate to position the hover with, for example to position the\n\t * hover using `MouseEvent.pageY`.\n\t */\n\treadonly y?: number;\n}\n\n// #region Managed hover\n\nexport interface IManagedHoverTooltipMarkdownString {\n\tmarkdown: IMarkdownString | string | undefined | ((token: CancellationToken) => Promise<IMarkdownString | string | undefined>);\n\tmarkdownNotSupportedFallback: string | undefined;\n}\n\nexport function isManagedHoverTooltipMarkdownString(obj: unknown): obj is IManagedHoverTooltipMarkdownString {\n\tconst candidate = obj as IManagedHoverTooltipMarkdownString;\n\treturn typeof candidate === 'object' && 'markdown' in candidate && 'markdownNotSupportedFallback' in candidate;\n}\n\nexport interface IManagedHoverTooltipHTMLElement {\n\telement: (token: CancellationToken) => HTMLElement | Promise<HTMLElement>;\n}\n\nexport type IManagedHoverContent = string | IManagedHoverTooltipMarkdownString | IManagedHoverTooltipHTMLElement | HTMLElement | undefined;\nexport type IManagedHoverContentOrFactory = IManagedHoverContent | (() => IManagedHoverContent);\n\nexport interface IManagedHoverOptions extends Pick<IHoverOptions, 'actions' | 'linkHandler' | 'trapFocus'> {\n\tappearance?: Pick<IHoverAppearanceOptions, 'showHoverHint'>;\n}\n\nexport interface IManagedHover extends IDisposable {\n\t/**\n\t * Allows to programmatically open the hover.\n\t */\n\tshow(focus?: boolean): void;\n\n\t/**\n\t * Allows to programmatically hide the hover.\n\t */\n\thide(): void;\n\n\t/**\n\t * Updates the contents of the hover.\n\t */\n\tupdate(tooltip: IManagedHoverContent, options?: IManagedHoverOptions): void;\n}\n\n// #endregion Managed hover\n"]}
@@ -2,6 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
3
  * Licensed under the MIT License. See License.txt in the project root for license information.
4
4
  *--------------------------------------------------------------------------------------------*/
5
+ export const NotSelectableGroupId = 'notSelectable';
5
6
  export class ListError extends Error {
6
7
  constructor(user, message) {
7
8
  super(`ListError [${user}] ${message}`);